i2c协议仲裁机制

这个是研究I2C总线协议的时候,这一部分没看懂就仔细研究了一下

简介

主机只能在总线空闲的时侯启动传输,两个或多个主机可能在起始条件的最小持续时间内产生一个起始条件,结果在总线上产生一个规定的起始条件。
总结一下:
1、 SCL 线是高电平时,仲裁发生在SDA线上
2、 仲裁可以持续多位
3、 低电平优先

仲裁

仲裁过程

 在图中不难看出DATA1发送的数据是 10111....

DATA2发送的数据是 100101....

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

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

遵循3个机制

  1. “线与”机制。多主机时,总线具有“线与”的逻辑功能,即只要有一个节点发送低电平时,总线上就表现为低电平。
  2. SDA回读机制。总线被启动后,多个主机在每发送一个数据位时都要对自己的输出电平进行检测,只要检测的电平与自己发出的电平一致,就会继续占用总线。
  3. 低电平优先机制。由于线与的存在,当多主机发送时,谁先发送低电平谁就会掌握对总线的控制权。
     

这时候又疑惑了,什么是线与?

线与

I2C 支持多个主设备与多个从设备连接在同一根总线上,如果多个设备同时占用总线,怎么判断谁先占用总线呢?所以就需要一种仲裁机制。I2C 没有 Arbiter 直接的来处理仲裁,而是通过线与的逻辑实现仲裁。

仲裁过程:当主设备A准备占用I2C时,需要在SCL为高时,将SDA拉高,再拉低,满足一个启动条件。当主设备A将SDA拉高后,需要检查SDA的电平:

  1. 如果此时SDA电平为高,说明主设备可以占用总线,然后主设备A会将SDA拉低,一次满足启动条件,开始传输;
  2. 如果此时SDA电平为低,说明总线已经被其他设备占用,主设备A会退出。

为什么SDA为低,就是被其他设备占用了呢?
因为线与逻辑的存在。只有总线上有其他的设备将SDA置为0,线与后,SDA线的电平为0。主设备A检查SDA线的电平时,会发现为低电平。所以仲裁时,哪个设备更早地将SDA线拉低,谁就抢占了优先权。

-----------------------------------------------------------------------------------------------------------------------------
以上某些知识点摘自下面文章:

I2C总线仲裁原理_老羊快跑的博客-CSDN博客_iic 仲裁

I2C总线仲裁机制_艾特号的博客-CSDN博客_i2c仲裁

I2C中为什么线与?为什么要有上拉电阻?_小小verifier的博客-CSDN博客_i2c为什么要接上拉电阻

  • 3
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

wiyoo0

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

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

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

打赏作者

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

抵扣说明:

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

余额充值