IIC的通信波形分析

关于IIC,不解释它的历史了,有兴趣自己去百度看看,本文的图片是由周立功的LAB6021逻辑分析仪抓取的,通信的波形是抓取的cypress的psoc 4000芯片得到的。

最近项目需要用到触摸IC,使用了一片触摸cypress的触摸IC,这个触摸IC的内核挺强大的,主要是可编程,自己配置引脚功能,并通过模拟的分析套件直接在PC端直接显示波形图,通过直观的观察自定义触摸模块的灵敏度,芯片在项目中作为IIC的从设备。芯片的触摸功能我会在另一篇博文说明,本文主要说说怎么查看IIC的波形图。

IIC总线可以接多个设备,协议并不约束设备的主从关系,但是,在同一时间只能有一个主设备,每个设备都有一个设备地址,而cypress的设备可以设置两个设备地址,_(:зゝ∠)_,虽然我不知道要两个设备地址干嘛。

IIC的通信波形分析_第1张图片IIC的通信波形分析_第2张图片IIC的通信波形分析_第3张图片IIC的通信波形分析_第4张图片IIC的通信波形分析_第5张图片IIC的通信波形分析_第6张图片IIC的通信波形分析_第7张图片IIC的通信波形分析_第8张图片IIC的通信波形分析_第9张图片IIC的通信波形分析_第10张图片       上图是一个完整的IIC的一个读操作,从设备地址为0xB4,读取的地址为0x2a,读取的值为0xA5.

协议的结构如下图

IIC的通信波形分析_第11张图片

然后结合图片一点一点的分析IIC的时序(读操作)

1、起始信号

IIC的通信波形分析_第12张图片

开始的时候,SDA和SCL都空闲,被上拉电阻拉为高电平,SDA被主设备拉低,持续需要大于0.6us(图中时间持续了15us),然后SCL被拉低,一个起始信号完成。

2、然后是发送第一个数据,从设备地址

IIC的通信波形分析_第13张图片

     从图中可以看到,从设备地址为0xb4,数据操作为写操作,注意一点,IIC的地址位为7位,最后一个脉冲是读写的操作方式,根据通信协议,需要对这个设备进行操作第一步需要唤醒从设备,操作方式为写操作。关于协议解析,IIC协议是电平触发的,只有在高电平的时候数据有效,低电平无效,所以直接将图中的SCL的高电平下的SDA的数据记下来,按照8位读取10110100,翻译成16进制就是0xb4,按照7位读取1011010,翻译成16进制就为0x5a,这只是翻译时候选取的位数不同,不是错误,切记,根据通信协议,后面还有一个地址,那是读操作,地址如果按照8位读取就变成了0xb5,有时候看别人的程序,写地址的时候第二个地址位比第一个多了1,那不是错误,是操作方式而已。╮(╯▽╰)╭,我在看别人的代码的时候就出过这样的笑话,甚是尴尬。最后一个脉冲完成的时候,主设备释放SDA控制权,如果总线正常,从设备存在,从设备将SDA拉低,作为应答,这时候,主设备将SCL 拉高,如果主设备检测到SDA为底时,说明应答成功,也可以说是通信握手。然后主设备继续接管SDA,进行下一个数据发送。

注意一点,数据传输时,scl为高电平的时候,sda不允许变化,只有在scl为低电平的时候

才允许sda变换电平;在scl为高电平的时候,sda电平变化意味该信号为起始或停止信号。

3、发送寄存器的基地址

IIC的通信波形分析_第14张图片

第二个数据是需要读取的寄存器的基地址,当主设备接收到从设备的应答信号之后,发送第二个数据,在IIC通信协议中,这个数据是寄存器基地址,数据都是8位的,没有操作位,直接将SCL的8个脉冲翻译过来就好了,图中的数据为0x2A,说明需要操作的寄存器为0X2A。

4、发送一次起始位,再次发送一个从设备地址,以及真正的操作位

IIC的通信波形分析_第15张图片

在发送完成基地址之后,释放SCL和SDA,然后再次发送一个起始位,发送完起始位之后发送从设备地址,关于从设备地址,请读者看看,如果将SCL的8个脉冲上的SDA直接读取,得到的是10110101,翻译过来就是0X85,参考第1点,IIC通信中,设备地址为7位,所以,直接将最后一位丢掉,得到1011010,翻译过来是0x5a,最后一位为读操作,最后一位为读操作,最后一位为读操作,然后释放SDA,等待从设备应答。

5、接收从设备的数据

IIC的通信波形分析_第16张图片

从设备根据SCL的电平信号,在SCL为低电平时,发送数据,在SCL为高电平时,接收数据。8个数据发送完成后,从设备释放SDA控制,等待主设备应答,如果主设备任然需要读取数据,会发送一个应答信号,应答信号为SDA被主设备拉低,然后发送一个SCL的高脉冲,告知从设备需要继续读取数据,否则不应答,直接发送停止信号,结束通信。

6、停止信号

IIC的通信波形分析_第17张图片

停止信号如图,在通信期间,主设备先将SDA、SCL拉低,持续0.6us,然后将SCL拉高,持续1.2us,将SDA拉高。这就是停止信号,通信停止。如果将SCL拉低变成一个脉冲那就是继续通信的意思。


关于写操作,额……_(:зゝ∠)_忘了抓波形图了。过几天再抓个波形图再写。
写于深圳 2017-4-1


你可能感兴趣的:(工作)