iic通信原理

1.iic总线顾名思义只有2根线:SDA数据线,SCL时钟线。

主设备与各个从设备都是挂载在这两根线上如图:

每个设备都有自己的一个地址,当主机要与多个外围设备中的一个设备通信时,首先要发送要通信的器件地址以确定通信目标。

2.iic空闲信号,起始信号和终止信号

空闲信号:SCL和SDA都为高电平期间。

起始信号:SCL为高电平期间,SDA产生一个下降沿。

终止信号:SCL为高电平期间,SDA产生一个上升沿。

注:起始信号和终止信号都是通过边沿触发而非电平触发

如图:

3.数据发送

如图:

在给一个起始信号后开始传送一字节的数据(一字节为8位)。

而每一位的传送就是在SCL的一个周期期间完成(对应时序图中SCL的1就是一个周期),而在一个SCL周期内当SCL为高电平期间SDA数据不能变的保持原数据,而只有在SCL为低电平期间SDA的数据才能变(注:如果SDA的新数据=原数据那么在SCL为0期间SDA波形不变即是数据没变)传送一个字节的数据需要8个周期的SCL。

如图:

注意:SDA中间交叉部分代表两种情况即:SDA为1,SDA为0的情况。

4.应答信号

如图:

在一个字节的数据发送完毕后也就是SCL8个周期之后会产生一个等待应答信号就是图中SCL的第9个周期,在等待应答期间SDA和SCL都会被拉高,如果数据接收正确那么接收设备就会产生一个正确应答(ACK):在SCL第9 个周期的低电平期间将SDA拉低在SCL的高电平期间保持。如果数据没有接收正确那么接收设备就会产生一个非正确应答(NACK):在SCL的第9个周期期间SDA一直未高电平。

注:接收设备的正确应答是硬件拉低SDA非软件,而如果单片机为接收设备那么就要程序控制应答信号。

5.单片机与外围设备iic通信过程:

在起始信号后必须传送一个从机的地址(7位),第8位是数据的传送方向位(R/T),用“0”表示主机发送数据(T),“1”表示主机接收数据(R)。

每次数据传送总是由主机产生的终止信号来结束。但是,若主机希望继续占用总线进行新的数据传送,则可以不产生终止信号,马上再次发出起始信号对另一从机进行寻址。(注:若再次发起起始信号那么第一字节数据为地址数据后面的才是要发送的数据)

在总线的一次数据传输中,可以有一下几种组合方式:

 (1)、主机向从机发送数据,数据传送方向在整个传递过程中不变:

(2)、主机在第一个字节后,立即从从机读数据(传输方向不变):

(3)、在传送过程中,当需要改变传递方向时,起始信号和从机地址都被重复一次产生一次,但两次读/写方向位正好相反

注:主机做的都是编程控制,从机做的都是自主控制,也可以说是硬件控制,如主机给应答信号是编程控制,但是从机给应答信号是硬件控制,我们只需要检查在SDA为高期间,SCL保持低电平一些时间,即可判定从机给了主机应答信号。

猜你喜欢

转载自blog.csdn.net/zj490044512/article/details/83216544