AD7997 I2C read error问题定位及处理
出现I2C error 时,循环读AD7997的各VIN通道,返回值一直为7F00,错误原因是读超时,此时SCL为高电平,SDA为低电平,处理如下:
1 CONVST管脚设置为低,高,低,重新power up AD7997,错误不可恢复,
2 卸载AD7997驱动,重新加载,错误不可恢复,
3 I2C驱动卸载,重新加载,错误不可恢复;
经网上搜索,得知在主控制器异常时,比如看门狗复位,异常断电,MCU没有应答从设备导致,此时SDA总线被从设备拉为低电平,SCL时钟线一直为高电平,而MCU重新启动后发现SDA为低则判断为I2C总线被占用,不做任何处理,从而出现I2C总线锁死问题;以上可以定位为 I2C总线被AD7997锁死。
主控制器用的是freescale的i.MX6S,软件检查了一下uboot,其实有I2C总线的上电死锁诊断及处理,只是我们没有把此路I2C总线加进来,then 此路I2C总线加进来后,硬件短SDA到地,可出现I2C诊断锁死及发送9个SCL时钟的操作,然后这个问题就解决了。后期需实际复现I2C read error问题,看效果如何。