大约两个 ADS1219连接到同一个 I2C 总线、在单采集模式下、ADC 会干扰 I2C 通信、因此无法轮询状态。
接线的地址为 ADC1:A0=1、A1=0;ADC2:A0=0、A1=0
该故障在启动单次转换并尝试读取寄存器0x24以获取
DRDY 状态。
发生什么情况:
同时转换 ADS1219会偶尔将 SDA 下拉为低电平。
SDA 和 SCL 的上拉电阻均为1k Ω、我们尝试了500 Ω、但仍然存在同样的问题。
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.
大约两个 ADS1219连接到同一个 I2C 总线、在单采集模式下、ADC 会干扰 I2C 通信、因此无法轮询状态。
接线的地址为 ADC1:A0=1、A1=0;ADC2:A0=0、A1=0
该故障在启动单次转换并尝试读取寄存器0x24以获取
DRDY 状态。
发生什么情况:
同时转换 ADS1219会偶尔将 SDA 下拉为低电平。
SDA 和 SCL 的上拉电阻均为1k Ω、我们尝试了500 Ω、但仍然存在同样的问题。
尊敬的 Ralph:
欢迎来到 E2E 论坛! 只有当 ADS1219被寻址并且 ACK 或发送数据时、SDA 线才应该变为低电平。 我看到了一些问题、即寄存器1的重复轮询有时在主轮询循环中发生的速度可能快于外设实际发送和接收数据的速度。 这类似于对 I2C 外设的命令进行排队、让外设能够更快地完成操作。 最终结果是队列中有多个尚未完成的命令。 因此、需要确保在对器件寻址时收到了相应的 ACK、并且器件有时间返回数据、然后才会对下一次寄存器读取请求进行排队。
帮助使转换过程更加顺畅的一种方法是开始转换、等待预定的时间(数据速率周期)、然后轮询寄存器。
您是否拥有示波器快照或更好的通信逻辑分析仪快照? 这将有助于确定在 SDA 变为低电平时发生了什么情况。
此致、
鲍勃 B
尊敬的 Ralph:
此时我感到困惑。 最初您说 SDA 偶尔会将 SDA 拉低、但示波器截图显示器件在发送 RREG 命令时发出 NACK 而不是 ACK。 这意味着当 SDA 应该变为低电平时、它不会变为低电平。
NACK 可能有许多原因。 如果这是使用 Fly-Wire 连接的原型设计情况、最常见的是总线上的噪声。 另一种可能的问题可能是、您正在尝试从 ADS1219读取、同时器件内部有一个寄存器更新。
在任何情况下、您的代码都需要能够处理 NACK 条件。 当从 ADS1219接收到 NACK 时、需要有错误处理例程。 这可以只是在分配的尝试次数范围内重试整个传输。
如果您对命令进行否定应答、则会尝试立即从器件中读取命令、就好像命令已被正确接受一样、结果将无效。 因此、我不清楚正在发生的事件的处理以及如何处理 NACK 条件。
此致、
鲍勃 B