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.

[参考译文] TIDA-01168:I2C 问题

Guru**** 2031750 points
Other Parts Discussed in Thread: TIDA-01168
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/tools/simulation-hardware-system-design-tools-group/sim-hw-system-design/f/simulation-hardware-system-design-tools-forum/871429/tida-01168-i2c-issue

器件型号:TIDA-01168

我对用户手册中提到的 I2C 问题有几个问题。

"开发期间的测试表明、在某些条件下(高输出电流、四相运行)、I2C 温度传感器随机无法向总线发送 ACK。 由于 I2C 总线上的噪声、这种情况每小时大约发生六次。 当前固件能够从这种事件中恢复。"

(1)最近是否对软件或硬件进行了更新、以使"ACK"错误不再发生? 我假设以上段落中的最后一句是软件中的"修复"。
(2)我想解决 I2C 问题、因为我计划在 I2C 总线上添加更多节点。 我第一次尝试解决此问题的方法是更换10k 范围内的上拉电阻器、例如2.2k。 我想在结果之前和之后使用修复程序进行测试。 在运行期间捕捉此"ACK"故障的最简单方法是什么?

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

    尊敬的 Antonios:  

    感谢您关注 TIDA-01168。 让我来回答您的问题。

    (1)最近是否对软件或硬件进行了更新、以使"ACK"错误不再发生? 我假设以上段落中的最后一句是软件中的"修复"。

    ->我们仅发布了一个版本的固件。 2017年6月28日发布的这个版本包含"权变措施"。 hal.c 中有一个执行该作业的函数"hal_I2CWait"。  

    /*等待 I2C 就绪*/
    void hal_I2CWait (void)
    {
    /*等待停止条件位为零。 *
    while (I2caRegs.I2CMDR.bit.STP = 1){asm (" NOP");}
    
    /*等待总线忙为零或直到错误发生*/
    while (I2cRegs.I2CSTR.bit.BB = 1)
    {
    /*问题是 DC/DC 中的功率级对于 i2c 而言具有相当大的噪声
    *并且总线上存在错误(无 ACK 或仲裁丢失)。 是的
    *仅测量温度、因此仅忽略误差
    *错误计数器增加。 请勿复制和粘贴
    *这种肮脏的解决方案适合任何严重的应用!!! 请改用 ISR! *
    如果((I2cRegs.I2CSTR.bit.nack = 1)||(I2cRegs.I2CSTR.bit.nack = 1))
    {
    I2caRegs.I2CMDR.bit.STP= 1;/*发送 STOP */
    I2caRegs.I2CSTR.bit.nack = 1;/*清除 NACK 标志*
    i2C_ERR_cnt++;
    中断;
    }
    }
    

    (2)我想解决 I2C 问题、因为我计划在 I2C 总线上添加更多节点。 我第一次尝试解决此问题的方法是更换10k 范围内的上拉电阻器、例如2.2k。 我想在结果之前和之后使用修复程序进行测试。 在运行期间捕捉此"ACK"故障的最简单方法是什么?

    -> 这很困难。 我假设 ACK 问题是由 i2c 总线上的噪声注入引起的。 遗憾的是、总线没有推挽驱动器、并且总线上注入的电流会导致上拉电阻器上的压降。 可能会发生 i2c 从站中的状态机对其做出反应、但无法正确响应的情况。 我记得我将上拉电阻器降低到1k、但这对解决方法没有太大帮助。 我认为模拟或 SPI 传感器可以提供更一致的结果。 此外、PCB 布局在这里发挥着重要作用。

    我希望这对您有所帮助、

    此致、Jiri