主题中讨论的其他器件: TPS62360
你(们)好!
目前、我们的基于 TI AM5708的 CPU 板和 I2C 通信正面临一种奇怪的情况。
我们使用连接到一个 SoC 内部 I2C 端口的触摸显示屏、从硬件的角度来看、它看起来很好。 但我们经常遇到这样的情况:作为总线主控的 CPU 突然停止来驱动时钟(保持逻辑高电平)并且还将 SDA 和中断线路保持在逻辑低电平。 我们使用逻辑分析器确认了这一点。
我们将使用 Linux 内核4.4.41、并看到 i2c-OMAP 驱动程序在函数"omap_i2c_xfer_msg"中运行到以下超时:
/*
*再次访问:我们应该中止信号传输,但总线会运行
*进入仲裁,我们目前无法从它恢复。
*/
TIMEOUT = WAIT_FOR_COMPENSATION_TIMEOUT (&OMAP->cmd_COMPLETE,
OMAP_I2C_TIMEOUT);
如果(timeout == 0){
dev_err (omap->dev、"controller timed out\n");
OMAP_i2c_reset (OMAP);
_OMAP_i2c_init (OMAP);
返回-ETIMEDOUT;
}
在这种情况下、应该使用函数"omap_i2c_reset"重新初始化、然后重新初始化以下内容。
我可以确认、正在调用 OMAP_i2c_reset 函数并完全执行、没有任何错误、但总线仍然停留在提到的行为中。
此行为是否是已知问题? 我们能做些什么呢?
只有重新启动才能帮助我们从目前的这种情况中恢复、但对于我们的客户来说、这不是一种选择、因为这种问题经常发生。
此致、
弗洛里安