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/TM4C123GH6PM:I2C 总线被从器件定期锁定-刷新总线?

Guru**** 2614265 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/581591/rtos-tm4c123gh6pm-i2c-bus-getting-locked-by-slave-device-periodically---refresh-bus

器件型号:TM4C123GH6PM

工具/软件:TI-RTOS

大家好、我一直在遇到 I2C 通信因写入错误或读取错误而被定期锁定的问题、我只是想知道 TI-RTOS 中有什么协议来刷新总线。

TI-RTOS I2C API 是否已经处理了这一问题、而我的问题在其他地方。


我觉得 I2C 总线在传输中被锁定、因为从器件将 SDA 保持在低电平、我需要刷新总线并重新进行传输。

有关我应该在何处实现此功能的任何帮助、或者如果 API 已经解决了此问题、我只需要对其进行实例化。

我想只是将 SCL 和 SDA 初始化为 GPIO、并对 SCL 引脚进行脉冲直到 SDA 被释放、然后重新初始化 I2C 外设。

谢谢、

Chris Kerluke

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

    尊敬的 Chris:

    您使用的是 TI-RTOS 的哪个版本?  较新的版本增加了 I2C_CANCEL(),这可能会对您的情况有所帮助。  以下是头文件 I2C.h 中的文档:

    /*!
     * @简短 取消所有 I2C 传输
     *
     * 此函数将取消异步 I2C_transfer()操作,IS
     * 仅适用于 I2C_MODE_CALLACK。  正在进行的传输
     * 因为任何排队的转接都将被取消。 单个回调函数
     * 对于每个传输、将从调用 I2C_cancel 的上下文中调用。
     *
     * @PRE   I2C_Transfer()已被调用。
     *
     * @param 处理 从 I2C_open 返回的 I2C_handle
     *
     * @请注意  、不同的 I2C 从设备在运行时的行为将有所不同
     *         正在进行的传输失败、需要取消。  从器件
     *         可能需要复位、或者可能存在其他从器件说明符
     *         可用于成功恢复通信的步骤。
     *
     * @sa    I2C_transfer ()
     *

    此 API 位于 TI-RTOS 2.20中。

    此致、

    Janet

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

    我目前没有使用 TI-RTOS 2.20或 Callback、因此我将尝试找出解决此问题的不同解决方案。