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.

[参考译文] MCT8316A:无法写入速度寄存器(I2C 写入请求不断获取 NACKd)

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

https://e2e.ti.com/support/motor-drivers-group/motor-drivers/f/motor-drivers-forum/1281350/mct8316a-unable-to-write-to-speed-register-i2c-write-requests-keep-getting-nackd

器件型号:MCT8316A

您好! 我正在使用 MCT8316AT 并通过 I2C 控制泵的速度、并将占空比写入速度寄存器。

运行数小时后、写入速度寄存器以调整占空比并保持泵处于设定转速的操作将停止工作且不会恢复。 每200ms、我读取3个不同的寄存器(CTRL_FAULT、GD_FAULT 和 SYS_STATUS2)并对速度寄存器(DEVICE_CTRL)进行写入。 我将在下面附加示波器捕获-您可以看到写入请求将被 NACK;但是、读取请求将被 ACK、但始终读回4个字节的相同值。 我确保如数据表中所述、在字节之间保持大于100us。 我们有办法解决这个问题、但我想了解这个问题。 有没有 解释为什么会发生这种情况并且无法恢复? 我假设卸载2个 RX/TX 缓冲区时出现了一些问题、这可能会阻止芯片在 RX 缓冲区中处理请求、从而使芯片不应答所有其他请求。 但是、如果器件正在应答读取和返回字节、这并不意味着 TX 缓冲区应该为空?

注意:我们进行了更新、其中在收到读取请求时、如果收到请求、我们的微控制器将不再重试。 相反、它会停止事务并等待直到我们的下一个200ms 循环开始对每个寄存器进行全新的读取尝试。 我们实现此目标的原因是、器件偶尔会进入这样一种状态:在读取请求(随附示波器捕获)后重复否定所有重复启动、并且我们的微控制器需要继续执行其他任务。  对此也有解释吗? 是否有人建议如何处理这种情况?

谢谢。

帕特里夏

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

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

    上面的3张图片是...  

    1:写入请求(开始和控制字节)为 NACKd
    2:在读取重复开始和读取字节 ACKd 后(请注意、对于每个请求、即使对于不同的寄存器、读回的字节始终相同)、随后是下一个 NACKd 写入请求
    3:开始写入速度寄存器、为 NACKd (注意:如果 START 操作为 NACKd、这个速度写入的代码停止写入尝试)  

    以下捕获是 MCT8316重复进行 NACKing 读取请求和微控制器通过每10ms 发送一次重复启动重试的示例

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

    尊敬的 Patricia:

    请确认使用的 I2C 频率和上拉值是多少? 您是否可以将频率降低至100kHz 并上拉至2.2K 并再次进行检查?

    谢谢、此致、

    文卡塔德里