【I2C 技术系列 01】I2C 电气特性与物理层

📚 I2C 技术系列 · 持续更新中

本系列从 OD 开漏物理层一路打到 Linux i2c子系统,把"两根线"背后那套电气/协议/仲裁/恢复/驱动全拧成一根线。

👉 想系统追更,戳这里查看完整目录:

【I2C 技术系列 00】总目录


本篇定位 :I2C 一切的源头在物理层------OD 开漏 + 上拉电阻。理解了为什么是 OD、为什么需要上拉、线与逻辑怎么实现,后面的协议、仲裁、恢复全都有了根基。本篇把 SDA/SCL 两根线的电气本质讲透,是你做硬件设计和排查总线问题的第一块基石。
I2C 的"简单"是假象,物理层是最大坑源

你裸机调 I2C,代码写对了但就是不通------十有六七是物理层:上拉没加 / 阻值错 / 电容超 / 跨电压域没转换。本篇不是"科普",是让你拿到示波器波形能判断电气对不对的工程文档。


目录

  • [一、I2C 物理层总览](#一、I2C 物理层总览)
  • [二、OD 开漏输出结构](#二、OD 开漏输出结构)
    • [2.1 为什么不能推挽](#2.1 为什么不能推挽)
    • [2.2 总线上多设备为什么必须 OD](#2.2 总线上多设备为什么必须 OD)
    • [2.3 OD 输出的电气参数](#2.3 OD 输出的电气参数)
  • 三、线与逻辑(wired-AND)
    • [3.1 线与的本质](#3.1 线与的本质)
    • [3.2 线与的两个关键应用](#3.2 线与的两个关键应用)
    • [3.3 线与的副作用:上升沿慢](#3.3 线与的副作用:上升沿慢)
  • 四、上拉电阻的物理作用
    • [4.1 上拉电阻做什么](#4.1 上拉电阻做什么)
    • [4.2 上拉电阻的两个约束](#4.2 上拉电阻的两个约束)
    • [4.3 典型取值速查](#4.3 典型取值速查)
  • 五、电平标准与容限
    • [5.1 输入电平阈值(NXP/原飞利浦规范)](#5.1 输入电平阈值(NXP/原飞利浦规范))
    • [5.2 实际芯片的差异](#5.2 实际芯片的差异)
    • [5.3 输入滞回(Schmitt)](#5.3 输入滞回(Schmitt))
  • [六、总线电容 400pF 限制](#六、总线电容 400pF 限制)
    • [6.1 400pF 从哪来](#6.1 400pF 从哪来)
    • [6.2 超过 400pF 会怎样](#6.2 超过 400pF 会怎样)
    • [6.3 电容超标的解决办法](#6.3 电容超标的解决办法)
  • [七、典型电路与 ASCII 图](#七、典型电路与 ASCII 图)
    • [7.1 标准单 VDD 域电路](#7.1 标准单 VDD 域电路)
    • [7.2 跨电压域(3.3V MCU ↔ 5V 传感器)](#7.2 跨电压域(3.3V MCU ↔ 5V 传感器))
    • [7.3 PCA9306 集成电平转换](#7.3 PCA9306 集成电平转换)
  • [八、关键问题 Q&A](#八、关键问题 Q&A)
      • [Q1:为什么 I2C 必须是 OD 开漏,不能推挽?](#Q1:为什么 I2C 必须是 OD 开漏,不能推挽?)
    • [Q2:I2C 上拉电阻不接会怎样?](#Q2:I2C 上拉电阻不接会怎样?)
    • [Q3:上拉电阻接 3.3V 还是 5V?](#Q3:上拉电阻接 3.3V 还是 5V?)
    • Q4:总线上每个设备都要上拉吗?
    • [Q5:OD 开漏的 GPIO 配置要注意什么?](#Q5:OD 开漏的 GPIO 配置要注意什么?)
    • [Q6:为什么 I2C 上升沿比下降沿慢这么多?](#Q6:为什么 I2C 上升沿比下降沿慢这么多?)
  • 九、实战案例
    • [案例 1:总线一直 BUSY,排查发现上拉接错域](#案例 1:总线一直 BUSY,排查发现上拉接错域)
    • [案例 2:5V EEPROM 和 3.3V MCU 直连,偶尔读错](#案例 2:5V EEPROM 和 3.3V MCU 直连,偶尔读错)
    • [案例 3:总线挂 12 个器件,400k 跑不稳](#案例 3:总线挂 12 个器件,400k 跑不稳)
  • 十、本篇小结与速查

一、I2C 物理层总览

I2C(Inter-Integrated Circuit)是飞利浦(NXP)1982 年设计的两线制串行总线:

复制代码
       VDD
        │
       ┌┴┐ Rp(上拉)
       └┬┘
        │
  ──────┼────────── SCL (时钟线)
        │
  ┌─────┴─────┐
  │   Master  │ OD
  │           │──┐
  └─────┬─────┘  │
        │        │
  ┌─────┴─────┐  │
  │  Slave1   │ OD
  │           │──┤
  └─────┬─────┘  │
        │        │
  ┌─────┴─────┐  │
  │  Slave2   │ OD
  │           │──┘
  └───────────┘
特性 值
线数 2(SDA 数据 + SCL 时钟)
输出结构 OD 开漏(Open-Drain) / TTL 集电极开路
电平 依赖上拉拉高,低电平靠管子拉低
拓扑 多设备共线(总线)
逻辑 线与(wired-AND)
速度 100k / 400k / 1M / 3.4M / 5M
距离 板级(电容限制,典型 < 1m)

嵌入式视角:I2C 是"总线",UART 是"点对点"

串口是 TX/RX 两根线点对点收发。I2C 两根线是总线 ,多个设备挂在上面分时复用。这决定了:① 必须线与(不能两个推挽打架);② 必须有地址(分清谁说话);③ 必须有应答(确认收到)。三件事都源于"总线"这一拓扑。


二、OD 开漏输出结构

2.1 为什么不能推挽

对比推挽(Push-Pull)和开漏(Open-Drain):

复制代码
推挽输出(如 GPIO 默认 / SPI):
        VDD
         │
      ┌──┴──┐
  PMOS│     │      ← 拉高时 PMOS 导通,输出强高
      └──┬──┘
         ├──→ OUT
      ┌──┴──┐
  NMOS│     │      ← 拉低时 NMOS 导通,输出强低
      └──┬──┘
         │
        GND

开漏输出(I2C):
        VDD
         │
         ×(无上管,PMOS 不接)
         
         ├──→ OUT(只有 NMOS 漏极)
      ┌──┴──┐
  NMOS│     │      ← 只能拉低
      └──┬──┘
         │
        GND

   高电平?靠外部上拉电阻 Rp 拉到 VDD

关键差异:

  • 推挽:内部能主动拉高也能拉低,输出阻抗低,驱动强
  • 开漏:内部只能拉低,拉高靠外部上拉电阻

2.2 总线上多设备为什么必须 OD

假设两个设备都用推挽挂同一根线:

复制代码
设备 A 输出高(PMOS 导通,强拉 VDD)
设备 B 输出低(NMOS 导通,强拉 GND)
        ↓
VDD ──[A的PMOS]──线──[B的NMOS]── GND
        ↓
    直通电流!Ioad ≈ VDD / (Ron_p + Ron_n) ≈ 3.3V / (20+20Ω) ≈ 80mA
        ↓
    ① 线电平不确定(约 VDD/2)
    ② 器件发热甚至烧毁
    ③ 数据冲突

OD 开漏下,任何设备拉低都是"低",只有所有设备都不拉低才"高"------这就是线与,天然防冲突。

OD 开漏是 I2C 多主多从的物理前提

没有_OD_就没有线与,没有线与就没有多主仲裁,也没有 ACK(从机拉低 SDA 表示应答,主机读)。I2C 协议的每一层都建立在 OD 开漏这个物理特性上。这是 I2C 和 SPI 最本质的差异------SPI 用推挽,所以只能一主多从,从机不能主动发言。

2.3 OD 输出的电气参数

参数 含义 典型值
VOL 输出低电平(拉低时) ≤ 0.4V(@ IOL=3mA,标准模式)
IOL 拉低时吸收电流能力 ≥ 3mA(标准/快速)
Ron NMOS 导通电阻 几十 Ω
漏电流 输出高(管子关断)时漏电流 ≤ 10μA
  • VOL = 0.4V 是 I2C 规范硬指标,决定低电平能否被识别
  • IOL = 3mA 决定上拉电阻下限(Rp_min = (VDD - VOL) / IOL)

三、线与逻辑(wired-AND)

3.1 线与的本质

OD 开漏 + 上拉,多设备挂同一根线,逻辑是**"任何一个拉低就是低,全不拉才高"**------这就是线与:

复制代码
设备A输出  设备B输出  线上电平
   1(放)      1(放)      1(被上拉拉高)
   1(放)      0(拉)      0
   0(拉)      1(放)      0
   0(拉)      0(拉)      0

真值表就是 AND(全 1 才 1),所以叫"线与"。

3.2 线与的两个关键应用

应用 1:ACK 应答

主机发完 8 位数据,释放 SDA(输出 1),从机拉低 SDA(输出 0)表示应答。线与结果:SDA = 0,主机读到 ACK。

复制代码
主机: 1 1 0 0 1 0 1 0  [1 放]   ← 输出 8 位后释放
从机:                    [0 拉]   ← 拉低 SDA
线与: 1 1 0 0 1 0 1 0   0       ← 第 9 拍 SCL 高时,主机读到 0 = ACK

应用 2:多主仲裁

多个主机同时发,谁输出 0 谁就"赢"------输出 1 但读到 0 的主机发现冲突,自动退出。详见 \[05-I2C多主仲裁与时钟同步]。

3.3 线与的副作用:上升沿慢

低电平靠管子拉(快,纳秒级),高电平靠上拉电阻 + 电容充(慢,RC 时间常数)。所以 I2C 上升沿天然比下降沿慢------这是速度瓶颈的核心来源。

复制代码
下降沿(NMOS 拉低):快,~10ns
    ┌─────┐
    │     │
    │     ↘
    │      ↘____
高→低 几纳秒

上升沿(Rp 充 Cb):慢,tr ≈ 0.8473 × Rp × Cb
    _____↗
        ↗
       ↗
低→高 几十到几百纳秒(看 Rp 和 Cb)

I2C 速度上限的物理根源是上升沿

你想跑 1MHz 甚至 3.4MHz,卡的就是上升沿。上升沿 = 0.8473 × Rp × Cb,要快就要 Rp 小(上拉强)或 Cb 小(电容小)。但 Rp 小有限制(不能超过 IOL=3mA),Cb 小有限制(走线和器件电容)。这是 02 篇上拉电阻设计的核心矛盾。


四、上拉电阻的物理作用

4.1 上拉电阻做什么

OD 开漏内部拉不了高,必须靠外部上拉电阻 Rp接到 VDD,在所有设备都不拉低时把线拉到高电平:

复制代码
VDD ──[Rp]── SDA ── 各设备 OD 输入输出
  • 没人拉低:电流 VDD→Rp→(设备输入高阻)≈0,SDA = VDD(高)
  • 有人拉低:电流 VDD→Rp→拉低设备的 NMOS→GND,SDA = VOL ≈ 0.4V(低)

4.2 上拉电阻的两个约束

约束 1:Rp_max(能拉到合格高电平)

上拉太大,高电平充得慢,上升时间超规范:

复制代码
tr = 0.8473 × Rp × Cb    (Cb = 总线电容)

要求 tr ≤ 规范值(标准模式 1000ns,快速模式 300ns,快速+ 120ns)
→ Rp ≤ tr / (0.8473 × Cb)

约束 2:Rp_min(低电平拉得下去)

上拉太小,拉低时灌入电流大,可能超过 IOL(低电平被抬高到 VOL 之上):

复制代码
IOL = (VDD - VOL) / Rp  ≤ 3mA(规范)
→ Rp ≥ (VDD - VOL) / IOL = (3.3 - 0.4) / 0.003 ≈ 967Ω

所以 Rp 的合法区间:

复制代码
(VDD - VOL)/IOL  ≤  Rp  ≤  tr_max / (0.8473 × Cb)
     Rp_min                Rp_max

4.3 典型取值速查

VDD Cb 速度模式 tr_max Rp_max Rp_min 常用
3.3V 100pF 标准 100k 1000ns 11.8kΩ 967Ω 4.7k~10k
3.3V 100pF 快速 400k 300ns 3.5kΩ 967Ω 2.2k~4.7k
3.3V 100pF 快速+ 1M 120ns 1.4kΩ 967Ω 1k~2.2k
3.3V 400pF 标准 100k 1000ns 2.95kΩ 967Ω 2.2k~2.7k
3.3V 400pF 快速 400k 300ns 884Ω 967Ω ❌ 跑不动!

400kHz + 400pF 是跑不动的!

看最后一行:Rp_max(884Ω)< Rp_min(967Ω),无解。这就是为什么快速模式规范把总线电容限制在 400pF,实际工程还要留余量。你总线挂太多器件或走线太长,Cb 上去了,400k 就跑不稳。详见 \[02-I2C上拉电阻与总线电容设计]。


五、电平标准与容限

5.1 输入电平阈值(NXP/原飞利浦规范)

参数 标准模式 快速/快速+模式
VIL(输入低阈值) -0.5 ~ +0.3VDD -0.5 ~ +0.3VDD
VIH(输入高阈值) 0.7VDD ~ VDD+0.5 0.7VDD ~ VDD+0.5
hysteresis(滞回) 无要求 推荐 0.05VDD(抗噪)
  • VDD 可以是 3.3V / 5V / 1.8V,I2C 不规定固定 VDD,规定比例(0.3/0.7)
  • 这让 I2C 能跨电压域(只要所有设备共 VDD 域,或经电平转换)

5.2 实际芯片的差异

器件类型 VIL VIH 说明
严格按规范 0.3VDD 0.7VDD NXP 原厂器件
CMOS 宽容 0.3VDD 0.7VDD 多数现代
TTL 兼容输入 0.8V 2.0V 老器件(5V 系统)

混用 5V 和 3.3V 器件会出问题

5V 器件 VIH = 0.7×5 = 3.5V,而 3.3V 器件输出高才 3.3V → 5V 器件识别不到高电平!必须电平转换(PCA9306 / MOSFET 桥)。这是 I2C 硬件设计高频坑。

5.3 输入滞回(Schmitt)

  • 快速模式以上推荐输入加施密特触发器(滞回)
  • 作用:上升沿慢的信号在阈值附近抖动时,滞回防多次翻转
  • 你选 I2C 器件,高速模式一定确认输入有滞回

六、总线电容 400pF 限制

6.1 400pF 从哪来

I2C 规范标准/快速模式规定总线电容 Cb ≤ 400pF。来源:

复制代码
Cb = Σ(每个器件引脚电容) + 走线电容 + 连接器/过孔电容

典型:
- 器件引脚:5~10pF/个
- PCB 走线:0.5~1pF/cm(看层叠)
- 连接器:2~5pF/针
- 过孔:0.5pF/个

例:8 个器件 × 10pF + 30cm 走线 × 1pF/cm + 2 连接器 × 5pF = 80 + 30 + 10 = 120pF(还行)

例:16 个器件 + 1m 走线 + 排线 = 容易超 400pF

6.2 超过 400pF 会怎样

  1. 上升时间超标:tr = 0.8473 × Rp × Cb,Cb 大 → tr 大 → SCL 高电平时间不够 → 时序错
  2. 信号变形:上升沿太缓,达不到 VIH,识别错误
  3. 速度上不去:被迫降速

6.3 电容超标的解决办法

方法 做法
降速 400k → 100k,tr 要求放宽
减小 Rp 提高充电速度,但受 IOL 限制(下限 ~1kΩ)
分段总线 用 I2C 多路复用器(TCA9548A)分多段,每段电容小
加缓冲器 I2C 总线缓冲器(PCA9515 / LTC4311),隔离电容
减少器件/走线 硬件设计源头控制
换总线 实在不行,考虑 SPI(推挽,驱动强)/CAN(差分,距离远)

七、典型电路与 ASCII 图

7.1 标准单 VDD 域电路

复制代码
                    3.3V
                     │
                    ┌┴┐ Rp_scl = 4.7k
                    └┬┘
                     │
    MCU ─────────────┼────── SCL ────┬──── Slave1 SCL
    (OD)             │               ├──── Slave2 SCL
                    ┌┴┐ Rp_sda = 4.7k └──── Slave3 SCL
                    └┬┘
                     │
    MCU ─────────────┼────── SDA ────┬──── Slave1 SDA
    (OD)                             ├──── Slave2 SDA
                                     └──── Slave3 SDA

    所有设备共地共 VDD(3.3V)

7.2 跨电压域(3.3V MCU ↔ 5V 传感器)

用 MOSFET 桥(经典电路,BSS138):

复制代码
   3.3V                          5V
    │                             │
   ┌┴┐ Rp1=4.7k                 ┌┴┐ Rp2=4.7k
   └┬┘                           └┬┘
    │              ┌─┐            │
    ├──────────────┤G│            ├──── 5V 侧 SDA
    │    SDA(3.3)  │ │ S          │
    │              └┬┘            │
    │               │ D           │
    │              ┌┴┐            │
    │              │ │            │
    │              └─┘            │
    │           BSS138            │
    │                             │
   GND───────────────────────────GND

   MOSFET 把两侧 OD 总线连起来:
   - 任一侧拉低 → MOSFET 导通 → 两侧都低
   - 都不拉 → 各自上拉拉到各自 VDD
  • 两侧各自上拉到自己的 VDD
  • MOSFET 体二极管方向:3.3V 侧 → 5V 侧(源接 3.3)
  • 任一侧拉低都把另一侧拉低,双向

MOSFET 桥是 I2C 电平转换经典

这电路一定要会画会分析。原理:① 两侧都高时 MOSFET Vgs=0,关断,各自高;② 任一侧拉低,MOSFET 体二极管/沟道把另一侧也拉低。比专用电平转换芯片(PCA9306)便宜,但要注意 MOSFET 选型(Vgs 阈值 < 3.3V)。

7.3 PCA9306 集成电平转换

复制代码
   3.3V 侧            PCA9306           5V 侧
    │                                   │
   SCL1 ──────────── A1    A2 ────────── SCL2
   SDA1 ──────────── B1    B2 ────────── SDA2
                       │
                      VREF1=3.3V
                      VREF2=5V
                      EN(使能,接 VREF2 经分压)
  • 专用 I2C 电平转换,内部就是 MOSFET 桥集成 + 限流
  • 支持标准/快速模式,部分支持快速+
  • 比分离 MOSFET 可靠,占板面积小

八、关键问题 Q&A

Q1:为什么 I2C 必须是 OD 开漏,不能推挽?

A :I2C 是多主多从总线 ,多个设备共享 SDA/SCL。如果用推挽,两个设备同时输出一个高一个低,会形成 VDD→GND 直通,大电流烧器件,且线电平不确定。OD 开漏 + 线与天然解决:任何设备拉低就是低,全不拉才高,无冲突。OD 是多主多从的物理前提。SPI 用推挽是因为它严格一主多从,从机输出接 MISO,主从不会同时驱动同一根线。

Q2:I2C 上拉电阻不接会怎样?

A :SDA/SCL 永远是低(被某设备拉低后无人拉高)或浮空(都释放时电平不定)。总线完全无法工作。你调 I2C 第一步就是确认上拉接了、阻值对、上拉到正确的 VDD。

Q3:上拉电阻接 3.3V 还是 5V?

A :接哪个 VDD 取决于总线上器件的电平域 。所有器件同域,接该域 VDD。跨域(3.3V MCU + 5V 传感器)必须用 MOSFET 桥或 PCA9306,两侧各自上拉到各自 VDD。不能直接把 5V 上拉拉到 3.3V MCU 引脚(可能过压烧 MCU)。

Q4:总线上每个设备都要上拉吗?

A :不要!上拉电阻是总线级的,整条 SDA 一个 Rp,整条 SCL 一个 Rp。每个设备都加会导致 Rp 并联,等效阻值过小,低电平电流超 IOL,拉不下去。常见错误:模块化设计每个子板自带 4.7k 上拉,拼一起变成 1.2k,跑不动。

Q5:OD 开漏的 GPIO 配置要注意什么?

A :① 模式设为 OD 开漏输出(或开漏 + 输入);② 输出 1 时实际是"释放"(高阻),靠上拉拉高;③ 输出 0 时拉低;④ 读输入时要先输出 1(释放)再读 IDR。STM32 的 GPIO 复用开漏模式(AF_OD)专为 I2C 设计。

Q6:为什么 I2C 上升沿比下降沿慢这么多?

A :下降沿是 NMOS 主动导通拉低,输出阻抗低(~20Ω),快(纳秒级)。上升沿是 NMOS 关断后,靠上拉电阻 Rp 给总线电容 Cb 充电,是 RC 充电,tr ≈ 0.8473 × Rp × Cb。Rp 常几 kΩ,Cb 几十到几百 pF,tr 就几十到几百纳秒。这是 I2C 速度的物理天花板。


九、实战案例

案例 1:总线一直 BUSY,排查发现上拉接错域

现象:STM32 调 MPU6050,代码对,示波器看 SCL/SDA 都是直线低电平,控制器报 BUSY。

排查:

  1. 万用表测 SCL/SDA 对地电压:0V(应 3.3V)
  2. 检查上拉电阻:焊了 4.7k,但接到一个没上电的 5V 域(原理图标错)
  3. 上拉失效,总线浮空被某设备拉低后无法恢复

解决:上拉改接 3.3V 域,正常。

教训:上拉电阻接哪个 VDD 是 I2C 第一道关卡,设计评审必查。

案例 2:5V EEPROM 和 3.3V MCU 直连,偶尔读错

现象:24C04(5V)和 STM32(3.3V)直连,带 4.7k 上拉到 5V。偶尔读到 0xFF,概率 1%。

排查:

  1. 示波器看 SCL/SDA:高电平 5V(MCU 引脚过压但没烧,侥幸)
  2. MCU 的 VIH = 0.7×3.3 = 2.3V,5V 信号能识别,但MCU 输出高 3.3V,EEPROM 的 VIH = 0.7×5 = 3.5V,识别不到!
  3. MCU 释放 SDA 后,EEPROM 读到不确定 → 偶尔误判

解决:加 BSS138 MOSFET 桥 + 两侧各自 4.7k 上拉。误码消失。

教训:跨电压域必加电平转换,直连是定时炸弹。

案例 3:总线挂 12 个器件,400k 跑不稳

现象:工控板 I2C 挂 12 个传感器,100k 正常,400k 偶尔丢字节。

排查:

  1. 示波器看上升沿:300ns(400k 规范要求 ≤ 300ns,临界)
  2. 算总线电容:12 × 8pF + 40cm 走线 × 1pF/cm = 136pF
  3. Rp = 4.7k,tr = 0.8473 × 4700 × 136pF ≈ 541ns > 300ns ❌

解决:Rp 改 2.2k,tr = 0.8473 × 2200 × 136p ≈ 254ns ✓,400k 稳定。

教训:器件多要重算上拉,4.7k 不是万能值。


十、本篇小结与速查

核心要点

  • I2C 物理层 = OD 开漏 + 上拉电阻 + 线与逻辑
  • OD 开漏内部只能拉低,拉高靠上拉;多设备共享总线无冲突
  • 线与:任一拉低即低,全不拉才高 → ACK / 仲裁的物理基础
  • 上拉电阻受双约束:Rp_min(低电平拉下去,~1kΩ)、Rp_max(上升时间达标)
  • 上升沿 tr = 0.8473 × Rp × Cb,是 I2C 速度的物理天花板
  • 总线电容 ≤ 400pF(标准/快速模式),超了要分段/降速/加缓冲
  • 跨电压域必加电平转换(MOSFET 桥 / PCA9306)
  • 电平阈值是比例(0.3/0.7 VDD),不是固定值

速查表

想干啥 看哪 / 做啥
确认上拉对不对 万用表测 SCL/SDA 静态 = VDD;示波器看上升沿
上拉阻值算 Rp ∈ (VDD-0.4)/3mA, tr_max/(0.8473×Cb)
上升时间测 示波器抓 SCL 上升沿,0.3VDD→0.7VDD 时间
多设备共线电容 Σ 器件 8pF + 走线 1pF/cm + 连接器
跨电压域 BSS138 桥 / PCA9306,两侧各自上拉
电平识别阈值 VIL=0.3VDD,VIH=0.7VDD
GPIO 配 I2C AF_OD(复用开漏)+ 上拉
总线电容超 400pF TCA9548A 分段 / 降速 / PCA9515 缓冲
上升沿太慢 减小 Rp 或减小 Cb(减器件/短走线)

延伸阅读

  • \[02-I2C上拉电阻与总线电容设计] ------ Rp 取值的完整工程推导
  • \[03-I2C信号完整性与EMI] ------ 上升沿、串扰、走线拓扑
  • \[04-I2C协议与时序详解] ------ 电气层之上的协议层
  • \[05-I2C多主仲裁与时钟同步] ------ 线与逻辑的协议应用
  • \[10-I2C错误处理与总线恢复] ------ 物理层失效怎么恢复
  • \[00-串口技术系列总目录] ------ 对照异步总线(点对点)

参考资料

  • NXP UM10204《I2C-bus Specification and User Manual》(官方规范,Rev 7)
  • NXP AN25541(I2C / SMBus Applications)
  • Texas Instruments《I2C Bus Pullup Resistor Calculation》(SLVA689)
  • STM32 Reference Manual(GPIO AF_OD 配置)
  • 《I2C总线规范》中文译本

\[00-I2C技术系列总目录] · 上一篇:无 · 下一篇:\[02-I2C上拉电阻与总线电容设计]


✨ 感谢你的阅读 ✨

技术之路漫漫,分享是为了更好地交流。

如果本文的内容对你有启发,希望能得到你的支持:

👍 点赞 | ⭐ 收藏 | 👀 关注

如果你在调试过程中遇到了其他问题,

欢迎在 评论区 💬 留言,我们一起探讨。

关注我,一起交流底层开发的那些事儿!🚀


相关推荐
comyccccc1 小时前
TB6612电机驱动板原理图与PCB设计学习笔记
单片机·嵌入式硬件
gscsded2 小时前
MCUboot裸机移植实战
单片机·嵌入式硬件·arm
北京盛世宏博3 小时前
多协议以太网温湿度变送器:Modbus TCP/UDP/SNMP 协议应用场景详解
单片机·tcp/ip·udp·传感器·温湿度
HRTOS3 小时前
HRTOS 内核 BUG 修复:任务等待对象未初始化导致的异常唤醒问题
单片机·嵌入式硬件·算法·51单片机
@MMiL4 小时前
SImulink: PowerGui下的信号FFT分析
单片机
List<String> error_P4 小时前
UART串口通信示波器波形测试
嵌入式硬件·示波器
开开心心_Every4 小时前
内存清理工具定时自动清理开机自启动
java·开发语言·spring·计算机外设·ocr·intellij-idea·excel
番茄灭世神4 小时前
PN学堂GD32教程第12篇——SPI与Nor Flash
c语言·stm32·单片机·嵌入式·gd32·总线协议
u1301304 小时前
GitHub 热榜项目:周榜(2026-10-11)
人工智能·驱动开发·github