哪位能给个gd32读SMBus的代码?

[复制链接]
 楼主| nikotin 发表于 2022-9-26 17:07 | 显示全部楼层 |阅读模式
本帖最后由 nikotin 于 2022-9-26 17:16 编辑

我参考I2C_EEPROM的代码,按照手册上的说明,通讯之前设置了smbus相关的位:
    i2c_mode_addr_config(I2CX, I2C_SMBUSMODE_ENABLE, I2C_ADDFORMAT_7BITS, I2CX_SLAVE_ADDRESS7);
i2c_smbus_type_config(I2CX, I2C_SMBUS_HOST);
                i2c_smbus_arp_config(I2CX, I2C_ARP_DISABLE);但第二次发送从设备地址后开始后读数据时,I2C_FLAG_SBSEND这个标记会一直不被置位。设备在stm32下是可以正常读取信息的,但是改为gd32就不行了。关键是官方也没给smbus的例子,网上也查不到类似例子,一个小事情,折腾好几天了。

评论

搞定了吗?我现在也是同样的问题,可以看看你的代码吗  发表于 2025-3-31 15:35
starsuper123 发表于 2022-9-30 09:37 | 显示全部楼层
可以把你程序放上来看看嘛
liu96jp 发表于 2025-5-9 11:28 | 显示全部楼层
SMBus是基于I2C协议的扩展协议,虽然大部分操作与I2C类似,但SMBus在时序、超时处理、PEC等方面有更严格的要求。GD32的I2C外设可能默认以标准I2C模式运行,而你在代码中启用了SMBus模式,可能导致不兼容。
ex7s4 发表于 2025-5-9 12:36 | 显示全部楼层
建议检查GD32的I2C外设是否完全支持SMBus模式。如果GD32的I2C外设不支持SMBus模式,建议切换回标准I2C模式。
tax2r6c 发表于 2025-5-9 13:53 | 显示全部楼层
如果必须使用SMBus模式,确保以下配置正确:启用SMBus时钟同步,配置SMBus超时,如果需要PEC校验,确保启用PEC功能。
p0gon9y 发表于 2025-5-9 15:24 | 显示全部楼层
确保I2CX_SLAVE_ADDRESS7的值与从设备的实际地址一致
su1yirg 发表于 2025-5-9 18:34 | 显示全部楼层
你启用了SMBus主机模式:确保从设备支持SMBus主机模式。如果从设备仅支持标准I2C模式,可能导致通信失败
w2nme1ai7 发表于 2025-5-10 07:57 | 显示全部楼层
如果从设备不支持SMBus主机模式,建议切换回标准I2C模式。如果从设备需要特定的SMBus命令,确保代码中发送了正确的命令。
b5z1giu 发表于 2025-5-10 09:25 | 显示全部楼层
如果从设备需要ARP功能,禁用ARP可能导致通信失败。如果从设备不需要ARP功能,禁用ARP是正确的。检查从设备是否需要ARP功能。如果需要,启用ARP功能。如果不需要,保持ARP禁用状态。
q1d0mnx 发表于 2025-5-10 11:30 | 显示全部楼层
D32和STM32的I2C外设可能存在差异,例如:寄存器配置方式不同。SMBus支持程度不同。中断或DMA处理方式不同。
zhizia4f 发表于 2025-5-10 13:49 | 显示全部楼层
检查I2C总线时序可以使用示波器或逻辑分析仪检查I2C总线的SCL和SDA信号,确保时序符合SMBus协议要求。
y1n9an 发表于 2025-5-10 17:05 | 显示全部楼层
如果从设备地址是10位地址,而你配置为7位地址,可能导致通信失败。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

3

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部

2

主题

3

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部