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

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

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

问题是,如果从设备由于某种原因未能确认一个字节,I2C 总线将冻结,并且主设备无法发送或接收任何信息(即使程序关闭并重新启动!)。目前重置 I2C 总线的唯一方法是重新启动,这远非理想。有人对我能做什么有什么建议吗?

答案1

我自己一直在研究带有 DesignWare I2C 控制器的 UpBoardX86。我找到了一种方法来使内核解除绑定并/dev/i2c-5再次重新绑定设备。

ls -al /dev/i2c-5
echo -n "808622C1:01" > /sys/bus/platform/drivers/i2c_designware/unbind
ls -al /dev/i2c-5
echo -n "808622C1:01" > /sys/bus/platform/drivers/i2c_designware/bind
ls -al /dev/i2c-5

名称/dev/i2c-*和设备树路径名称将根据您拥有的硬件而有所不同。取消绑定后,ls -al 命令将失败,这表明该设备不再存在。我从以下文章中了解到如何做到这一点:https://lwn.net/Articles/143397

我不确定这是否可以解决您遇到的问题,但这可能是您可以做的最接近重新启动的事情。

相关内容