真心求教,困扰半年了。I2C传输问题
发布网友
发布时间:2022-04-23 08:25
我来回答
共2个回答
热心网友
时间:2022-05-14 23:06
先分析你的问题:0. 无法传输 1. 卡主 2. I2C找不到从设备地址 3.干扰
0. 无法传输:晃动几下又好 ->是否是接触不良的问题,先想办法确认没有接触不良。
3. 干扰问题:你提到测试通过了,测试的环境是否也可以用相同的距离晃晃。然后在实际环境能否把线接短,再晃晃试试。
2. I2C找不到从设备:可否理解为从设备没有接收到正确地址,没有ACK给主设备?这种情况下主设备只有多试几次就可以了,怎么会卡主?如果是因为不停尝试而导致通讯卡住,则根本的问题在硬件连接和干扰。能否有证据确定是因为不停尝试而导致通讯阻塞?
1. 卡主:是不是主从设备都要有超时处理,来处理卡主的问题?
真正的问题好像还没有出现,能否再进一步把问题找出来?然后再考虑具体解决的办法。
如果需要进一步联系可以留下email。追问感谢你的回答。
0.无法传输:这个问题我试过了,确认不是接触不良
3.干扰问题:实际应用的环境中就是我当前测试的情况,所以不能再改变线的长度。
2.当前情况是,I2C的主设备向从设备发送命令,从设备认为不是自己的地址,没有ACK相应(可能主要是电压问题,但是CPLD只能接受3.3V电压,无法增大到5V),主设备发送不成功后,不断尝试,导致整个I2C被卡住并且命令发不出去。
追答根据你的回答,有几个新问题:
1. 你的通讯速度是多少?速度不太高的话应该对硬件要求不太高。
2. 从设备能否监测接收的I2C数据,同时用示波器抓住I2C上面的波形,然后对比二者谁出了问题。
3. 如果硬件波形不对,可以查查发送硬件。如果是硬件波形失真,可以尝试看看有没有办法减低总线电容(换传输介质或者检查其他电路加在总线上的容性)或者尝试减低通讯速度。降低多少速度,可以通过观察硬件的波形得出。
热心网友
时间:2022-05-15 00:24
Suggestions:
1. SCL/SDA 在 cable 两端 各加下地滤波电容 (一般 47~100pF,视 I2C 速度而言)
2. 如果可能, 尽量争增加 SCL/SDA signal swing 电压 (3.3volt -> 5.0volt)
3. Master/Slaver firmware 针对 SDA 取样 加入 debounce/filter (最简单为,连续取样几次,是否为相同值)
4. Master firmware 考虑 no-ack 是否重发 command