使用dev适配器重置冻结的I2C总线

时间:2018-02-19 17:08:09

标签: c++ c linux embedded

我正在使用kontron嵌入式计算机通过I2C与ST微控制器进行通信。我正在使用dev适配器与I2C接口,使用简单的read()和write()函数描述here

问题是如果从器件由于某种原因未能确认一个字节,则I2C总线会冻结,并且主器件无法发送或接收任何信息(即使程序已关闭并重新启动!)。我现在能够重置I2C总线的唯一方法是重启,这远非理想。

有没有人对我能做什么有任何建议?有没有一种方法可以使用其他方法通过I2C进行通信,这些方法可以在没有freezinng的情况下优雅地处理通信失败?或者可以通过何种方式重置I2C?

2 个答案:

答案 0 :(得分:1)

最近的内核支持驱动程序级别的I2C恢复(请参阅5f9296ba21b3),并且应自动触发此恢复。您可能必须为您的内核实现恢复方法和/或将所需的scl / sda gpios定义添加到devicetree。

答案 1 :(得分:0)

最常见的I2C总线错误是从设备最终处于"数据线"低。要恢复总线,主设备应生成时钟直到数据线"很高兴。