Original question:
[参考译文] ADS7924:ADS7924 I2C寄存器读/写
最近在用STM32调试读取ADS7924,在读取寄存器测试中。发现ADS7924经常没有响应ACK导致读写失败。
这是我的读写流程
while (1)
{
写ADS7924 0x0A寄存器 0x5A;
读ADS7924 0x0A寄存器;
延时100ms;
}
我使用逻辑分析仪和示波器抓取了波形,STM32发的波形都满足手册里面的读写Timing Diagram,造成没有acknowledge的原因可能有哪些?下面分别是正常波形和异常波形,
感谢您对TI产品的关注!关于你的咨询,我们正在确认你的问题,稍后回复您。
您好,
ADS7924不返回ACK,或者是I2C时序不对,或者是命令无法正确解析。
现在用的fSCL频率是多少?
I2C上拉电阻是多大?(数据手册Figure 57)通常来说,频率越高,上拉电阻相应减小。
ADS7924 2.2 V, 12-Bit, 4-Channel, MicroPOWER Analog-to-Digital Converter With I2C Interface datasheet (Rev. C)
我的频率是100K。上拉电阻是2K。我使用 ADS7924EVM 板和MCU进行测试,并用飞线将它们连接起来。控制芯片的 SDA 和 SCL 连接到 EVM 上 J10 的 SDA 和 SCL。此外,我将两个传感器连接到 EVM 上 J1A 的 CH0 和 CH1。EVM 板上的 VDD 设置为 5V,BVDD 设置为 3.3V。最后,我移除了 EVM 的 RA1 电阻器。另一幅图是硬件连接图。
ADC板载的I2C总线上还挂有其他芯片,如果这些芯片没用,请断开连接。
否则,需要通过器件地址区分,以免总线冲突。
另外,MCU板与ADC板共地,还有一种可能是I2C外接引线有干扰,可缩短I2C引线,或使用屏蔽线。
I2C总线上只有一个芯片,并且两块板子也共地,I2C引线只有10厘米长的杜邦线。接头焊接后还打了胶。确认一下,软件层面应该没有什么问题吧?这种情况硬件方面或者干扰或者接触不良等情况的可能性更大?
如果使用同样的驱动代码,MCU与ADC具有完整的通讯交互过程,不会怀疑程序方面。