I2C总线仲裁机制

先说结论:

遵循3个机制

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

=========================================================================

以下为摘抄,就不重复啰嗦了I2C总线仲裁原理_yangkuiwu的博客-CSDN博客_i2c仲裁

        I2C中心以启动信号START来掌管总线,以停止信号STOP来释放总线;启动信号START后紧

接着发送一个地址字节,其中7位为被控器件的地址码,一位为读/写控制位R/W,R/W位为0表示由

主控向被控器件写数据,R/W为1表示由主控向被控器件读数据;当被控器件检测到收到的地址与

自己的地址相同时,在第9个时钟期间反馈应答信号;每个数据字节在传送时都是高位(MSB)在

前;信号波形如下图所示。

        I2C总线上可能在某一时刻有两个主控设备要同时向总线发送数据,这种情况叫做总线竞争。

I2C总线具有多主控能力,可以对发生在SDA线上的总线竞争进行仲裁,其仲裁原则是这样的: 假

设主控器1要发送的数据DATA1为“101 ……”;主控器2要发送的数据DATA2为“1001 ……”总线被启

动后两个主控器在每发送一个数据位时都要对自己的输出电平进行检测,只要检测的电平与自己发

出的电平一致,他们就会继续占用总线。在这种情况下总线还是得不到仲裁。当主控器1发送第3位

数据“1”时(主控器2发送“0” ),由于“线与”的结果SDA上的电平为“0”,这样当主控器1检测自己的

输出电平时,就会测到一个与自身不相符的“0”电平。这时主控器1只好放弃对总线的控制权;因此

主控器2就成为总线的唯一主宰者。不难看出:

  1. 对于整个仲裁过程主控器1和主控器2都不会丢失数据;
  2.  各个主控器没有对总线实施控制的优先级别,他们遵循“低电平优先”的原则,即谁先发送低电平谁就会掌握对总线的控制权。

=========================================================================

以下也为摘抄I2C总线的仲裁机制_maple-CSDN博客_i2c仲裁

        在多主的通信系统中。总线上有多个节点,它们都有自己的寻址地址,可以作为从节点被别

的节点访问,同时它们都可以作为主节点向其他的节点发送控制字节和传送数据。但是如果有两个

或两个以上的节点都向总线上发送启动信号并开始传送数据,这样就形成了冲突。要解决这种冲

突,就要进行仲裁的判决,这就是I 2C总线上的仲裁。

        I2C总线上的仲裁分两部分:SCL线的同步和SDA线的仲裁。

1  SCL线的同步(时钟同步)

        SCL同步是由于总线具有线“与”的逻辑功能,即只要有一个节点发送低电平时,总线上就表现

为低电平。当所有的节点都发送高电平时,总线才能表现为高电平。正是由于线“与”逻辑功能的原

理,当多个节点同时发送时钟信号时,在总线上表现的是统一的时钟信号。这就是SCL的同步原理

2 SDA仲裁

        SDA线的仲裁也是建立在总线具有线“与”逻辑功能的原理上的。节点在发送1位数据后,比较

总线上所呈现的数据与自己发送的是否一致。是,继续发送;否则,退出竞争。SDA线的仲裁可以

保证I2C总线系统在多个主节点同时企图控制总线时通信正常进行并且数据不丢失。总线系统通过

仲裁只允许一个主节点可以继续占据总线。

3 仲裁过程

两个主节点的仲裁过程

        上图是以两个节点为例的仲裁过程。DATA1和DATA2分别是主节点向总线所发送的数据信

号,SDA为总线上所呈现的数据信号,SCL是总线上所呈现的时钟信号。当主节点1、2同时发送起

始信号时,两个主节点都发送了高电平信号。这时总线上呈现的信号为高电平,两个主节点都检测

到总线上的信号与自己发送的信号相同,继续发送数据。第2个时钟周期,2个主节点都发送低电平

信号,在总线上呈现的信号为低电平,仍继续发送数据。在第3个时钟周期,主节点1发送高电平信

号,而主节点2发送低电平信号。根据总线的线“与”的逻辑功能,总线上的信号为低电平,这时主

节点1检测到总线上的数据和自己所发送的数据不一样,就断开数据的输出级,转为从机接收状

态。这样主节点2就赢得了总线,而且数据没有丢失,即总线的数据与主节点2所发送的数据一样,

而主节点1在转为从节点后继续接收数据,同样也没有丢掉SDA线上的数据。因此在仲裁过程中数

据没有丢失。

总结:SDA仲裁和SCL时钟同步处理过程没有先后关系,而是同时进行的。 

  • 23
    点赞
  • 140
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
I2C多主机模式下,仲裁是指不同主机之间竞争总线控制权的过程。当多个主机同时发起通信请求时,仲裁机制会决定哪个主机能够获得总线的控制权。这个过程是通过时钟同步和时钟扩展来实现的。 时钟同步是指不同主机之间通过线与的特性和I2C对SCL的持续检测来实现的。根据引用\[2\]中的描述,同步之后的时钟的低电平时间取决于低电平最长的CLK,高电平时间取决于高电平时间最短的CLK。通过这种方式,主机能够在通信过程中保持时钟同步,确保数据的准确传输。 时钟扩展是从机在通信过程中动态调整通信速率的措施。根据引用\[1\]中的描述,从机可以通过时钟扩展来延长SCL的低电平时间,从而使主机能够更好地检测到从机的响应。这样可以避免通信冲突和数据错误。 总的来说,在I2C多主机模式下,仲裁是通过时钟同步和时钟扩展来实现的。时钟同步确保不同主机之间的时钟保持一致,而时钟扩展则允许从机动态调整通信速率,以避免通信冲突和数据错误。 #### 引用[.reference_title] - *1* *2* [I2C(IIC)的仲裁、时钟同步和时钟扩展](https://blog.csdn.net/NeoZng/article/details/128486366)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [基于Verilog的I2C_MASTER模块设计](https://blog.csdn.net/LMYKcat/article/details/126134901)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值