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.

[参考译文] ADS1015-Q1:在 I2C_SDA 上提前发送 ACK

Guru**** 2536100 points
Other Parts Discussed in Thread: ADS1015, ISO1541

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/1566949/ads1015-q1-ack-being-sent-early-on-i2c_sda

器件型号:ADS1015-Q1
“主题中讨论的其他器件:ADS1015ISO1541

工具/软件:

我正在使用一个 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。 对于控制器、这看起来像是另一个控制器发送了一个启动条件。
与前一种情况一样、控制器认为它已失去仲裁并停止时钟输出。 同样的总线空闲超时适用。

当我在示波器上看到这些信号时、噪声水平很低。 电源电压也看起来稳定。


如果深入了解可能的原因或以前的此类行为经验、将有助于排除故障。

我也有兴趣了解这种总线行为的其他解释。

谢谢

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

    尊敬的 Ian:

    您似乎遇到了 I2C 总线阻塞问题。 我认为器件会检测到错误的时钟边沿、表明器件未发送。 您是否能够发送示波器捕获、即使是很好的捕获? 信号行为可能表示问题发生的位置。

    我不太确定的是什么条件会导致时钟极性切换、以及在错误的边沿/时钟半周期上转换。 我以前没有在 I2C 器件上观察到这种情况。

    此致、
    Joel