一. IIc总线定义:
IIC总线(inter-integrated Circuit)是飞利浦公司在八十年代初推出的一种串行,多主机,半双工总线(不能同时接收发送)。主要用于近距离,低速的芯片通信。
二. 物理结构:
IIC总线有俩根双向的信号线,一根数据线SDA用于数据的收发,一根时钟SCK用于同步通信双方时钟。
三. IIC总线多主机特征:
连接在IIC总线上的器件分为主机和从机,一条总线上可以有多个从机设备,也就是说可以用单片机的俩个io接口来和多个设备实现通信。每个连接到IIC总线上的器件都有唯一的地址(7Bit),且每个器件都可以作为主 /从机。总线上增加和删除不影响其他器件正常工作。妙呀~~
四. IIC总线通信过程:
可以联想实际,妙蛙种子发芽—妙上天了!
- 主机发送起始信号启用总线(打开电话)
- 主机发送一个字节的数据指明从机地址和后续字节的传输方向(拨打号码,传输方向不能中途改变)
- 被寻址的从机发送应答信号回应主机(对方接听)
- 发送器发送一个字节的数据(阿巴阿巴阿巴。。)
- 接收器发送应答信号回应发送器(对方:阿巴阿巴阿巴。。)
- 循环步骤4,5。(继续阿巴)
- 最后通信完成后主机发送停止信号释放总线(只能主挂,从不能挂,结束!)
五. IIC总线的寻址方式:
IIC总线上传送的数据是广义的,既包括地址,又包括真正的数据。主机在发送起始信号后必须发送一个字节的数据,该数据的高七位(—>)为从机地址,最低位表示后续字节的传送方向,'0’表示主机发送数据,'1’表示主机接受数据(和人刚好反过来,记住了吗?)总线上所有的从机接受该字节数据和自己的比较,如果相同,则认为自己被寻址,在根据最后一位判断自己是发送器还是接收器。
六. IIC总线协议:
IIC总线在不使用时,SCL和SDA都是高电平(1)
1.起始信号:
SCL为高电平时,SDA由高变低。
2.停止信号:
SCL为高电平时,SDA由低变高。 ** 起始和停止都是主机发出,起始信号产生后总线处于被占用的状态,停止信号发出后总线处于空闲状态。**
3.字节传送和应答:
IIC总线通信是每个字节为8位长度,先传送最高位,后传送最低位,发送器发送完一个字节数据后接收器必须发送1位应答位(0)来回应发送器,故一帧共有9位。
4. 同步信号:
时钟线SCL为低电平期间发送器向数据线上发送一位数据,在此期间,数据线上的信号允许发生变化,时钟线SCL为高电平时,接收器从数据线上读取一位数据,这时数据线上的信号不允许发生变化。 注:这实际上是在解决通信过程中区分相同数据的问题,例如区分10和1100,在串口通信中是通过波特率(1s发送多少个数据)来解决的。
七. 典型IIC时序:
-
主机向从机发送数据: -
从机向主机发送数据: -
主机先向从机发送数据,然后从机再向主机发送数据
注意这里没有发送停止信号,因为停止之后总线可能会被其他主机占用。
|