我正在使用kontron嵌入式计算机通过I2C与ST微控制器进行通信。我正在使用dev适配器与I2C接口,使用简单的read()和write()函数描述here。
问题是如果从器件由于某种原因未能确认一个字节,则I2C总线会冻结,并且主器件无法发送或接收任何信息(即使程序已关闭并重新启动!)。我现在能够重置I2C总线的唯一方法是重启,这远非理想。
有没有人对我能做什么有任何建议?有没有一种方法可以使用其他方法通过I2C进行通信,这些方法可以在没有freezinng的情况下优雅地处理通信失败?或者可以通过何种方式重置I2C?
答案 0 :(得分:1)
最近的内核支持驱动程序级别的I2C恢复(请参阅5f9296ba21b3),并且应自动触发此恢复。您可能必须为您的内核实现恢复方法和/或将所需的scl / sda gpios定义添加到devicetree。
答案 1 :(得分:0)
最常见的I2C总线错误是从设备最终处于"数据线"低。要恢复总线,主设备应生成时钟直到数据线"很高兴。