打印
[微控制器/MCU]

LPC1114 I2C锁死问题

[复制链接]
1113|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hygneu|  楼主 | 2019-3-1 22:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用LPC1114 片上I2C硬件,总线挂有一个E2PROM出现不能正确读写,测试SDA和SCL一直锁死为高电平,测试时,把SDA和GND短接一 下,I2C总线就恢复正常,能正常读写E2PROM。短接时能断定LPC1114没有重启。同时在SDA和SCL锁死高电平期间,程序其他部分运行正常(串口通信/ADC采集等)。

怀疑由于干扰导致某次I2C通讯异常,I2C硬件进入某种状态,释放总线,从而SCL和SDA为高电平。
这个状态可能程序没有处理?请NXP专家解答。

相关帖子

沙发
hygneu|  楼主 | 2019-3-4 16:17 | 只看该作者
目前能够确认,在使用镊子短路SCL到GND后,监控状态码为0XF8,因为F8不产生中断,程序没有处理F8的状态机,所以SDA和SCL一直为高电平,但是我程序是每隔30S写读E2PROM的,此后状态码一直为F8,不改变(因为SDA和SCL一直为高电平,所以状态码没改变),像是片上外设锁死,以后都不在写读E2PROM。目前通过每隔30s复位I2C接口,再操作E2PROM。结果是用镊子短路SCL,即使这次E2PROM写不成功,下次30s后就正常了。
现在是在干扰SCL后,为什么状态码是F8,而不是00总线错误?

使用特权

评论回复
板凳
hygneu|  楼主 | 2019-3-4 16:23 | 只看该作者
hygneu 发表于 2019-3-4 16:17
目前能够确认,在使用镊子短路SCL到GND后,监控状态码为0XF8,因为F8不产生中断,程序没有处理F8的状态机, ...

在SCL通过和GND短接,模拟SCL被干扰,进入死锁后,使用镊子把SDA和GND短接一下,程序回复正常。
这里SDA和GND短路,可能会造成三个信号:启动、应答、结束信号,这三个信号中的哪一个起作用了,使状态由F8转移到其他程序可以处理的状态,所以I2C恢复正常。

使用特权

评论回复
地板
hygneu|  楼主 | 2019-3-4 16:24 | 只看该作者
现在的问题是在干扰SCL后,为什么状态码是F8,而不是00总线错误?

使用特权

评论回复
5
hygneu|  楼主 | 2019-3-4 20:01 | 只看该作者
SCL被短路到GND,导致LPC1114   I2C口丢失总线仲裁,怎样才能重拾仲裁权呢?程序本来是每30S写读一次E2PROMM的,只有一个主机。那么被干扰后,最长30S应该又重拾仲裁权的呀。

使用特权

评论回复
6
hygneu|  楼主 | 2019-3-4 20:19 | 只看该作者
hygneu 发表于 2019-3-4 20:01
SCL被短路到GND,导致LPC1114   I2C口丢失总线仲裁,怎样才能重拾仲裁权呢?程序本来是每30S写读一次E2PROM ...

上述对仲裁丢失的理解有误:SCL线的是完成快慢时钟的同步和SDA线的完成仲裁。
仲裁是通过SDA完成的。
https://blog.csdn.net/u010027547/article/details/47779975

使用特权

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

本版积分规则

22

主题

81

帖子

0

粉丝