50 IIC通信速度下限

1.引言

这两天又来调IIC了,很不开心的是,以前的GPIO模拟IIC的代码,移植到新单片机的时候,发生了不幸的事情,无法正常通信了!!!!!。

然后经过了近一天的各种方法的问题排除,发现IIC主机发送数据后,SDA引脚就一直是低电平,从机把引脚拉死了,原最后发现原因是SCK时钟频率不对,导致从机罢工!然后继续调试,最后在调试过程中生出一个想法,为什么从机死掉了,对比一下可以的IIC时序图,波形一毛一样,然后直觉的突然看到不同的地方!!!SCK的时序的频率是不是一样,然后经过查看,发现可以的IIC的频率必须大于100KHz,低于100KHz,主从就无法通信了!!经过查看,我IO模拟IIC的频率只有不到30KHz,所以对不起频率级别不够,用不起IIC。

 我模拟IO时序频率!才30KHz都不到,所以IIC无法正常通信!!!

2.问题解决

知道了问题所在那就好办了,目标就是提高模拟iO的频率!因为我调用的是厂家提供的库函数操作GPIO,而追进去发现这操作函数内容有点多,比较占用时间,所以想着直接操作寄存器不就好了吗,这样可以节省时间。。。。。按照这想法,终于对GPIO的操作,切换使用寄存器操作后,明显IO模拟的SCK切换速度大大增加,可以达到100KHz以上的切换速率,甚至达到IIC的快速模式!!故到此,主机和从机可以正常通信了!!!

至此要记录的内容就是:IIC通信速率是有要求的,不能低于100KHz,如果低于这个频率,那么从机可能就不响应了!!

over!

猜你喜欢

转载自blog.csdn.net/Chasing_Chasing/article/details/117331856
50
50A