1、I2C简介:一种简单、双线双向的同步串行总线,利用串行时钟线(SCL)和串行数据线(SDA)在连接总线的两个器件之间进行信息传递;
数据传输是通过对SCL和SDA线高低电平时序的控制,来产生I2C总线协议所需要的信号。在总线空闲状态时,这两根线被所连接的上拉电阻保持为高。
每个器件的设备地址是唯一的,任何器件既可以作为主机也可以作为从机,但同一时刻只允许有一个主机。
I2C 标准具有冲突检测机制和仲裁机制的多主机总线,它能在多个主机同时请求控制总线时利用仲裁机制避免数据冲突并保护数据。
主从设备以串行8bit为单位进行双向数据传输,拥有不同的速度模式,标准模式100KB/s、快速模式400KB/s、高速模式3.4MB/s。通过I2C总线接口的可编程时钟来实现传输速率的调整,同时也跟所接的上拉电阻的阻值有关。
2、串行、并行总线:
并口,需要很多的线,把data、address等等在一个周期就可以表达;
串口,用的线很少,需要8个SCL周期才能将地址和RW位发送;数据也需要8个时钟周期;
3、数据有效时序:
SDA线上的数据在SCL高电平必须是稳定的; 只有当SCL时钟信号为低时,SDA的数据才可以发生变化; 每传输一个数据位,产生一个时钟脉冲;
4、开始停止条件:
当总线上的主机都不驱动总线,总线进入空闲状态, SCL 和 SDA 都为高电平。总线空闲状态下总线上设备都可以通过发送开始条件启动通信。
当SCL为高,SDA由高变低,为数据传输的开始(START)标识;
当SCL为高,SDA由低变高,为数据传输的结束(STOP)标识;
启动后,总线会被置为繁忙状态;在停止条件后的一段时间内,总线被释放为空闲状态。
如果生成的重复启动条件(Sr),总线会保持为繁忙状态。
总线处于忙状态时,由本次数据传输的主从设备独占,其他I2C器件则无法访问总线。
5、地址传送:
开始条件是地址帧(一个字节),用于指定主机通信的对象地址,在发送停止条件之前,指定的从机一直有效;
I2C通讯支持:7 位寻址和10 位寻址两种模式。
7 位寻址模式:7 位从机地址 + 1位读写位,读写位控制从机的数据传输方向(0写1读)。
10 位寻址模式,主机发送帧,第一帧 发送头序列(11110XX0,XX 表示 10 位地址的高两位),第二帧发送低八位从机地址。 主机接收帧 ,第一帧发送头序列11110XX0,然后第二帧发送低八位从机地址。接下来会发送一个重新开始条件,然后再发送一帧头序列11110XX1;
(SLA :表示从机地址;Sr :表示重新开始条件)
6、数据传送与ACK:
地址匹配一致后,总线上的主机根据 R/W 定义的方向一帧一帧的传送数据。 所有的地址帧后传送的数据都视为数据帧。10 位地址格式的低 8 位地址也视为数据帧。
数据帧的长度是 8 位。 SCL 的低电平 SDA 变化, SCL 的高电平 SDA 保持,每个时钟周期发送一位数据。数据帧后的第 9 个时钟是应答位,是接收方传送的握手信号。
从机接收数据时,第 9 个时钟周期不响应主机,从机必须发送 NACK;主机接收数据时,发送 NACK,从机接收到后停止发送数据;主机可以发送停止条件释放总线或重新开始条件;
如果从端设备无法接收或者发送另一个完整字节的数据。这时,可以先拉低SCL线,使得主设备进入等待状态,直到执行完毕其他功能。当从端设备准备好接受另一个字节的数据时,将其SCL线拉高,数据传输继续进行。
7、写操作:
当RW位为0(写操作)时,主发送设备发送数据给从接受设备,
- 主设备根据从地址寻址,找到对应的从设备,从设备应答ACK。
- 从接受设备ACK每一个字节的数据。
- 停止条件由主设备产生。
8、读操作:
当RW位为1(读操作)时,主设备向从设备中读取数据。
- 主设备根据从地址寻址,找到对应的从设备,从设备应答ACK。
- 第一个ACK信号由从设备产生,之后主设备立即读取数据。
- 之后的ACK信号由主设备产生。
- 在停止前,主设备发送一个NACK信号。
- 主设备生成停止信号。
9、组合传输
在传输中改变方向,由读变写,由写变读的操作。
- 传输方向转换前,要重新产生开始条件S或者重复开始条件Sr。
- 开始或重复开始条件满足后,要重新发送从地址。
- RW位要倒转,0变1,或者1变0。
- 如果要转换传输方向,接受设备会在产生重复开始条件前返回一个NACK。