当前位置: 首页 > news >正文

为什么谁先发送低电平谁就掌握对总线的控制权

这是由 I2C 总线的开漏输出结构线与逻辑特性决定的,核心原因可以拆解为以下几点:


1. 开漏输出的电平特性

I2C 设备的 SDA 和 SCL 引脚都是开漏输出,这意味着:

  • 设备只能主动将总线拉到低电平(0)
  • 设备无法主动输出高电平,高电平是由外部的上拉电阻将总线拉到 VCC 实现的。

因此,总线上的电平遵循 “低电平优先” 的规则:只要有任何一个设备将总线拉低,整个总线的电平就会是低的,其他设备即使想输出高电平,也无法改变总线的状态。

2. 线与逻辑的仲裁机制

当多个主机同时尝试发送数据时,它们会在 SDA 线上同时输出数据位:

  • 如果一个主机发送的是高电平(即释放总线,由上拉电阻拉高),而另一个主机同时发送的是低电平(主动拉低总线),那么总线的实际电平会是低电平。
  • 发送高电平的主机会检测到总线电平与自己发送的不一致,就会意识到总线被其他设备抢占,从而主动退出竞争,放弃对总线的控制权。
  • 而那个成功将总线拉低的主机,因为检测到总线电平与自己发送的一致,就会继续传输,从而掌握了总线的控制权。

3. 仲裁的实际过程

举个例子,假设主机 A 和主机 B 同时开始传输:

  1. 主机 A 发送一个高电平位,主机 B 发送一个低电平位。
  2. 总线被主机 B 拉低,实际电平为低。
  3. 主机 A 检测到总线上的电平(低)与自己发送的电平(高)不符,判定仲裁失败,立即停止传输。
  4. 主机 B 检测到电平匹配,继续传输,成为当前唯一的总线主控。

这种机制确保了在多主机环境下,先成功发送低电平的设备能够独占总线,避免了数据冲突。

I2C 多主机仲裁流程

1. 初始状态
  • 所有主机检测到 SCL 和 SDA 均为高电平,判定总线空闲。
  • 多个主机(如主机 A、主机 B)同时发起传输,开始发送起始条件(SDA 在 SCL 高电平时拉低)。
2. 同步时钟(SCL)
  • 所有主机在 SCL 线上同步输出时钟脉冲。
  • 若某主机需要延长数据采样时间,可拉低 SCL,强制其他主机等待,直到所有主机都释放 SCL 后,总线才会继续。
3. 数据位仲裁(SDA)

仲裁在每个数据位的传输过程中进行:

  1. 发送数据位:所有主机同时在 SDA 线上输出自己的数据位。
  2. 检测总线电平:每个主机同时读取 SDA 线上的实际电平。
  3. 比较与判断
    • 如果主机发送的是高电平,但检测到总线是低电平,说明有其他主机发送了低电平,该主机仲裁失败,立即停止传输并释放总线。
    • 如果主机发送的是低电平,且检测到总线也是低电平,则继续传输,保持对总线的竞争。
4. 仲裁结束
  • 持续比较数据位,直到只剩一个主机检测到电平匹配,该主机获胜,独占总线完成传输。
  • 其他仲裁失败的主机转为从机模式,监听总线,或在总线空闲后重新尝试传输。

直观示例

步骤主机 A 发送主机 B 发送总线实际电平主机 A 检测主机 B 检测结果
11 (释放总线)0 (拉低总线)0不匹配 (1 vs 0)匹配 (0 vs 0)主机 A 退出,主机 B 获胜
2-继续传输---主机 B 独占总线
http://www.jsqmd.com/news/425423/

相关文章:

  • 超声相控阵波束合成实战代码
  • 使用trae开发工具对某书屋项目进行接口自动化测试
  • 基于STM32DSP库与MATLAB的数字滤波器设计与实现
  • P1894 [USACO4.2] 完美的牛栏The Perfect Stall 题解
  • Bootstrap4 面包屑导航
  • G008 【模板】树的重心 带权重心 DFS P1670 P1395 P2986 洛谷
  • 行走人间・第二篇:生活
  • 基于springboot的健身服务管理系统
  • Web 词汇表
  • 3mm 厚层 CT 冠脉配准踩坑实录:从血管碎裂、空间漂移到 Elastix 完美对齐
  • 关于arduino 库文件的标准结构
  • 用ESP32打造动态网页仪表盘
  • flutter: 用getxservice管理状态
  • 感受一下谷歌的语义识别能力 和 古老的每个关键词单独做一个站的玩法
  • 2026年诚信的景观灯光护栏厂家优质推荐 - 品牌鉴赏师
  • 【claude】拒绝为美军提供“黑暗版”Claude,Anthropic成首个被五角大楼列入“供应链风险”的美国AI公司
  • 碎碎念
  • 正确理解C++中的值语义:move
  • 2026年防爆声级计制造厂推荐,防爆认证噪声监测专业厂商 - 品牌鉴赏师
  • 华为OD技术面八股文_C++_01
  • 分布式系统高并发:缓存策略与限流方案实践
  • P15546 学习笔记
  • 【二分】BISHI85 【模板】整数域二分
  • 《深度解析!Agentic AI在智能制造潜力,提示工程架构师视角揭秘》
  • AI原生应用开发:Llama模型的10个高级用法
  • SVG Stroke 属性详解
  • 数据仓库监控体系搭建:从ETL到查询全链路监控
  • SQL ROUND() 函数详解
  • 解读大数据领域结构化数据的管理模式
  • 华为OD机考双机位C卷 - Alice的安全旅行 (Java Python JS GO C++ C)