I2C背景知识
IIC(Inter-Integrated Circuit)简称IICBus 集成电路总线。由飞利浦公司在1980年代为了让主板、嵌入式系统或手机用以连接低速周边设备而发展。自2006年10月1日起,使用I²C协议已经不需要支付专利费,但制造商仍然需要付费以获取I²C从属设备地址。
I2C特性
1、双向的同步串行总线
2、支持设备之间的短距离通信
3、标准通信速率:100Kbps 快速模式:400Kbps 高速模式:3.4Mbps
4、各个设备之间的SCL和SDA线都是线与关系
5、扩展的器件的数量主要由电容负载来决定,其负载能力为400pF
6、具有极低的电流消耗
I2C总线的物理层
由于SDA、SCL为漏极开路结构(OD),因此它们必须接有上拉电阻,阻值的大小常为 1k8、4k7、10k,但1k8时性能最好。则在总线空闲时,两根线均为高电平。I2C总线的上拉电阻的阻值要精心考虑,如果上拉电阻的阻值太大,则由于I2C设备输入端的输入电容的存在,会造成信号上升沿和下降沿变缓,以至于不能满足I2C设备的建立时间和保持时间,造成通信的错误发生;如果上拉电阻的阻值过小,则会造成较大的功率损耗。因此I2C通信的上拉电阻的阻值要满足设备上升沿和下降沿要求的同时尽量选择较大的阻值,以降低消耗的功耗问题。
I2C标准协议
I2C的位传输
数据传输:SCL为高电平时,SDA线若保持稳定,那么SDA传输数据bit
数据改变:SCL为低电平时,SDA线才能改变传输bit
1、开始信号:SCL为高电平时,SDA由高电平向低电平跳变,开始传送数据。
结束信号:SCL为高电平时,SDA由低电平向高电平跳变,结束传送数据。
2、应答信号
Master每发送完8bit数据后等待Slave的ACK
即在第9个clock,若从IC发出ACK,SDA会被拉低。
若没有ACK,SDA会被置高,这会引起Master发生RESTART或STOP流程
I2C总线协议
小结整体时序:
串行协议,多主机模式。(注:主端必须是带有CPU的逻辑模块,在同一总线上同一时刻使能有一个主端,可以有多个从端)
1、起始信号:SCL为高电平时,SDA下降沿,主机发送;
2、停止信号:SCL为高电平时,SDA上升沿,主机发出;
3、数据与地址按8位/字节传输,高位在前;
4、传输过程中,SCL为低电平时,SDA更改状态,SCL为高电平时,SDA状态需稳定;
5、每传输一个字节,接收器必须回应1个应答位(ACK)给发送器
I2C读写寄存器时序
写寄存器操作标准流程
1、Master 发起 START
2、Master 发送I2C addr (7bit) 和w操作0(1bit),等待ACK
3、Slave 发送ACK
4、Master 发送reg addr (8bit),等待ACK
5、Slave发送ACK
6、Master发送data(8bit),即要写入寄存器中的数据,等到ACK
7、Slave发送ACK
8、第6步和第7步可以反复多次,即顺序写多个寄存器
9、Master发起STOP
读寄存器操作标准流程
1、Master 发起 START
2、Master发送I2C addr地址 (7bit) 和w操作0(1bit),等待ACK
3、Slave 发送ACK
4、Master 发送reg addr (8bit),等待ACK
5、Slave发送ACK
6、Master 发起 START
7、Master发送I2C addr(7bit)和r操作1(1bit),等待ACK
8、Slave 发送ACK
9、Slave发送data(8bit),即寄存器的值
10、Master发送ACK
11、第9步和第10步可以重复多次,即顺序读多个寄存器