消息关闭
    暂无新消息!
今天上午我用I2C读取一个芯片的数据,一直循环读,什么问题都没有,下午来的时候,再读取,开始能读一会儿,然后就不行了,这会是什么问题?试了好几次,单片机也换了一块还是这样。芯片是ldc1314

3个回答

︿ 0
注意 I2C 的传输协议对 ACK 的定义。在一个字节帧中有一个 ACK 位,接收方在正确接收后且要继续接收时,要将数据线在此时刻拉低。

如果发送方检测到 ACK 依然是高,有如下可能:
1   没有响应的接收方;
2   接收方接收错误;
3   接收方不再继续接收。

此情况下,发送方就会停下来。

这些协议控制,一般都是硬件实现的。

你的情况很可能是外界干扰导致发送方未能正确识别 ACK:
1   检查你作为接收方器件的驱动能力。
2   试试增大上拉电阻,减小上拉强度,降低对接收方的下拉驱动能力要求。
3   适当采取抗干扰措施,如缩短或加粗信号线,使用屏蔽线等等。

很可能你周边在下午有强力电机启动,或有较强的无线信号发射运行。
︿ 0
波形图抓下来看看卡在哪,降频到100k 以内试一试,不行就继续降,默认可能是到了margin