目录
前言
(本文中截图来源B站江科大视频)
I2C总线总览
可以看下面这个视频初步了解一下:
4分钟看懂!I2C通讯协议 最简单的总线通讯!_哔哩哔哩_bilibili
I2C介绍
IIC协议规定,当主机作为接收设备时,主机对最后一个字节不应答,以向发送设备(从设备)标识数据传送结束。这是因为每次传输都应得到应答信号后再进行下一个字节传送。如果此时接收机应答了,那它就接收的不是最后一个字节了。如果是最后一个字节,第9个时钟周期发送的是非应答信号(此时发送的不是应答信号就是非应答信号),最后发送停止信号。
I2C电路规范
两根线:SCL(时钟线) SDA(数据线)
可以做如下想象:主机(左边的A人)通过下拉杆子(下拉为0,松手上去为1)发送地址,其他人(I2C总线上的其他设备)通过观察发送的地址判断和自己有没有关系,如果这个地址是自己,那就默认自己和主机联系,并通过 下拉杆子/松手上放杆子 发送数据。
六种时序结构
起始与终止
起始信号:SCL保持高电平 SDA下降沿
终止信号:SCL保持高电平 SDA上升沿
发送一个字节
逻辑1:SCL保持高电平时,SDA高电平
逻辑0:SCL保持高电平时,SDA低电平
接收一个字节
逻辑1:SCL保持高电平时,SDA高电平
逻辑0:SCL保持高电平时,SDA低电平
主机发送与接受应答
从机方面:从机接收到了之前的信息会回复0,没收到或“主机读取接收完成”会回复1
发送一帧数据
(开始 - (地址+写0) - 从机应答0 - 第一个字节 - 从机应答0 - 第二个字节……第n个字节 - 从机应答0 - 终止)
读写位:写为0,读为1
接收一帧数据
(开始 - (地址+读1) - 从机应答0 - 第一个字节 - 主机应答0 - 第二个字节……第n个字节 - 主机应答1 - 终止)
注:(此处没有标明要读的寄存器地址,所以从机会发默认地址下的数据(比如某些传感器就一个数据),当主机应答1时宣布不打算继续接收了,那么下一位就为停止位)
读数据帧
(下图)一般开始接收前需要先“写”从机的设备地址,“写”从机的要开始读的寄存器的地址。
复合格式
向 谁 收 指定的什么。
其他
如有疑问可看一下其他大佬的文章: