各位网友,有没有遇到过这种情况:主芯片给T24C02A发一个命令,比如写一个0xA0,写命令,一般的IIC是在发完数据后,从设备应该会下拉SDA响应,可是不知道为什么,我这边在发完数据后,一直检测到SDA是低的,这是为什么呢?有没有遇到过这种情况!?求助!
------解决方案--------------------
你是想说,ACK只应该是一个脉冲,不能一直低?
I2C是由主机时钟信号控制的,如果时钟不变,从机输出当然不会变
如果不是因为时钟,那你有没有上拉电阻?
------解决方案--------------------
对,SDA没有上拉电阻。
------解决方案--------------------
那可能是你读写的数据是一串很长的0。
还有可能是SCL停了,检查一下SDA低的时候,有没有SCL。
------解决方案--------------------
那就是你主机的SDA I/O 设置有问题
上拉不了,说明I/O在输出低,先断开从设备来确认是哪一边问题
------解决方案--------------------
是说你读SDA时或I2C空闲时,不接从设备,SDA要被上拉电阻拉到高,先查这个
------解决方案--------------------
+1
先排除外部的干扰。也很可能是从设备的问题。因为 I2C 的信号是线与的,任何挂在线上的部件输出低,都会把信号线拉低。
------解决方案--------------------
换句话说,高是大家共同努力的结果,低则是一票否决。
------解决方案--------------------
主机在第九个时钟会释放SDA,等待从机拉低SDA,所以你应该吧主机的SDA这个时候设置成输入,然后判断SDA是否为0.如果为0就返回,不为0说明通讯失败,
你重启S信号,是你主机占据的时钟,如果说你的SDA一直为低电平,可能是你硬件外部上拉或者io口方向没设置对,
------解决方案--------------------
断开从设备做同样测试,第9个时钟时SDA是高么?
如果是,问题在从设备,仔细读数据手册,可能时序不满足要求,可以降低波特率,增加start后到开始发数据的延迟
如果不是,问题在主机,重点检查I/O配置,设成open drain输出,读ACK时输出为高,再配成输入