IIC协议
1.简介
IIC两线式串行总线,由数据线SDA和时钟线SCL构成,由于数据在同一条线上传输,因此IIC通信是半双工通信方式;
IIC使用多主从架构,每个器件都有唯一的识别地址,都可以作为一个发送器或接收器,这里的主从并没有绝对的概念,基本上谁控制时钟线谁就是主设备,此时从设备用于IIC的地址检测和停止位检测。
IIC传输速度:
标准模式:100kbit/s
快速模式:400kbit/s
高速模式:3.4Mbit/s
术语 | 描述 |
主机 | 初始化发送、产生时钟信号和终止发送的器件 |
从机 | 被主机寻址的器件 |
多主机 | 同时有多于一个主机尝试控制总线,但不破坏报文 |
仲裁 | 是一个在有多主机同时尝试控制总线,但只允许其中一个控制总线并使报文不破坏的过程 |
同步 | 两个或多个器件同步时钟信号的过程 |
2.通信流程
1)主机发送一个1bit起始信号start;
2)发出一个7bit的地址,因为IIC可以有多个从设备,每个从设备出厂时有一个固定的设备地址,所以发出确定的地址来选择从设备;(既然有7位地址,那么理论上来说IIC总线可以接2^7个从设备,但实际上并不是,它差不多接5-6个设备,再接的话会由于电流等干扰造成不稳定)
3)发送1bit读写位,告诉从设备我是读取从设备的数据,还是写数据给从设备;
4)从设备回应,发送端每发送一个数据后,会在下一个时钟周期释放数据线接收对方的应答,当SDA是低电平时为有效应答(ACK),表示对方接收成功,当SDA是高电平时为无效应答(NACK),表示没有接收成功;
5)收到确认后开始发送一字节(8位)数据;
6)从机发送1bit确认位;
7)IIC的停止信号由主设备终止。
3.时序图解析
3.1起始信号
SCL信号为高电平阶段,SDA由高电平跳变到低电平,表示一个起始信号.
3.2 停止信号
SCL为高电平阶段,SDA由低电平跳变到高电平,表示停止信号.
3.3 数据的有效性
IIC总线在进行数据传送时,在SCL的每个时钟周期传送一个数据为,为了保证传送数据的稳定性,时钟信号SCL为高电平期间,数据线SDA上的数据必须保持稳定,所以只有在时钟信号线SCL为低电平期间,数据线SDA的高低电平状态才允许变化;而根据上面的起始信号和停止信号的规定,SCL为高电平阶段,SDA的变化表示控制命令,即控制开始和结束信号;
3.4 时序图案例
ACK应答信号 :在时钟信号SCL为低电平时,把数据线SDA设置为低电平,在时钟信号为高电平阶段保持不变;
ACK非应答:在时钟信号SCL为低电平时,把数据线SDA设置为高电平,在时钟信号为高电平阶段保持不变;
4.注意点
4.1 延时
可以如下图所示时序图比上面多了4.7us的延时。
4.2 IIC的高阻态
在上面的IIC总线拓扑图当中,可以看到SCL和SDA都需要接上拉电阻,用于保证数据的稳定性,减少干扰,大小由速度和容性负载决定,一般在3.3K到10K之间。
为了避免总线信号的混乱,IIC的空闲状态只能有外部上拉,此时空闲设备被拉到高阻态,相当于断路,整个IIC总线只有开启了的设备才会正常进行通信,而不会干扰到其它设备;要求各设备连接到总线的输出端必须是漏极开路(OD)输出或集电极开路(OC)输出;
漏极开路(Open Drain)即高阻状态,适用于输入/输出,可独立输入/输出低电平和高阻状态,若需要产生高电平,则需使用外部上拉电阻。
4.3 IIC空闲状态
在主机传输完一个字节之后,应该要释放总线(协议规定,当SDA和SCL同时为高时&#