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.
我对用户手册中提到的 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