This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] RTOS/EK-TM4C1294XL:I2C 故障边缘情况

Guru**** 2422790 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/613724/rtos-ek-tm4c1294xl-i2c-failure-edge-case

器件型号:EK-TM4C1294XL

工具/软件:TI-RTOS

我正在研究一些固件、这些固件会合并来自多个 I2C 源的数据并将其移至云。  我注意到的是、当 I2C 在阻塞模式下使用时、如果器件无法永远响应固件块。  我认为这种糟糕的行为、因为我宁愿继续执行、故障会被标记并转发给用户。  我还注意到 I2C 似乎没有超时机制。  我很可能会对这些事实有所误解、如果我是这样、请纠正我的错误。

我的中途可行的解决方案假设上述方法是在回调模式下执行 I2C。  如果回调在特定时间内未能发生,则发出报警声。  然而,我不禁要问如何从这种情况中恢复。  我想最好的办法是关闭驱动程序并重新启动它、但我不确定关闭后等待操作会发生什么情况。  是否有人能够说明哪些存储器可能仍处于活动状态、或者这是安全操作?  如果我可以杀死驱动程序、请将该芯片标记为死区并重新启动驱动程序、轮询我可以恢复到业余状态的其余部分。

在回调中、I2C 驱动器能够在不进行电源复位的情况下恢复并不重要。  当它死了,我只能让它死了,但我正在寻找我的所有选择。

感谢你的帮助

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Adam:

    我们多次请求为 I2C 添加超时值、但遗憾的是、它从未切断进入版本的连接。 变通方法是使用回叫模式(如您所述)。 如果检测到问题、则应通过 I2C_Close API 关闭相应的 I2C 实例。

    Todd
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    如果我可以的话-有时"连接的从属设备会证明原因或成为 I2C 事务失败的受害者"。

    认识到这一点-我们通常使用 GPIO 为从器件"供电"-这可在 GPIO 切换时确保从器件"返回"到初始状态。   (小型 FET 可能提供超出 GPIO 能力的电源)  

    还可以生成多个 SCL 时钟来恢复从器件-但如果失败-电源切换(始终)起作用...    "空闲"MCU 计时器可以执行"超时"检测-并根据需要启动每个级别的恢复...