IIC协议简介—学习笔记
一、IIC协议总体概述
IIC总线,是飞利浦推出的一种串行总线,是具备多主机系统所需的包括总线仲裁、高低速兼容的高性能串行总线。
IIC总线的硬件,是由一根数据线SDA,一根时钟线SCL构成。不同的器件,都是并联接在这两条线上。通过不同的硬件地址来识别通信对象。
IIC总线通过上拉电阻接到电源VCC,电阻大小要根据设备实际测量。总线空闲时候,SDA和SCL都是高电平。当其中一个设备拉低总线,整条线就全是低电平,器件与器件之间是“与”逻辑关系。
IIC总线可能会有多个主机进行互相控制多个从机,多个主机通信就会出现伸裁的情况。
单片机主要是单主机通信,多主机仲裁的问题本文不再概述。
IIC协议,是在同一根SDA线上进行双向通信,属于半双工类。IIC协议首先是发送从机硬件地址,然后发送命令,再发送数据/寄存器编号或者读取数据。IIC协议可以多字节连续读写数据。
二、IIC协议规则
IIC协议的数据有效性
规定,必须是在SCL的低电平期间,才能改变SDA的电平状态。SCL 高电平期间SDA线必须是稳定的,否则会错误的识别成起始信号或者停止信号。
IIC协议的起始信号、停止信号
SCL高电平期间,SDA下降沿是起始信号,之后就是总线忙碌,比如发送设备唯一地址。
SCL 高电平期间,SDA上升沿是终止信号。之后是总线的空闲。
起始信号和终止信号,都是主机发送。
IIC协议的通信格式
IIC协议,起始信号之后,可以连续传输多个字节。然后以停止信号结束这一帧数据的传输。
第一字节是7位硬件地址+传输方向控制位。地址是根据硬件配置的,比如AT24C02的地址是4位固定+3位接地,可以挂8个相同的AT24C02芯片。只有地址匹配的设备,才会处理总线上的数据。
IIC协议的字节格式
IIC协议,每个字节必须是8+ACK位。字节是先传输高位后传输低位。标准IIC协议是每位4微秒以上。但是有些器件是兼容各种速度的。
应答信号是接收端接收数据后,把SDA拉低。告诉发送端已经接收完毕。
非应答信号是接收端未能拉低,或者单片机读取数据的最后一个字节不需要应答。
三、IIC协议的数据读写三种方式
IIC协议单向发送数据
比如显示设备,一般情况下只需要写入数据,传输过程如下:
- 首先是起始信号S
- 然后是发送7位从机地址+传输方向位,0写
- SCL拉高,判断ACK,再拉低SCL
- 发送第1个字节,一般情况下都是指令,或者寄存器地址
- SCL拉高,判断ACK,再拉低SCL
- 发送第2个字节,一般情况下都是数据
- SCL拉高,判断ACK,再拉低SCL
- 可以继续传输数据,或者停止
IIC协议发送地址后立即读取数据
比如传感器设备,一般情况下只需要读出数据,传输过程如下:
- 首先是起始信号S
- 然后是发送7位从机地址+传输方向位,1读
- SCL 拉高,判断ACK,再拉低SCL
- 读取第1个字节,一般情况下都是指令,或者寄存器地址
- 发送应答ACK
- 读取第2个字节,一般情况下都是数据
- 发送应答ACK,或者不应答NACK
- 可以继续传输数据,或者停止
IIC协议先制定寄存器地址,再读取该寄存器的数据
比如存储芯片,一般情况下要先制定存储地址,再读取数据。传输过程如下:
- 首先是起始信号S
- 然后是发送7位从机地址+传输方向位,0写
- SCL 拉高,判断ACK,再拉低SCL
- 写数据,一般是写某个寄存器地址或者指令
- SCL拉高,判断ACK,再拉低SCL
- 再次起始信号S
- 然后是发送7位从机地址+传输方向位,1读
- SCL拉高,判断ACK,再拉低SCL
- 写数据,一般是写某个寄存器地址或者指令
- 读取字节,一般情况下都是数据
- 发送应答ACK,或者不应答NACK
- 可以继续传输数据,或者停止。
四、IIC协议的其他内容
- 多主机通信
- 多主机的仲裁和时钟发生
- 应答失败的数据重发
- 快速模式、Hs模式
- 10位寻址.广播呼叫地址、CBUS地址