请问一个I2C的问题
如果你只挂了一个这个RTC的话,可以证明硬件没有问题。
这种问题,查查软件吧,顺便跟你分享一些在实际情况中碰到I2C问题
1 。I2C号称可以挂很多外设,实际上各个外设会相互干扰,导致有些外设不能正确读取。比如加密IC和其他的一些外设,最好分开使用。
2。有些时候,比如你接了两个外设A,B。如果你先初始化A,则B就不能被初始化。这个时候可以考虑,先初始化B,再初始化A.
3。两个外设A,B,如果其中一个断电了,另外一个将不能初始化。
那是否意味着我这种情况硬件没有问题?在开始的时候,运行多次没有问题,只是放一会就不行了,奇怪。
谢谢分享。
那你怀疑硬件有问题,就让硬件去抓波形啊,波形形状OK但波形数据不对就是软件。数据ok,但就是不对,那就是硬件问题。建议硬件抓波形形状(上下沿等),软件抓打印信息。不是一方面的问题
看是否管脚复用了没,有可能启动了什么程序,管脚复用了,导致读不到了
建议你抓一下IIC的波形,抓一个完整的读时序,从起始位到结束位,看IIC的时序信号在哪里出现了错误。你这样说IIC出问题是分析不出原因的。我之前有个案例和你类似,IIC起始位OK,地址/读写位也OK,但是Slave没有发送ACK信号,导致master无法读slave。你看一下你的IIC挂在哪里了?我的问题原因是IIC读的时候master发生了软复位,而slave没有复位,导致IIC总线挂起。另外,你可以测量一下当你的IIC出现问题时,clk和data的电平分别是什么?
非常感谢大家的回复
没有后续了?问题解决了吗?解决了分享一下经验啊!
想用示波器量,可是实验室没买,对目前这个应用,只要开机时能读对数据,就行,先将就着用,正在layout第二板,上面layout另一个I2C器件,看看效果如何再说。
看看你挂了几个设备?特别是否有支持400k以上的设备,如果有的,这个要仔细对待,要不改版很难解决这个问题。
i2cdetect -y -r 后,iic总线是什么状态?
对于1,2,如果添加了合适的上拉,电平也是匹配的话,感觉不好理解,呵呵。
我也建议先抓下data和clk的波形,看看电平、驱动能力和时序(因为data脚是双向的,读写之间的切换和配置时机也要把握好,尤其是用GPIO脚模拟I2C时)有没有问题,应该不太可能出现这么怪异的问题。
对于3,可以理解。
为什么在master软复位而slave没有复位的情况下会导致I2C总线挂死?I2C接口一般是OC门或者OD门啊?
如果你说的现象成立,那也只能说slave芯片工作异常了(比如启动时没有通过复位进入到正常状态,等等),与I2C接口无关。
这些都是我经历过的,我很深刻。你说的合适的上拉,这个是很基础的问题。发生问题后,我们修改了上拉,修改了软件,还是无果。对于这些问题,我现在已经不怪异了。
