“主题中讨论的其他器件:ADS1015、 ISO1541
工具/软件:
我正在使用一个 ADS1015BQDGSRQ1(电压为 5V)和 ISO1541QDRQ1(以 TMS320F28386 作为 I2C 总线控制器)来与 3.3V 总线连接。
ADS1015 是总线上的唯一器件、TMS320 是唯一的控制器。 时钟速率为 100kHz
间歇性地、在从控制器写入 ADS1015 期间、ADS1015 似乎提前发送一个 ACK、中断通信。 我正在寻找故障排除帮助。 您知道什么会导致此行为吗?
以下是原理图截图:

由于 TMS320 将 SDA 拉至 0V 以实现低电平信号、而 ISO1541 V_OL 约为 600mV、因此 我们可以使用该电压差来查看 ADS1015 器件何时将 SDA 保持为低电平。
在以下示例中、我展示了预期的通信以及我观察到的两个故障案例。 由于是间歇性的、我没有正确的屏幕截图、所以我手动重新创建了它们。
写入 ADS1015 配置寄存器时的预期行为:

失败情况 1 - ADS1015 提前发送 ACK 1 位:

发生这种情况时、看起来 ADS1015 会在控制器释放 SDA 以发送最后一个位 1 时将 SDA 拉至低电平。 控制器认为它已失去总线仲裁并停止发送时钟。
然后、SDA 保持低电平约 27ms、这与 ADS1015 的总线空闲超时周期一致。
失败案例 2 - ADS1015 提前半个周期发送 ACK:

在这种情况下、ADS1015 在向字节的最后一位计时后显示为高电平时发送 ACK。 对于控制器、这看起来像是另一个控制器发送了一个启动条件。
与前一种情况一样、控制器认为它已失去仲裁并停止时钟输出。 同样的总线空闲超时适用。
当我在示波器上看到这些信号时、噪声水平很低。 电源电压也看起来稳定。
如果深入了解可能的原因或以前的此类行为经验、将有助于排除故障。
我也有兴趣了解这种总线行为的其他解释。
谢谢