首先,百度了一下下IIC相关知识,了解大概,然后我们知道一些重点之后可以用示波器打出IIC的波形加深理解。
然后划重点
1、IIC为双线通讯,半双工,两根线分别为时钟线SCL和数据线SDA,且时钟频率不超过400K。
2、IIC先传输地址,得到从设备应答后开始传输数据。地址一般为8位,包括一位读写位,数据有8位,有16位不等,和不同厂家的从设备有关。
3、一般IIC传输地址9位一帧,其中七位地址,一位读写位,一位应答位。一般而言,七位地址中前四位被厂家规定,后三位可以自行设定,且前四位有一定意义,也就是说同一条IIC总线上相同设备只能挂载8个。这也就解释了为什么理论上IIC总线可以挂载128个从设备,实际却不能挂载这么多的其中一个原因。当然还有其他原因,负载能力,走走线长度都会影响上IIC挂载外设数量。
4、IIC走线不宜靠太近,上拉电阻不宜在同一点上,如果在同一点上,附近应匹配电容滤波解耦。
/***************************************************华丽的分割线****************************************************************/
先打开要测外设的IIC时序及要求,看看需要测试哪些数据。
可以看出我们需要测试tf tr tst 等等,上图标出的数据基本都要测试。
就在这个波形附近,spec就会写明此外设的通信地址,如果没有认为修改,就可以直接用啦。
闲话不说,我们打开示波器,测出一组波形分析一下。
上图为CLK引脚的信号,可以看出时钟频率为369.1khz,为什么是这么个奇怪的数字呢,具体还没有深究,但是这个数字和软件驱动层的设置有关,同时也会受到从设备的硬件限制。波形基本为方波,也有部分时钟波形为正玄波。同时可以看出波形中的overshot较大,说明硬件电路处理不够得当。具体问题还需要对着单板分析,这里水平有限,不做具体分析。
这是SDA引脚的信号,基本呈矩形波,但是高电平处纹波较大,虽然不影响整体数字信号的传输,但是可以说明硬件品质依然有待提高。同时可以看出高电平处有电压下掉现象,这个后面会做解释。由于IIC本身频率不算高,加上高低压压差比较大的原因,这些纹波不会太影响传输质量,但如果这是模拟信号,那么问题就会大很多了。
现在我们将两个引脚的信号放在一起,可以看出二者原本都是高电平,开始传输是,SDA先出现下降沿,半个时钟周期后,SCL开始起振。同时可以看到△X为662.5ns,这里就需要和此芯片的spec比对,看看是否在要求范围内。其次可以看到波形中,时钟下降沿时,数据线会有明显的电压下掉现象,这里就是单板布线及解耦电容放置问题啦。于是我们打开PCB发现走线时上述两根线完全贴在一起,差分走线,并且没有设置任何解耦所需的必要器件。离上拉电阻最近的电容距离超过5mm,解耦能力非常弱。由于原理图和PCB属于机密内容,这里大家自行脑补就好。
ok,我们在之前的测试点上再次捕捉波形,发现SCL除了没有发生变化,而SDA发生了变化,这说明我们的这一条IIC上挂载了不止一个负载,同时我们可以看出此次通讯的负载的地址及控制字、数据的内容,
首先是地址,查询了负载的spec后我们知道了此负载的地址为8位,其中一位是读写位。于是我们看波形得到01111010B(这里B表示二进制)的信号。去掉最低位读写位,还剩0111101B,最高位补0,得到00111101B,及3CH(这里H表示16进制,spec中的地址一般用16进制表示),这时我们就可以知道此时,MUC在和哪一个负载通讯。
大概就到这里啦,其他信号的质量需要对着spec中的要求一一测试比对,就不一一拿出来分析啦。
/***************************************************华丽的分割线****************************************************************/
本人依然处于小白状态,如有理解错误或者认知偏颇,希望各位大佬及时指出,共同进步。