打印

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

[复制链接]
2138|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
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 回复TA
搞定了吗?我现在也是同样的问题,可以看看你的代码吗 
沙发
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模式。

使用特权

评论回复
5
tax2r6c| | 2025-5-9 13:53 | 只看该作者
如果必须使用SMBus模式,确保以下配置正确:启用SMBus时钟同步,配置SMBus超时,如果需要PEC校验,确保启用PEC功能。

使用特权

评论回复
6
p0gon9y| | 2025-5-9 15:24 | 只看该作者
确保I2CX_SLAVE_ADDRESS7的值与从设备的实际地址一致

使用特权

评论回复
7
su1yirg| | 2025-5-9 18:34 | 只看该作者
你启用了SMBus主机模式:确保从设备支持SMBus主机模式。如果从设备仅支持标准I2C模式,可能导致通信失败

使用特权

评论回复
8
w2nme1ai7| | 2025-5-10 07:57 | 只看该作者
如果从设备不支持SMBus主机模式,建议切换回标准I2C模式。如果从设备需要特定的SMBus命令,确保代码中发送了正确的命令。

使用特权

评论回复
9
b5z1giu| | 2025-5-10 09:25 | 只看该作者
如果从设备需要ARP功能,禁用ARP可能导致通信失败。如果从设备不需要ARP功能,禁用ARP是正确的。检查从设备是否需要ARP功能。如果需要,启用ARP功能。如果不需要,保持ARP禁用状态。

使用特权

评论回复
10
q1d0mnx| | 2025-5-10 11:30 | 只看该作者
D32和STM32的I2C外设可能存在差异,例如:寄存器配置方式不同。SMBus支持程度不同。中断或DMA处理方式不同。

使用特权

评论回复
11
zhizia4f| | 2025-5-10 13:49 | 只看该作者
检查I2C总线时序可以使用示波器或逻辑分析仪检查I2C总线的SCL和SDA信号,确保时序符合SMBus协议要求。

使用特权

评论回复
12
y1n9an| | 2025-5-10 17:05 | 只看该作者
如果从设备地址是10位地址,而你配置为7位地址,可能导致通信失败。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

3

帖子

0

粉丝