IIC的组成
IIC系统中只需要用到的两根线为串行数据线(Serial DAta , SDA),串行时钟线(Serial CLock , SCL)。SDA和SCL管脚都是漏极开路输出结构,因此在实际使用时,SDA和SCK信号线都必须要加上拉电阻Rp(Pull-Up Resistor)。连接时需要共地以保持数据的一致性。
1.串行数据线SDA
SDA具备两种功能
主机模式下,当SCL为高电平时,SDA由高电平向低电平跳变,产生开始信号或重新开始信号; SDA由低电平向高电平跳变,则产生结束信号。当SCL为低电平时,SDA拉高表示信号”1”,SDA拉低则表示信号”0”。
从机模式下,当主机发送了8位数据后,第9个时钟周期出现,主发送器必须在这一时钟位上释放数据线,由接收设备拉低SDA电平来产生应答信号。
2.串行时钟线SCL
SCL处于高电平时,由SDA线拉低/拉高产生(重新)开始信号/停止信号;SCL处于低电平时,由SDA线拉低/拉高产生信号”1”/信号”0”。由于开始信号的需要SCL处于高电平时才能产生,所以SCL线和SDA线平时都处于高电平。
IIC的信号类型
IIC总线在传送数据过程中共有4种类型信号,分别是开始信号、停止信号、重新开始信号和应答信号。
1.开始信号
当SCL为高电平时,SDA由高电平向低电平跳变,产生开始信号。当总线空闲的时候,主机通过发送开始信号(START)建立通信。
(Tips:总线空闲时,SDA和SCL线都处于高电平)
2.停止信号
当SCL为高电平时,SDA由低电平向高电平跳变,产生停止信号。主机通过发送停止信号,结束时钟信号和数据通信。SDA和SCL都将被复位为高电平状态。
3.重新开始信号
在IIC总线上,主机可以在调用一个没有产生STOP信号后,产生一个开始信号。主机通过使用一个重复开始信号来和另一个从机通信或者同一个从机的不同模式通信。由主机发送一个开始信号启动一次通信后,在首次发送停止信号之前,主机通过发送重新开始信号,可以转换与当前从机的通信模式,或是切换到与另一个从机通信。
4.应答信号
接收数据的IC在接收到8位数据后,向发送数据的主机IC发出的特定的低电平脉冲。每一个数据字节后面都要跟一位应答信号,表示已收到数据。
IIC的通信过程
主机向从机写一个字节数据或者读一个字节数据的过程基本是类似的,唯一不同的就是产生开始信号后数据方向位的不同,0表示主机发送数据,1表示主机读取数据。读/写一个数据时,主机首先产生START信号,然后紧跟着发送一个从机地址(7位),查询相应的从机,紧接着的第8位是数据方向位(R/W)–(1/0),这时候主机要等待从机的应答信号,当主机收到应答信号时,发送给从机一个位置参数,告诉从机主机的数据在从机接收数组中存放的位置,继续等待从机的应答信号,然后继续等待从机的响应信号,当主机收到响应信号时,发送一个字节的数据,继续等待从机的响应信号