nikotin 发表于 2022-9-26 17:07

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

本帖最后由 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的例子,网上也查不到类似例子,一个小事情,折腾好几天了。

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位地址,可能导致通信失败。
页: [1]
查看完整版本: 哪位能给个gd32读SMBus的代码?