速通I2C通信原理以及驱动开发(上)

I2C通信原理

I2C物理总线

在这里插入图片描述
如图所示I2C支持一对多的设备通信,各个设备地址独立。I2C物理总线使用两条总线线路,SCL 和SDA 。
·SCL:时钟线,数据收发同步
·SDA:数据线,传输具体数据
总线通过上拉电阻接到电源,而且要把GPIO模式配置成开漏输出。

开漏输出和上拉电阻的作用:
·可以防止短路。总线在挂载多个设备时,如果使用推挽输出,可能会导致某个从设备的高电平VCC接入某个从设备的低电平GND,从而产生短路。而开漏输出的特点是:有低电平无确定的高电平,在接入上拉电阻后,会产生上拉电阻另一端的给的电压。如果出现从设备一端VCC一端GND时则会由上拉电阻充当负载,避免短路的发生。
·可以产生线与,从而实现仲裁

线与原理科普
当总线上多个设备至少有一个设备是0(低电平),则总线显示0(低电平)
当总线上多个设备全部设备是1(高电平),则总线显示1(高电平)
在这里插入图片描述
这里用两个反相开漏电路(输入与输出相反)为例,在从设备1输入为0时反相电路输出1(方向从5v流出到总线),从设备2输入为1时反相电路输出0(方向由总线流入GND),现在的现象是从设备1是1(高电平),从设备2是0(低电平),之后会从设备1的电流通过总线流入从设备2进入GND,导致电流经过从设备1的上拉电阻负载后,电压为0。使得从设备1和总线最后也是0(低电平),从而产生线与(1 & 0 = 0)。

通信速率:

标准模式速率100kbit/s
快速模式速率400kbit/s
高速模式速率3.4Mbit/s

I2C通信协议

起始信号(S)和停止信号(P)

在这里插入图片描述
S:当SCL处于高电平时,SDA产生下降沿跳变。
P:当SCL处于高电平时,SDA产生上升沿跳变。
总线忙碌:当主设备发出S信号到P信号期间都是总线忙碌状态。

数据格式与应答(ACK/NACK)

在这里插入图片描述
I2C的数据定义为8-bit,对于每次的传送总字节没有限制,但是每次传输8-bit必须伴有一个ACK应答信号,而且这个ACK由
从设备发出,在SCL 为高时拉低并保持SDA。如果从设备忙,可以使SCL保持在低电平强制让主设备进入等待状态,当从设备空闲时,释放SCL,数据才能正常传输。
NACK是由主设备产生用来拒绝应答,后面数据读写会进行讲解

主机与从机通信

在这里插入图片描述
在开始标志(S)发出后,主设备会发出一个7-bit的Slave地址和1-bit的R/W位。R/W位表示主设备是在接收数据(read)还是发送数据(write)。
主设备释放SDA,等待从设备的ACK。从设备产生应答时,会将SDA拉低,并且在SCL为高时一直保持低电平。
最后以结束标志(P)结束通信,释放通信线路。
主设备也可以产生重复的开始信号(S)起操作其他从设备,而不发送结束标志(P)

数据读写

单字节写入

在这里插入图片描述

连续字节写入


进行写操作时,主设备发出开始标志(S)和写地址(地址位加一个R/W位,0为写)。 MPU6050产生应答信号。然后主设备开始传送寄存器地址(RA),接到应答后,开始传送寄存器数据, 然后仍然要有应答信号,连续写入多字节时依次类推。

单字节读出

在这里插入图片描述

连续字节读出

在这里插入图片描述进行读操作时,主设备发出开始标志(S)和读地址(地址位加一个R/W位,1为读)。 等待MPU6050产生应答信号。然后发送寄存器地址,告诉MPU6050读哪一个寄存器。 紧接着,收到应答信号后,主设备再发一个开始信号,然后发送从设备读地址。 MPU6050产生应答信号并开始发送寄存器数据。通信以主设备产生的拒绝应答信号(NACK)和结束标志§结束。

仲裁机制

如果有两个或两个以上的节点都向总线上发送启动信号(S)并开始传送数据,这样就形成了冲突。要解决这种冲突,就要进行仲裁的判决,这就是I 2C总线上的仲裁。
I2C总线上的仲裁分两部分:SCL线的同步和SDA线的仲裁。

SCL线的同步(时钟同步)

在这里插入图片描述

SCL同步是由于总线具有线“与”的逻辑功能,即只要有一个节点发送低电平时,总线上就表现为低电平。当所有的节点都发送高电平时,总线才能表现为高电平。正是由于线“与”逻辑功能的原理,当多个节点同时发送时钟信号时,在总线上表现的是统一的时钟信号。这就是SCL的同步原理

SDA仲裁

在这里插入图片描述在图中不难看出DATA1发送的数据是 10111…

DATA2发送的数据是 100101…

在起始信号的被DATA1先行拉低;

在1、2周期的时候DATA1、2的数据位都是一样的,保持持续仲裁,当在第三周期时DATA1的数据位是1,DATA2的数据位是0,根据总线具有“线与”的逻辑功能(低电平优先),DATA2赢得仲裁,DATA1失去总线控制权。

SDA线的仲裁也是建立在总线具有线“与”逻辑功能的原理上的。节点只能在总线空闲的时侯启动传输,两个或多个主机可能在起始条件的最小持续时间内产生一个起始条件,结果在总线上产生一个规定的起始条件。
总结一下:
1、 当 SCL 线是高电平时,仲裁发生在SDA线上
2、 仲裁可以持续多位
3、 低电平优先

参考链接:https://blog.csdn.net/weixin_47321452/article/details/127192828

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

凉山有客不自赏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值