I2C偶尔无法应答,SCL拉低时间变长
我在I2C总线上接了一个EEPROM和一个温湿度传感器,主机偶尔会发现设备不应答,逻辑分析仪看到SCL拉低时间变长。怀疑是I2C时序受干扰或者软件复位没及时释放。我试过加延时2ms再发下一帧,问题就消失了。 你是开了中断模式还是轮询?中断模式下优先级乱了容易堵总线。 SCL拉低太久可能是从设备在等待内部写周期结束。 你可以加个超时机制,如果I2C_BUSY太久就强制重启外设。 我之前碰到是因为上拉电阻太大,波形恢复太慢。 EEPROM在写页数据时会锁总线几毫秒,这是正常现象。 试试在每次通信前检测BUSY标志再发起启动。 我觉得也可能是GPIO口模式没切回开漏,导致释放不及时。 你抓波形时注意看ACK位,是哪一位开始不对的。 如果温湿度传感器是SHT系列,可能内部有延迟处理时间。
页:
[1]