关于IIC通信需要注意的部分地方(仅个人观点)

仅代表个人看法,有不当之处还请大佬指教
以下为个人原创,转载请注明出处,码字很辛苦的

开局一张图 剩下全靠编
这里写图片描述
开个玩笑 ,直接进入正题。
说来可笑,毕业出来工作两三年,还没用过IIC做过项目,以前用IIC都只是在开发板上随便试试,根本没有理解到IIC的本质。今天就来说说我前面在做IIC通讯的时候遇到的一些问题。
主控设备:国产某32位M0内核的mcu和某红外芯片通讯。
项目描述:以前用的软件模拟iic通讯,现在因为要减轻mcu的压力,需要把模拟iic改成硬件iic。
问题来了,当时用硬件iic和某芯片通信死活不成,用同款mcu,同样的硬件iic,其他的设备就没问题,和这个芯片通讯就不行了,那给我急的呀,网上各种找资料,然而并没有什么卵用。经过了几天的痛苦折磨,终于让我给弄明白了。
好 先说第一个问题,IIC从设备不应答主设备的起始信号(关于iic的协议什么的就不细说了网上一大把),上图就是某芯片的iic通讯时序图我们注意A处,大图如下:
这里写图片描述
我们首先看到的是一个时间参数18ms,然后红圈处是iic的起始信号,这什么意思呢,就是说从iic启动到主设备发送起始信号之间需要有一段时间的延时。这段时间我们可以认为是从设备正在准备。当在这个时间内,主设备想要通知从设备:从设备呀,我想和你通信。从设备:没看见我正忙吗,这会儿没空搭理你,一边玩儿去。所以我们要注意,在通信的时候不能像看到姑娘一样猴儿急猴儿急的就上,心急吃不了热豆腐,我们要慢慢来,温水煮青蛙就可以了。是不是很简单,可是当时做的时候不知道这茬呀,完全就是两眼抓瞎。为自己智商捉急。

再来第二个问题,iic的频率。照例,先上图:
这里写图片描述
这个问题一般来说不会遇到,但是,谁让我用的这个是一个奇葩的主控呢。我们先来分析下这个从设备的时钟,从这个图中我们可以看出时钟高电平的时间是25us,低电平的时间没标示出来,大概是50us,一般情况iic时钟高电平时间:低电平时间是1:2嘛。计算出频率约13KHz,好,我也按照这个频率配置,exm?不行?玩我呢,我可是跟着你的频率配置的。没办法,上逻辑分析仪吧,通过逻辑分析仪看到了让我不敢想象的画面,满屏过去的起始位指示。我什么时候发了这么多起始信号了?放大,仔细看,明明是数据位,给我弄成起始信号****(此处省略n个字)。由于当时没有截图,我就手绘一下吧。
这里写图片描述
不许笑,将就看,iic的数据传输原理什么的就不讲了,这个图主要是想表达本来应该是数据传输的,但是因为时钟线的低电平持续时间不够,本应该在SCL低电平的时候变化的SDA线,在SCL高电平的时候跳变了电平,造成了iic识别错误。好,原因找到了,翻数据手册吧,然后我看到了这个:
这里写图片描述
高低电平时间1:1?唉,怪我见识太少,能解释为什么这样了,低电平时间=(1/13)/2=38us。通过降低频率,iic终于能正常通信了。然而,我已经筋疲力尽。

猜你喜欢

转载自blog.csdn.net/weixin_42925036/article/details/82185648
今日推荐