您好! 我正在使用 MCT8316AT 并通过 I2C 控制泵的速度、并将占空比写入速度寄存器。
运行数小时后、写入速度寄存器以调整占空比并保持泵处于设定转速的操作将停止工作且不会恢复。 每200ms、我读取3个不同的寄存器(CTRL_FAULT、GD_FAULT 和 SYS_STATUS2)并对速度寄存器(DEVICE_CTRL)进行写入。 我将在下面附加示波器捕获-您可以看到写入请求将被 NACK;但是、读取请求将被 ACK、但始终读回4个字节的相同值。 我确保如数据表中所述、在字节之间保持大于100us。 我们有办法解决这个问题、但我想了解这个问题。 有没有 解释为什么会发生这种情况并且无法恢复? 我假设卸载2个 RX/TX 缓冲区时出现了一些问题、这可能会阻止芯片在 RX 缓冲区中处理请求、从而使芯片不应答所有其他请求。 但是、如果器件正在应答读取和返回字节、这并不意味着 TX 缓冲区应该为空?
注意:我们进行了更新、其中在收到读取请求时、如果收到请求、我们的微控制器将不再重试。 相反、它会停止事务并等待直到我们的下一个200ms 循环开始对每个寄存器进行全新的读取尝试。 我们实现此目标的原因是、器件偶尔会进入这样一种状态:在读取请求(随附示波器捕获)后重复否定所有重复启动、并且我们的微控制器需要继续执行其他任务。 对此也有解释吗? 是否有人建议如何处理这种情况?
谢谢。
帕特里夏