【发布时间】:2018-02-19 17:08:09
【问题描述】:
我正在使用控创嵌入式计算机通过 I2C 与 ST 微控制器通信。我正在使用开发适配器与 I2C 接口,使用here 中描述的简单 read() 和 write() 函数。
问题是如果从机由于某种原因未能确认一个字节,I2C 总线将冻结,主机无法发送或接收任何信息(即使程序已关闭并重新启动!)。目前我可以重置 I2C 总线的唯一方法是重新启动,这远非理想。
有人对我能做什么有任何建议吗?有没有一种方法可以通过 I2C 进行通信,使用其他方法可以优雅地处理通信失败而不冻结?或者任何可以重置 I2C 的方式?
【问题讨论】:
-
“诀窍”是发送九个时钟。对“重置 I2C 设备”的简单搜索将为您提供多个链接。例如:community.nxp.com/thread/316813
-
我们遇到的问题是我们正在使用 linux 系统读写一个打开的文件句柄。那么,鉴于我们无法控制特殊状态,例如 6 ms 内的线路上行或线路下行电压或其他什么,我们如何发送复位。有些设备需要重置。例如 i2c 路由器,卡在某个模式中,并且在重置它们之前无法更改它们的输出。本质上,该设备消失并变得“不可见”。