1.IIC总线简介
IIC总线:
IIC总线是Philips公司在八十年代初推出的一种串行、半双工总线,主要用于近距离、低速的芯片之间的通信;IIC总线有两根双向的信号线,一根数据线SDA用于收发数据,一根时钟线SCL用于通信双方时钟的同步;IIC总线硬件结构简单,成本较低,因此在各个领域得到了广泛的应用。
IIC总线具体介绍:
IIC总线是一种多主机总线,连接在IIC总线上的器件分为主机和从机,主机有权发起和结束一次通信,而从机只能被主机呼叫;当总线上有多个主机同时启用总线时,IIC也具备冲突检测和仲裁的功能来防止错误产生; 每个连接到IIC总线上的器件都有一个唯一的地址(7bit),且每个器件都可以作为主机也可以作为从机(同一时刻只能有一个主机),总线上的器件增加和删除不影响其他器件正常工作;IIC总线在通信时总线上发送数据的器件为发送器,接收数据的器件为接收器;
2.IIC总线通信过程
通信过程:
- 主机发送起始信号启用总线
- 主机发送一个字节数据指明从机地址和后续字节的传送方向
- 被寻址的从机发送应答信号回应主机
- 发送器发送一个字节数据
- 接收器发送应答信号回应发送器 … … (循环步骤4、5)
- 通信完成后主机发送停止信号释放总线
寻址方式:
IIC总线上传送的数据是广义的,既包括地址,又包括真正的数据。主机在发送起始信号后必须先发送一个字节的数据,该数据的高7位为从机地址,最低位表示后续要发送的数据的传送方向。
总线上所有的从机接收到该字节数据后都将这7位地址与自己的地址进行比较,如果相同,则认为自己被主机寻址,然后再根据第0位将自己定为发送器或接收器。
IIC通信的发送器和接收器与谁是主机谁是从机无关,是由发送的第一个字节的数据的最低位也就是第0位决定的,如果最低位为'0'表示主机发送数据,则主机为发送器,为'1'表示主机接收数据,则从机为发送器。
具体实现:
1.主机发送起始信号启用总线:
IIC有两根双向的信号线SCL和SDA,在空闲时他们两个的状态均为高电平,当SCL为高电平时,SDA由高电平变为低电平表示起始信号,SCL为高电平时,SDA由低电平变高电平表示停止信号,起始信号和停止信号都是只能由主机发送,起始信号产生后总线处于占用状态,此时其他的主机就无法使用它来通信,停止信号产生后总线处于空闲状态。
2.主机发送一个字节数据指明从机地址和后续字节的传送方向:
IIC总线通信时每个字节为8位长度,且它传送的第一个字节的数据一定是由主机发送的七位地址和一位确定传输方向的位组成,在第一个字节发送完后才能确定发送器和接收器。数据传送时,先传送最高位,后传送低位,他与UART的数据传送方向相反。
3.被寻址的从机发送应答信号回应主机
在对应的从机确认了身份后,其会发送一位的数据来通知主机可以进行数据传输了,这个数据就是应答信号,主机在接收到应答信号后开始传送真正的数据。
4.发送器开始发送数据:
注意这里是发送器开始发送数据,其不一定主机,每一次传送的数据是由八位数据和一位确认位组成,一次传送八位的原因与UART相同,为了防止数据过大而产生误差导致后续数据全部错乱
其次,IIC总线在进行数据传送时,时钟线SCL为低电平期间发送器向数据线SDA上发送一位数据,在此期间数据线上的信号允许发生变化,时钟线SCL为高电平期间接收器从数据线SDA上读取一位数据,在此期间数据线上的信号不允许发生变化,必须保持稳定,其目的是为了确认连续的高电平或者低电平信号在发送时的数量。
就比如发送的数据为111000,其在发送时转换成高低电平的变化与10是相同的,为了区分这个数据到底是111000还是10,我们使用了上述的方法,使其在读取时只能读取一位数据。
5.接收器发送应答信号回应发送器
接收器在接收到数据后也会发送一位应答信号来通知发送器,具体见下面的IIC时序。在上述操作进行完成后,就是循环的进行第四和第五步操作来发送要传输的数据。
6.通信完成后主机发送停止信号释放总线
在发送完终止信号后总线被释放,这时其他主机就可以在此获取总线的拥有权来进行通信了。
3.IIC时序
IIC总线发送数据的方式有三种,分别为主机给从机发送数据、从机给主机发送数据、主机先向从机发送数据,然后从机再向主机发送数据。
注:下面三图中灰色部分表示数据由主机向从机传送,白色部分则表示数据由从机向主机传送;A表示应答信号, A非表示非应答,S表示起始信号,P表示终止信号
①主机给从机发送数据
在这种方式下,通信结束的原因有两种,第一种为从机没有应答,主机停止通信,第二种为从机发送了应答信号但是主机主动停止了通信。
②从机给主机发送数据
从机给主机发送数据时,只有主机非应答才能停止信息的传递,并且无论是谁给谁发数据,其第一个字节都必须是由主机发送的由确认从机地址和传输方向组成的一个字节的数据。
③主机先向从机发送数据,然后从机再向主机发送数据
在进行发送接收交换的过程中是不会产生停止信号P的,因为如果产生了停止信号,总线的所有权可能会被其他主机占有,所以身份的转换就是直接重新发送一个确认传输方向的位与之前不同的一个字节的数据即可,无需停止。