一、IIC简介
IIC是一种串行、半双工总线,主要用于近距离、低速的芯片之间的通信。有两根信号线,一根为SCL(时钟线),一根为SDA(数据线) 。
IIC是一种多主机总线,连接在IIC总线上的器件分为主机和从机,主机有权发起和结束一次通信,而从机只能被呼叫;当总线上有多个主机同时启用总线时,IIC也具备冲突检测和仲裁的功能来防止错误产生;每个连接到IIC总线上的器件都有唯一的地址(7bit),并且每个器件都可以作为主机和从机;IIC总线在通信时总线上发送数据的为发送器,接受数据的为接受器。
二、IIC总线通信过程
1、主机发出起始信号占用总线
2、主机发送一个字节的数据指明从机地址和后续字节的传送方向
3、被寻址的从机发送应答信号回应主机
4、发送器发送一个字节的数据
5、接受器发送应答信号
重复步骤4、5
最后由发送器发送停止信号释放总线。
在步骤2时,发送的一个字节数据,高7位为器件ID,最后一位为数据的发送方向。0为主机发送到从机,1为从机发送到主机。此步骤发送的数据所有器件都可以收到,并和自己ID进行比对。
三、IIC典型信号
1、起始信号SCL为高电平,SDA由高变低表示起始信号。
代码如下:
void IIC_Start(){
SDA = 1;//先拉高SDA
delay_ms(5);
SCL = 1;//再拉高SCL
SDA = 0;
delay(5);
SCL = 0;//钳住总线,准备发送或接收数据
}
2、结束信号,SCL为高电平时,SDA由低变高表示停止信号。
void IIC_Stop(){
SCL = 0;
SDA = 0;
delay_us(5);
SCL = 1;
delay_us(5);
SDA = 1;
delay_us(5