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.

[参考译文] AM2434:在 1 小时连续运行后、I2C 无响应

Guru**** 2773145 points

Other Parts Discussed in Thread: AM2434

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1617513/am2434-i2c-not-responding-after-continuous-run-for-1-hr

器件型号: AM2434

你(们)好  

我们以 30 张卡的菊花链运行 AM2434 定制板。 我们正在使用 SDK ind_comms_sdk_am243x_09_02_00_24  

运行大约 4 小时后、很少有 EtherNet/IP (EIP) 卡停止响应 PLC 命令。 具体而言、  运行/停止命令和速度变化无响应 、即使这些卡片仍然在 PLC 中显示在线 此外、我们还检查了 prinf 函数未被调用。

运行/停止和速度更新功能在中处理  单独的 DAC 任务 、 我们在这里调用
I2C_transfer(i2cHandle, i2cTransaction);在 SOC_DAC_Process 内每 30ms 一次。 系统是否可能卡在内部I2C_transfer()? 另外、30ms 间隔是否足以可靠地完成 I2C_transfer() 操作?  

 

此处是任务参考。

image.png

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

    您好、

    您是否将 I2C 配置为阻塞模式? 如果是、我们会在传输完成后等待信标变量获得 POST。

    此致、

    Tushar

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的、I2C 外设配置为阻塞模式、因为我们必须每 30ms 刷新一次 DAC 输出 。 我很感激关于建议的方法I2C_transfer() 的指导、以保证在 30ms 速率持续调用。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尝试将 I2C 事务的超时值配置为不等待无限时间。 用于超时的默认值为 SystemP_WAIT_FOREVER。

    I2C_TRANSFER() API 使用 Semaphore_Pend API,其超时值在 I2C 事务变量中配置。 用适当的超时配置超时值 、以保证 在确定性时间内返回 I2C_TRANSFER()。 I2C_API 将根据操作完成返回成功/失败状态。

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

    您好、

    我们已经在使用 timeout i2cTransaction->timeout = ClockP_instanceToTicks (20000);

    我们还会验证返回状态、但I2C_transfer()调用正在返回 –1


    根据查看 I2C 驱动程序、I2C_recoverBus()似乎仅处理超时‑相关问题。 如果故障是由超时以外的原因引起的、我们应该怎么办?
    是否有针对非‑μ s 超时错误的恢复机制、或者有任何推荐的诊断这些故障情况的方法?
    ‑、在几次重试(例如,在 3 次尝试失败后)后、从应用程序端重新初始化 I2C 外设是否可以接受?


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

    您可以检查的值  intStatusErr  任何其他 I2C 错误的 I2C_Object 变量。

    是否有非‑超时错误的恢复机制、或者是否有任何推荐的方法来诊断这些故障情况?
    ‑、在几次重试(例如,在 3 次尝试失败后)后从应用程序端重新初始化 I2C 外设是否可以接受?

    请参阅 TRM 中提到的以下注意事项。 如果 SCL 一直处于低电平、则需要总线复位才能正常运行。

    或者如果 SDA 一直处于低电平、则等待 9 个时钟脉冲才能释放 SDA、否则会复位 I2C IP。

     I2C_LLD_recoverBus() API 执行上述操作。

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

    您好、

    目前我们正在使用这种方式来实现 i2c 恢复。 但我们仍然看到相同的行为。 您能更新我吗?我们可以在这里执行任何可能的调试步骤。

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

    您的意思是、在重新初始化驱动程序后、您是否也无法执行 I2C 事务?

    请尝试使用以下提供的文件来修改文件 (i2c_V0_LLD.c、i2c_V0.c)。

    文件 —  i2c_v0.c、i2c_v0_lld.c  

    完成上述更改后、重新构建库和示例工程。

    请告知我们结果。