I2C(Inter-integrated Circuit)总线支持设备之间的短距离通信,用于处理器和一些外围设备之间的接口,它只需要两根信号线来完成信息交换。
I2C最早是飞利浦在1982年开发设计并用于自己的芯片上,一开始只允许100kHz、7-bit标准地址。
1992年,I2C的第一个公共规范发行,增加了400kHz的快速模式以及10-bit扩展地址。
I2C协议把传输的消息分为两种类型的帧:
一个地址帧 :用于master指明消息发往哪个slave;
一个或多个数据帧 :由master发往slave的数据(或由slave发往master),每帧是8-bit的数据。
注:协议要求每次放到SDA上的字节长度必须为8位,并且每个字节后须跟一个ACK位
I2C数据传输的时序图如下:
I2C 位传输方式
数据传输:SCL为高电平时,SDA线若保持稳定,那么SDA上是在传输数据bit;
若SDA发生跳变,则用来表示一个会话的开始或结束(start and stop)
数据改变:SCL为低电平时,SDA线才能改变传输的bit
开始信号:SCL为高电平时,SDA由高电平向低电平跳变,开始传送数据。
- 当总线空闲时,SDA和SCL都处于高电平状态
- 多个master时,先到先得
结束信号:SCL为高电平时,SDA由低电平向高电平跳变,结束传送数据。
- SCL拉高并保持àSDA拉高
-
正常传输时,SCL高时SDA不应该变化
地址帧:device ID
1.出现时间点:最开始
2.组成:7bit地址 + 1bit R/W位 + 1bit ACK
PS:如未回ACK,则有master觉得接下来如何处理
数据帧:register的address and data
1.出现时间点:地址帧发送之后
2.组成:8bit + 1bit ACK
PS:write时,slave发送ACK;read时,master发送ACK
评论