打印

gd32 的i2c问题

[复制链接]
4632|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
mycent|  楼主 | 2019-3-31 19:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我发现好多说i2c卡死的问题。
发现gd32,包括stm32都有一个问题,就是busy位的逻辑错误,属于硬件设计的问题,之前知道stm32有这bug,不幸的是gd32也有这毛病。
具体问题就是,按照i2c标准来说,一次完整的i2c总线操作必须由start位开始,stop位结束。如果大家都遵守这个规则,也就没问题了。但是实际应用中往往有外部设备不遵守这个规则,比如有的i2c主设备发出start位后,由于其它原因,导致传输中断,又没有发出stop信号,这种情况下就会导致gd32的i2c控制器的busy位一直为1.还有外部信号干扰,误出发产生了start信号,也会导致busy位出现。
gd32中,busy的产生条件就是捕捉到start信号就置位,即使设置的是i2c从设备,并且地址不匹配,它也会置位。
复位busy位可以通过调用i2c_software_reset_config(I2Cx, I2C_SRESET_SET)函数来复位。
但是在实际编写软件中,要怎么才能去实时监控这个busy什么时候是真正的超时呢。
各位大侠有没有解决办法。

使用特权

评论回复
沙发
零三翟邢止胃| | 2019-4-1 08:25 | 只看该作者
我也想知道的啊! 同求啊!

使用特权

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

本版积分规则

4

主题

7

帖子

0

粉丝