news 2026/10/12 5:39:08

【I2C 技术系列 00】总目录

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【I2C 技术系列 00】总目录

I2C 是两根线(SDA/SCL)挂一总线器件的"串行总线之王"。本系列从 OD 开漏物理层一路打到 Linux i2c子系统,把"两根线"背后那套电气/协议/仲裁/恢复/驱动全拧成一根线——像 【串口技术系列文档 00】总目录 那样,硬件电气细节拉满,代码能落地,排查有手册。

为什么单独成系列
你可能觉得 I2C"简单"——两根线,读写几个寄存器。但工程里 I2C 坑最深的是物理层:上拉电阻算错、总线电容超标、多主仲裁丢、时钟拉伸卡死、从机拉低 SDA 不放……这些都不是"协议背一下"能解决的。本系列对标串口系列,把电气 → 协议 → 控制器 → 驱动 → 实战五层打通,让你拿到任何 I2C 问题都能定位到具体哪一层。


目录

  • 一、系列总图
  • 二、四层结构(对标串口系列)
    • 第一部分 · 硬件基础层(电气 / 物理)
      • 01 I2C 电气特性与物理层
      • 02 上拉电阻与总线电容设计
      • 03 I2C 信号完整性与 EMI
    • 第二部分 · 协议与时序层(两根线上怎么说话)
      • 04 I2C 协议与时序详解
      • 05 I2C 多主仲裁与时钟同步 ⭐
      • 06 I2C 速度模式与时序参数
      • 07 I2C 寻址与协议扩展
    • 第三部分 · 驱动实现层(控制器与软件)
      • 08 I2C 控制器寄存器与 IP 架构
      • 09 I2C 传输模式:轮询 / 中断 / DMA
      • 10 I2C 错误处理与总线恢复
      • 11 I2C Linux 驱动框架
    • 第四部分 · 应用实战层(落地与排查)
      • 12 I2C 设备驱动实战
      • 13 I2C 调试与排查
      • 14 I2C 排查手册与速查表
  • 三、快速索引
    • 按问题类型
    • 按应用场景
  • 四、学习建议
      • 对照学习法

一、系列总图

L1 硬件基础层 — 电气与物理
01 电气特性 / 02 上拉与电容 / 03 信号完整性

L2 协议与时序层 — 两根线上怎么说话
04 协议时序 / 05 仲裁与时钟同步 / 06 速度模式与参数 / 07 寻址与扩展

L3 驱动实现层 — 控制器与软件
08 控制器寄存器 / 09 传输模式 / 10 错误处理与恢复 / 11 Linux驱动框架

L4 应用实战层 — 落地与排查
12 设备驱动实战 / 13 调试排查 / 14 排查手册速查


二、四层结构(对标串口系列)

第一部分 · 硬件基础层(电气 / 物理)

01 I2C 电气特性与物理层

  • OD 开漏输出结构原理(为什么不能推挽)
  • SDA/SCL 线与(wired-AND)逻辑
  • 上拉电阻的物理作用(给高电平靠电阻拉,低电平靠管子拉)
  • 电平标准(标准/快速模式电平容限,VIL/VIH/VOL)
  • 总线电容 400pF 限制的来源
  • 关键问题:为什么 I2C 必须是 OD 开漏,不能像 SPI 那样推挽?

02 上拉电阻与总线电容设计

  • 上拉电阻取值范围推导(Rp_min/Rp_max)
  • 上拉电阻 vs 上升时间(tr = 0.8473 × Rp × Cb)
  • 总线电容预算(器件 + 走线 + 连接器)
  • 多电压域电平转换(PCA9306/MOSFET 桥)
  • 上拉电源选择(VDD 域一致性)
  • 关键问题:400kHz 总线,400pF 电容,上拉电阻选多大?

03 I2C 信号完整性与 EMI

  • 上升时间与边沿速率
  • 串扰(SDA/SCL 间、相邻信号)
  • 地弹与电源弹
  • 走线拓扑(星型 vs 菊花链 vs 分支长度)
  • 长线效应与何时要加终端
  • EMI(斜率控制 / 限流电阻)
  • 关键问题:I2C 走线为什么不能太长?多长算"太长"?

第二部分 · 协议与时序层(两根线上怎么说话)

04 I2C 协议与时序详解

  • START / Repeated START / STOP 条件
  • 数据位传输(SCL 高电平采样)
  • ACK / NACK 应答机制
  • 7-bit 地址 + R/W 位
  • 10-bit 地址扩展
  • 读写完整帧时序(单字节 / 多字节 / 随机读)
  • 关键问题:Repeated START 和 STOP 再 START 有什么区别?为什么读 EEPROM 要 Repeated START?

05 I2C 多主仲裁与时钟同步 ⭐

  • SCL 线与实现时钟同步(低电平最长者主导)
  • SDA 仲裁(输出 1 读到 0 → 丢失仲裁)
  • 仲裁丢失处理
  • 时钟拉伸(Clock Stretching,从机拉低 SCL 暂停)
  • 时钟拉伸的滥用与超时
  • 关键问题:多主同时发,谁赢?会不会数据冲突损坏?

06 I2C 速度模式与时序参数

  • 标准模式 100kHz / 快速模式 400kHz / 快速+ 1MHz / 高速模式 3.4MHz / 超快模式 5MHz
  • 关键时序参数(tHD_STA / tSU_STA / tLOW / tHIGH / tSU_DAT / tHD_DAT / tSU_STO / tBUF)
  • 上升/下降时间规范
  • 不同模式对上拉/电容的要求
  • 关键问题:400kHz 和 1MHz 模式,时序参数差在哪?

07 I2C 寻址与协议扩展

  • 7-bit 地址空间与保留地址(0000xxx / 1111xxx)
  • 10-bit 地址机制(11110xx + 两字节)
  • 通用广播地址(General Call,0x00)
  • SMBus(智能电池)与 PMBus(电源管理)扩展
  • ARP(动态地址分配)
  • 关键问题:为什么 I2C 地址会"冲突"?怎么解决?

第三部分 · 驱动实现层(控制器与软件)

08 I2C 控制器寄存器与 IP 架构

  • 典型 I2C 控制器 IP 框图(状态机 + 移位寄存器 + 控制/状态寄存器)
  • 关键寄存器(CON / STAT / DAT / ADDR / INT / BAUD)
  • 状态机(空闲 → 主发 → 主收 → 从收 → 从发)
  • Synopsys DesignWare / STM32 / NXP / RISC-V SoC 差异
  • DMA 触发点
  • 关键问题:控制器状态机卡在某状态,怎么定位?

09 I2C 传输模式:轮询 / 中断 / DMA

  • 轮询(PIO):简单但占 CPU
  • 中断驱动:每字节/每事件中断
  • DMA:大块传输,中断少
  • 三种模式取舍(实时性 / CPU 占用 / 代码复杂度)
  • 典型中断事件(START / TX_EMPTY / RX_FULL / STOP / NACK / ARB_LOST / TIMEOUT)
  • 关键问题:什么时候用 DMA?字节少时 DMA 反而慢,为什么?

10 I2C 错误处理与总线恢复

  • NACK 处理(从机不应答)
  • 总线挂死(BUSY 一直有效)成因
  • 9 个时钟脉冲恢复法(经典手法)
  • 从机拉低 SDA 不放的恢复
  • 时钟拉伸超时检测
  • 看门狗 + 总线复位
  • 上电复位 / 软件复位控制器
  • 关键问题:总线 BUSY 卡死,控制器软件复位无效,怎么办?

11 I2C Linux 驱动框架

  • i2c_adapter(控制器)/ i2c_algorithm(算法)/ i2c_client(从机)/ i2c_driver(驱动)
  • i2c_transfer / i2c_smbus_read_byte / i2c_smbus_write_byte
  • 设备树(i2c 节点 + 子节点 reg = 地址)
  • i2c-dev(用户态 /dev/i2c-N)
  • sysfs 接口
  • 关键问题:Linux 下怎么从用户态读写一个 I2C 传感器?

第四部分 · 应用实战层(落地与排查)

12 I2C 设备驱动实战

  • EEPROM(AT24C)读写驱动
  • 传感器(BMP280/MPU6050)读写与寄存器配置
  • OLED(SSD1306)显示
  • PMIC(RK8xx/AXP)配置
  • 多设备共总线设计
  • 与 RTOS 集成(互斥保护 / 任务级缓冲)
  • 关键问题:多任务同时访问 I2C,怎么加锁?

13 I2C 调试与排查

  • i2cdetect / i2cdump / i2cget / i2cset
  • 示波器/逻辑分析仪抓波形(START/ACK/时序)
  • 上拉电阻测量(万用表 + 示波器看上升沿)
  • 地址冲突排查
  • 总线电容测量
  • 常见误码模式(丢 ACK / 字节错位 / 帧错)
  • 关键问题:i2cdetect 扫不到设备,从哪查起?

14 I2C 排查手册与速查表

  • 故障决策树(不通 → 看电气 → 看地址 → 看时序 → 看恢复)
  • 常见故障速查表
  • 上拉电阻速算表
  • 时序参数速查表
  • 全系列要点回顾
  • 关键问题:一页纸能带去现场排查的清单是什么?

三、快速索引

按问题类型

你遇到的问题直接看
上拉电阻选多大[[02-I2C上拉电阻与总线电容设计]]
总线卡死 BUSY[[10-I2C错误处理与总线恢复]]
多主冲突[[05-I2C多主仲裁与时钟同步]]
i2cdetect 扫不到[[13-I2C调试与排查]]
速度上不去[[06-I2C速度模式与时序参数]] + [[02-I2C上拉电阻与总线电容设计]]
地址冲突[[07-I2C寻址与协议扩展]] + [[13-I2C调试与排查]]
Linux 怎么读写[[11-I2C Linux驱动框架]] + [[12-I2C设备驱动实战]]
波形看不懂[[04-I2C协议与时序详解]] + [[13-I2C调试与排查]]
从机拉低 SDA 不放[[10-I2C错误处理与总线恢复]]
跨电压域连接[[02-I2C上拉电阻与总线电容设计]]

按应用场景

场景重点篇
传感器采集(低速)01 / 04 / 11 / 12
EEPROM 配置存储04 / 11 / 12
多主系统05 / 08 / 10
高速 I2C(1MHz+)02 / 03 / 06
功能安全(AEGIX)10 / 14
Linux BSP11 / 12 / 13
RTOS 裸机08 / 09 / 12

四、学习建议

嵌入式视角:

  1. 快速过01-04(电气+协议基础,确认无盲区)
  2. 重点啃05/06/10(仲裁/时序/恢复——这是和"会用 I2C"的人拉开差距的地方)
  3. 必学11/12(Linux I2C 子系统, BSP 主场)
  4. 常备13/14(排查手册,工作触达回查)

对照学习法

概念I2C串口(UART)SPICAN
线数2(SDA/SCL)2(TX/RX)4+(MOSI/MISO/SCK/CS)2(CANH/CANL)
同步方式同步(共享 SCL)异步(各自波特率)同步(共享 SCK)同步(位填充)
拓扑多主多从总线点对点主从一主多从多主总线
电气OD 开漏 + 上拉RS232/485/TTL推挽(常 CMOS)差分
速度100k-3.4M9.6k-12M几十 M1M(FD 8M)
应答ACK/NACK无无ACK 位
主战场传感器/EEPROM/PMIC调试/BootloaderFlash/显示汽车/工业

✨ 感谢你的阅读 ✨

技术之路漫漫,分享是为了更好地交流。
如果本文的内容对你有启发,希望能得到你的支持:

👍 点赞|⭐ 收藏|👀 关注

如果你在调试过程中遇到了其他问题,
欢迎在评论区 💬留言,我们一起探讨。

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


版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/12 5:38:53

P1220 关路灯【洛谷算法习题】

P1220 关路灯 网页链接 P1220 关路灯 题目描述 某一村庄在一条路线上安装了 nnn 盏路灯,每盏灯的功率有大有小(即同一段时间内消耗的电量有多有少)。老张就住在这条路中间某一路灯旁,他有一项工作就是每天早上天亮时一盏一盏地…

作者头像 李华
网站建设 2026/10/12 5:37:55

基于Matlab/Simulink的有源电力滤波器APF仿真模型搭建与谐波治理指南

最近有个朋友拿着一张电能质量测试报告来找我,说厂里几台直流充电设备一开,进线电流总谐波畸变率直接飙到27%,不仅电容器柜里嗡嗡响,还偶尔触发保护误动。我一看波形,典型的“不控整流大电感直流侧”经典电流方波。我给…

作者头像 李华
网站建设 2026/10/12 5:37:27

从游戏整理到备份恢复:AnyPS5让PS5内容管理更高效

你有没有遇到过这样的情况:PS5买回来头一个月恨不得天天开机,游戏也囤了不少,等游戏热潮一过,就是“开机不知道玩什么,关机又觉得亏”。我自己的机器就是这么吃灰的,直到后来我决定不折腾硬件,只…

作者头像 李华
网站建设 2026/10/12 5:36:47

ArchLinux(二):图形界面美化(KDE Plasma)

前置操作 设置yay仓库 配置 archlinuxcn 源;这能让 pacman 直接从国内镜像下载预编译包,速度快很多。 编辑文件 /etc/pacman.conf 在最后添加上如下内容 [archlinuxcn] SigLevel Optional TrustedOnly Server https://mirrors.tuna.tsinghua.edu.cn/ar…

作者头像 李华
网站建设 2026/10/12 5:36:41

ShK Toxin;172450-46-3

基本性质中文名称:ShK 毒素,海葵 ShK 钾通道毒素CAS 号:172450-46-3单字母序列:RSCIDTIPKSRCTAFQCKHSMKYRLSFCRKTCGTC三字母序列:Arg-Ser-Cys-Ile-Asp-Thr-Ile-Pro-Lys-Ser-Arg-Cys-Thr-Ala-Phe-Gln-Cys-Lys-His-Ser-M…

作者头像 李华
网站建设 2026/10/12 5:35:02

MyBatis <sql>标签深度解析:从原理到面试

1. 先看一段重复到想吐的SQL:这个标签存在的理由后端开发做到三五年,面试桌上大概率会被问起 MyBatis。其他题多少能聊几句,唯独这种"看着很简单"的标签题,最容易暴露你是背过答案还是真在项目里用过。我见过不少候选人…

作者头像 李华