i2c总线协议简介
时间:2022-10-22 17:00:00
文章目录
-
- 1.简介
- 2.I2C总线时序图
-
- 2.1 起始位
- 2.2 停止位
- 2.3 数据传输
- 2.4 地址帧/读写位/读写位/ACK位
- 2.5 空闲状态
- 2.6 应答信号
- 3.I2C写时序
- 4.I2C读时序
- 5.I2C的优缺点
1.简介
I2C 是一种常见的总线协议, I2C 是 NXP 公司设计, I2C 在主控制器和从机之间使用两条线进行数据通信。 SCL(串行时钟线)
,另外一条是 SDA(串行数据线)
,由于不连接拉电阻,这两个引脚处于悬挂状态。由于悬挂状态下引脚的电平无法确定,这两条数据线需要连接拉电阻
,一般是4.7K
,总线空闲的时候SCL 和 SDA
都处于高电平。 I2C 总线标准模式下的速度可以达到 100Kb/S
,可以在快速模式下实现 400Kb/S
。 I2C 总线工作是按照一定的协议来运行的,I2C 它支持多从机,即一个 I2C 多个可以挂在控制器下 I2C 不同的设备 I2C设备有不同的设备地址 I2C 可通过主控制器 I2C 访问指定设备的设备地址 I2C设备 了,一个 I2C 多个总线连接 I2C 设备,如图
2.I2C总线时序图
2.1 起始位
I2C开始通信的标志,主机通过这个标志告诉机器开始通信,当SCL为高电平,SDA下将沿时出现并表示起始位置
2.2 停止位
I2C通信结束的标志,当SCL为高电平,SDA当出现上升时,表示停止位
2.3 数据传输
I2C保证数据总线的传输SCL高电平时,SDA因此,数据稳定SDA数据变化只能在上面SCL为低电平时
2.4 地址帧/读写位/读写位/ACK位
地址帧:这是一个 8 高位数据 7 位置是设备地址,最后 1 位是读写位,为1 这意味着这是一个阅读操作,为了 0 这意味着这是一个写作操作
读/写:0:低电平,主设备从设备写数据,1:高电平从机读数据
ACK:消息的每个帧都有一个确认位置。如果设备接收到地址帧或数据帧,将返回发送设备ACK
2.5 空闲状态
当IIC总线数据线SDA和时钟线SCL两条信号线同时处于高电平时,规定为总线的空闲状态。此时,各设备的输出级场效应管处于截止状态,即释放总线,两条信号线各自的上拉电阻提高电平
2.6 应答信号
每个发送器发送一个字节(8个字节)bit),数据线在时钟脉冲9期间释放,接收器反馈响应信号。
当响应信号为低电平时,规定有效响应位置(ACK,简称应答位),表示接收器已成功接收字节;
当响应信号为高电平时,规定为非响应位(NACK),一般来说,接收器没有成功接收字节
在第9时钟脉冲前的低电平期间,接收器将数据线SDA降低,并确保在此时钟的高电平期间发送稳定的低电平ACK信号, 如果接收器是主机端,在收到最后一个字节后发送一个NACK通知被控发送器结束数据发送并释放数据线SDA,以便主机发送停止信号P
3.I2C写时序
主机从机写,红色部分表示主机发送,蓝色部分表示从机发送。A表示应答,NA表示非响应(高电平)。S表示起始信号,P表示终止信号
1.开始信号:在SCL在将主设备从高电平切换到低电平之前SDA从高电平切换到低电平,启动信号和停止信号始终由主设备控制
2.主设备通过发送具体的设备地址,向每个设备发送7或10个地址,以确定访问哪个地址I2C这是一个8位数据,其中高8位是设备地址,最后一位是读写位,1表示读操作,0表示写操作
3.每一个从设备会根据主设备发过来的地址与自身的地址做比较,如果地址匹配,那么从设备会将SDA
拉低来返回ACK应答信号
,当地址不匹配时,从设备开始SDA拉高
,没有将军从设备SDA拉低会将Master视为弃数据传输视为超时,发送Stop”
4.重新发送开始信号
5.主机发送丛机的寄存器地址
6.从机发送ACK信号
7.发送要写入寄存器的数据帧,传输每个数据帧后,即8位数据,主机将SDA拉高,等待机会SDA拉低,即返回ACK,确认已成功功接收
9.结束信号:主设备将SCL切换到高电平,然后将其切换SDA切换到高电平,从而向设备发送停止信号
4.I2C读时序
阅读顺序主要分为四个步骤:1。发送设备地址。2.发送要读取的寄存器值,3.重新发送设备地址,4.I2C 从设备输出
读取的寄存器值
1.主机发送起始信号
2.从设备地址发送主机读写
3.读写控制位,因为是向 I2C 从设备发送数据是写信号
4.从机发送 ACK 应答信号
5.重新发送start信号
6.主机发送要读取的寄存器地址
7.从机发送 ACK 应答信号
8.重新发送 START 信号
9.重新发送要读取的东西 I2C 从设备地址
10.读写控制位,这是读写信号,表示下一步是从 I2C 从设备中读取数据
11.从机发送 ACK 应答信号
12.从 I2C 在设备中读取数据
13.主机读取最后8位数据时主要会SDA1.发出主机 NO ACK 信号表示读取完成,无需从机发送 ACK 信号了
14.主机发出 STOP 信号,停止 I2C 通信
注意:SCL一直由主机控制,SDA根据数据传输的方向,读取数据时由从机控制SDA,主机在编写数据时控制数据SDA。8位数据传输完成后,应答位或否应答位SDA与数据位传输相反
5.I2C的优缺点
优点:只使用两条信号线,支持多个主设备和多个从设备,ACK / NACK位置用于确认每个帧功传输,硬件没有UART复杂
缺点:数据传输速率比SPI慢,数据帧的大小限制在8位,硬件设计比SPI复杂