I2C协议的数据手册很复杂,不利于初学者入门学习,本节从应用角度出发,通过直接介绍I2C协议的通信数据帧来引导读者快速入门并掌握。
I2C通过SDA和SCL两根信号线实现主从设备间的同步串行通信。图11-2是一个标准的I2C协议发送数据帧。从左到右依次说明各个信号的作用。
1.起始信号(START)
图11-2中的S是主机发送的起始信号(STAR Tcondition)。I2C协议规定每次数据通信必须由主机发送起始信号后才开始,从机收到起始信号后才准备接收其后的数据。起始信号的波形如图11-3所示。
图11-2 I2C协议的发送数据帧格式
图11-3 I2C协议起始信号的波形图
2.从机地址和读/写信号(SLAVE ADDRESS和)
I2C协议规定起始信号后必须跟从机地址和读/写控制位。图11-2中“SLAVE ADDRESS”是从机地址,是读/写控制信号,对于7位地址模式而言,两者恰好组成一个字节的数据。写数据操作由主机发送给从机,其波形如图11-4所示。
图11-4 I2C发送7位地址和读/写信号的波形图
其中,发送的一个字节中高7位为从机的地址,只有地址与此相同的从机才会继续接收后继数据。最低位用来控制读/写操作,用表示。
●为0表示写操作,即接下来要向从机写数据。
●为1表示读操作,即接下来要从从机读数据。
3.应答信号(A)
图11-2中在发送了一个地址字节数据后紧跟了1位应答信号,通常用A或者ACK表示。I2C协议规定数据传输必须带响应信号。响应时钟脉冲由主机产生。在响应的时钟脉冲期间,发送器释放SDA线(SDA线会被上拉电阻置为高电平)。接收器必须将SDA线拉低,使它在这个时钟脉冲的高电平期间保持稳定的低电平。一般情况下,从机将SDA信号拉低用于通知主机数据正常。注意:I2C协议大多数情况下要求每收发一个字节都要有应答信号,若主机没有检测到应答信号,主机应该发送一个启动信号或停止信号,否则会造成数据通信错误。
4.数据字节(DATA)
主机在发送地址后得到正确的应答信号,才可以发送数据字节。图11-2中的DATA代表数据字节。I2C协议规定每次发送的数据必须是8位数据,但在一帧中可以连续发送多次数据字节。每个数据字节后都要求有正确的应答信号(最后一个发送的数据字节除外)。发送一个数据字节的波形如图11-5所示。(www.daowen.com)
5.停止信号(P)
I2C协议规定一个数据帧结束条件是当SCL是高电平时SDA线由低电平向高电平切换(见图11-6),称之为停止信号(STO Pcondition),经常用P或者STOP表示。图11-2中的P表示停止信号。
图11-5 I2C协议发送数据字节的波形图
图11-6 I2C协议停止信号的波形图
在I2C中,除了标准的数据发送帧外,图11-7所示的数据接收帧格式和图11-8所示的复合帧格式也经常被使用。
图11-7 I2C协议的接收数据帧格式
图11-7中信号的功能与图11-2相同,但有两点需要注意:
●DATA来源于从机。
●在停止位P之前的应答信号来源于主机并且用高电平表示正确应答,用于通知从机读取结束。
图11-8 I2C协议的复合数据帧格式
6.重启信号(Sr)
图11-8中出现了一个新的信号Sr,此信号称为重启信号(repeated START condition),也称为重复起始信号,由主机产生,通常用Sr或SR表示。其产生波形与起始信号S相同,功能也与起始信号S相同,即在重启信号Sr后发送的内容是地址数据和读/写信号。重启信号Sr通常用于在一个数据帧中数据传输方向需要更改的时刻。
以上介绍的是I2C协议中的常用数据帧格式和各种信号的功能,一个符合I2C协议的器件应该能产生或接收这些数据帧。下面以PIC单片机的I2C接口为例介绍I2C的使用方法。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。