📚 I2C 技术系列 · 持续更新中
本系列从 OD 开漏物理层一路打到 Linux i2c子系统,把"两根线"背后那套电气/协议/仲裁/恢复/驱动全拧成一根线。
👉 想系统追更,戳这里查看完整目录:
【I2C 技术系列 00】总目录
本篇定位:代码写完了,但跑起来有问题——地址扫不到、读写错、偶发挂死。本篇讲 I2C 调试工具链(i2c-tools / 示波器 / 逻辑分析仪)和故障定位方法论,从"现象"到"根因"的完整排查路径。读完你遇到 I2C 问题不会瞎试,有章法。
调试是经验,更是方法
I2C 问题千奇百怪:地址不对、上拉不够、电容超标、时序违规、EMI 干扰。瞎试三天不如按方法三小时定位。工具会用 + 排查有章法 = 资深 BSP 工程师的水准。
目录
- 一、调试工具链总览
- 二、i2c-tools 详解
- 2.1 i2cdetect —— 扫描总线
- 2.2 i2cdump —— dump 寄存器
- 2.3 i2cget / i2cset —— 读写单寄存器
- 2.4 i2ctransfer —— 灵活传输(新工具)
- 2.5 i2cdetect -l —— 列出总线
- 三、示波器抓波形
- 3.1 探头接法
- 3.2 看什么
- 3.3 典型波形
- 3.4 测量技巧
- 四、逻辑分析仪分析
- 4.1 优势
- 4.2 工具
- 4.3 解码步骤
- 4.4 看什么
- 4.5 协议解码示例
- 五、万用表与上拉测量
- 5.1 静态测量
- 5.2 上拉电阻验证
- 5.3 总线电容估算
- 5.4 上电时序检查
- 六、常见故障定位流程
- 6.1 地址扫不到(i2cdetect 无响应)
- 6.2 读写偶发错误
- 6.3 总线挂死(BUSY 一直 1)
- 6.4 数据错位
- 七、dmesg 与内核日志
- 7.1 看 I2C 相关日志
- 7.2 probe 日志
- 7.3 错误日志
- 7.4 动态调试
- 7.5 ftrace 看 I2C 调用
- 八、调试驱动技巧
- 8.1 加 dev_info 打印
- 8.2 regmap 调试
- 8.3 i2c-dev 调试裸寄存器
- 8.4 降速调试
- 九、关键问题 Q&A
- Q1:i2cdetect 扫不到,但示波器看到 START 了?
- Q2:i2cdump 出来全是 0x00 或 0xFF?
- Q3:示波器看到上升沿很缓,怎么办?
- Q4:逻辑分析仪解码地址对,但 ACK 总是 NACK?
- Q5:Linux 下 I2C 报 -121(-EREMOTEIO)是什么?
- Q6:偶发挂死,抓不到现场,怎么办?
- 十、实战案例
- 案例 1:地址 0x50 扫不到
- 案例 2:7bit vs 8bit 地址混淆
- 案例 3:400k 偶发数据错
- 案例 4:写 EEPROM 后读,偶发挂死
- 案例 5:多器件共总线,某器件偶发 NACK
- 案例 6:Linux 驱动 probe 失败
- 案例 7:EMI 导致偶发误 START
- 案例 8:DMA 读数据首字节错
- 十一、本篇小结与速查
- 核心要点
- 排查决策表
- 速查表
- 延伸阅读
- 参考资料
一、调试工具链总览
软件层: i2c-tools(i2cdetect/dump/get/set) ── 用户态快速验证 /sys/bus/i2c/ ── sysfs 查设备 dmesg ── 内核日志看 probe/错误 ftrace / debugfs ── 内核 I2C 调试 硬件层: 万用表 ── 测电压/上拉/通断 示波器 ── 看模拟波形(电平/上升沿/毛刺) 逻辑分析仪 ── 看数字时序(协议解码) 工具选择: 先软件(i2c-tools) ── 快速定位"通不通" 再硬件(示波器/逻辑分析仪) ── 深入"为什么不通"| 工具 | 解决什么 | 成本 |
|---|---|---|
| i2c-tools | 地址扫到没、寄存器读写对不对 | 零(软件) |
| 万用表 | 上拉有没有、电压对不对、短路没 | 低 |
| 示波器 | 波形电平、上升沿、毛刺、时序 | 中 |
| 逻辑分析仪 | 协议解码、时序参数、多通道 | 中 |
二、i2c-tools 详解
2.1 i2cdetect —— 扫描总线
i2cdetect-y0# 0 1 2 3 4 5 6 7 8 9 a b c d e f# 00: -- -- -- -- -- -- -- --# 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --# ...# 50: 50 -- -- -- -- -- -- -- -- -- -- -- -- -- -- --# 60: -- -- -- -- -- -- -- -- -- 68 69 -- -- -- -- --# 70: -- -- -- -- -- -- -- ---y:不交互确认0:总线号(/dev/i2c-0)- 扫描两种方式:快速写(默认)/ 读模式(
-r) --:保留地址(0x00-0x07, 0x78-0x7f)不扫UU:内核驱动已占用该地址
i2cdetect 会发真实 I2C 事务
i2cdetect 对每个地址发写请求看是否 ACK。某些器件被意外写会出问题(如 EEPROM 写到错地址)。功能安全场景慎用,或用-r读模式(只读不写)。
2.2 i2cdump —— dump 寄存器
# dump 0x50 的 256 字节寄存器i2cdump-y00x50# 指定模式i2cdump-y00x50 b# byte 模式(默认)i2cdump-y00x50 w# word 模式(16bit)i2cdump-y00x50 c# byte 模式(连续读)- EEPROM dump 出来是数据表
- 传感器 dump 看寄存器默认值,对比 datasheet
2.3 i2cget / i2cset —— 读写单寄存器
# 读 0x50 的 0x10 寄存器(字节)i2cget-y00x50 0x10# 读 wordi2cget-y00x50 0x10 w# 写 0xAB 到 0x50 的 0x10i2cset-y00x50 0x10 0xAB# 写 wordi2cset-y00x50 0x10 0xABCD w2.4 i2ctransfer —— 灵活传输(新工具)
# 写 2 字节(地址 0x10, 数据 0xAB 0xCD)到 0x50i2ctransfer-y0w3@0x50 0x10 0xAB 0xCD# 从 0x50 读 6 字节(先写 0x10 设地址,Sr 读)i2ctransfer-y0w1@0x50 0x10 r6w3@0x50:写 3 字节到 0x50r6:读 6 字节- 比 i2cget/set 灵活,支持任意 msg 组合
2.5 i2cdetect -l —— 列出总线
i2cdetect-l# i2c-0 i2c rk3x-i2c I2C adapter# i2c-1 i2c rk3x-i2c I2C adapter三、示波器抓波形
3.1 探头接法
- CH1 接 SDA,CH2 接 SCL
- 地夹接被测板的地
- 探头×10 档(减小寄生电容)
- 触发:SCL 下降沿或 SDA 下降沿(START)
3.2 看什么
| 检查项 | 正常 | 异常 |
|---|---|---|
| 电平幅度 | 高=VDD,低≈0 | 高不够(上拉弱/漏电) |
| 上升沿 tr | 满足模式要求(400k<300ns) | 太缓(Rp 太大/Cb 太大) |
| 下降沿 tf | <300ns | 太缓(驱动弱/线长) |
| SCL 高电平期间 SDA | 稳定 | 抖动(干扰) |
| START/STOP 边沿 | 清晰 | 模糊(上升沿缓) |
| ACK 拉低 | 第 9 拍 SDA 低 | 没拉低(地址错/无器件) |
3.3 典型波形
正常 START + 地址 + ACK:
SDA ‾‾‾‾‾‾\‾‾‾‾‾‾‾‾‾‾‾‾‾\___/‾‾‾\___/‾‾‾‾‾ ↓(START) 数据MSB... ACK(低) SCL ‾‾‾‾‾‾‾‾\_/‾\_/‾\_/‾\_/‾\_/‾\_/‾\_/‾‾‾ 高时SDA下降=START上拉不足(上升沿缓):
SDA ___/‾‾‾‾‾‾‾‾‾‾‾(缓慢上升,过冲不到 VDD) ↑ tr 太大,Rp 太大或 Cb 太大无 ACK:
SDA 数据发完,第9拍 SDA 没被拉低(保持高=NACK) → 地址错/器件不在/器件忙3.4 测量技巧
- 用示波器"协议解码"功能(I2C decode),直接显示地址/数据
- 抓偶发故障用"单次触发 + 长存储"
- 看毛刺用"峰值检测"模式
- 测 tr:光标卡上升沿 0.3VDD 到 0.7VDD
四、逻辑分析仪分析
4.1 优势
- 多通道(SDA/SCL/其他信号)
- 协议自动解码(I2C/SPI/UART)
- 长时间记录,找偶发问题
- 时序参数测量
4.2 工具
- 硬件:Saleae Logic / 逻辑分析仪(几十元的 USB 8 通道够用)
- 软件:PulseView / Saleae Logic / sigrok
4.3 解码步骤
- 接 SDA/SCL 两通道
- 采样率 ≥ 10× I2C 速度(400k 用 4MHz+)
- 选 I2C 协议解码
- 设置 SDA/SCL 通道
- 抓取后看解码的地址/数据/ACK
4.4 看什么
| 检查项 | 说明 |
|---|---|
| 地址 | 对不对(7bit vs 8bit 坑) |
| ACK/NACK | 每字节后 ACK 还是 NACK |
| START/STOP | 时序对不对,有没有误触发 |
| Sr | 读寄存器有没有正确 Sr |
| 时序参数 | tSU/tHD/tLOW/tHIGH 是否违规 |
| 拉伸 | SCL 有没有被从机拉低 |
4.5 协议解码示例
START ADDR: 0x76 (W) ACK DATA: 0xD0 ACK Sr ADDR: 0x76 (R) ACK DATA: 0x58 NACK ← 主机读最后一字节 NACK(正常) STOP- 这是 BMP280 读 ID(0xD0)读出 0x58 的完整事务
- 解码后一目了然,比示波器看波形快
五、万用表与上拉测量
5.1 静态测量
| 测量 | 方法 | 正常 | 异常 |
|---|---|---|---|
| VDD | 红表笔接 VDD,黑接地 | 3.3V/5V | 不对(电源问题) |
| SDA/SCL 静态电平 | 总线空闲时测 | VDD(上拉) | 低(短路/器件拉低) |
| 上拉电阻 | 断电测 SDA-VDD 电阻 | 4.7k/10k 左右 | 开路/短路/错值 |
| SDA-SCL 通断 | 测两线间 | 不通 | 短路(严重故障) |
| SDA/SCL 对地 | 测对地电阻 | 高阻(MΩ) | 低(短路/器件坏) |
5.2 上拉电阻验证
- 断电,万用表电阻档测 SDA 到 VDD
- 应读出 Rp 值(如 4.7k)
- 读 0:短路;读 ∞:上拉开路(没焊/断线)
5.3 总线电容估算
- 断电,示波器测上升时间 tr
- Cb = tr / (0.8473 × Rp)
- 例:tr=300ns, Rp=4.7k → Cb=75pF,正常
- tr=1μs, Rp=4.7k → Cb=250pF,偏大
5.4 上电时序检查
- 上电瞬间示波器看 SDA/SCL
- 从机不应在上电时拉低 SDA/SCL(影响主机初始化)
- 若从机上电慢,主机初始化要 delay
六、常见故障定位流程
6.1 地址扫不到(i2cdetect 无响应)
i2cdetect 无 0x50 ↓ 1. 硬件:器件在不在?焊接对不对? ├ 万用表测 VDD(有电?) ├ 测 SDA/SCL 静态电平(应 VDD) └ 测上拉电阻(有?) ↓ 2. 地址对不对? ├ 查 datasheet 地址(7bit) ├ 引脚配置位(A0/A1/A2)设对没 └ 7bit vs 8bit 坑(0x50 vs 0xA0) ↓ 3. 总线对不对? ├ i2cdetect -l 看总线号对不对 ├ 设备树 controller enabled? └ pinctrl/clock 配了没 ↓ 4. 示波器抓:发 START 时 SDA/SCL 动不动? ├ 动但无 ACK → 器件没响应(地址/焊接) └ 不动 → 控制器没输出(pinctrl/时钟)6.2 读写偶发错误
偶发读写失败 ↓ 1. dmesg 看错误类型(NACK? ARB_LOST? TIMEOUT?) ↓ 2. 示波器/逻辑分析仪抓偶发时刻波形 ├ 上升沿缓? → 上拉/电容问题 ├ 毛刺? → EMI/滤波 └ 拉伸超时? → 从机慢/异常 ↓ 3. 软件加重试 + 错误统计 ↓ 4. 排除:多任务并发?DMA cache?电压稳?6.3 总线挂死(BUSY 一直 1)
BUSY 卡死(10 篇) ↓ GPIO 切输入读 SDA/SCL ├ SCL=0 → 从机拉伸 / 短路 ├ SDA=0 → 从机拉低不放(9 时钟恢复) └ 都高 → 控制器假 BUSY(软件复位) ↓ 对应恢复手段6.4 数据错位
读出数据整体偏移/乱 ↓ 1. 逻辑分析仪看时序:START/地址/数据对不对 ↓ 2. 检查 Sr(读寄存器)对不对 ↓ 3. 检查采样点(SCL 高时 SDA 应稳定) ↓ 4. 加上层 CRC/校验,多次读比对 ↓ 5. 上升沿缓导致采样错?改上拉/降速七、dmesg 与内核日志
7.1 看 I2C 相关日志
dmesg|grep-ii2cdmesg|grep-ibmp280dmesg|grep-i"adapter"7.2 probe 日志
[ 2.345] rk3x-i2c ff150000.i2c: initialized [ 2.346] i2c i2c-0: adapter [rk3x-i2c] registered [ 2.350] bmp280 0-0076: supply vddio not found, using dummy regulator [ 2.360] bmp280 0-0076: registering I2C device- 看 probe 成功/失败
- 看 client 注册(i2c-0 上 0x76)
- 看驱动匹配
7.3 错误日志
[ 12.456] rk3x-i2c ff150000.i2c: unexpected NACK [ 12.457] bmp280 0-0076: failed to read chip id: -121 [ 12.458] bmp280: probe of 0-0076 failed with error -121- NACK(地址无应答)→ -EREMOTEIO(-121)
- 看错误码定位
7.4 动态调试
# 开 I2C core 调试echo1>/sys/module/i2c_core/parameters/debug# 或echo'file i2c-core-base.c +p'>/sys/kernel/debug/dynamic_debug/controlecho'file i2c-dev.c +p'>/sys/kernel/debug/dynamic_debug/controldmesg-w# 实时看7.5 ftrace 看 I2C 调用
echofunction>/sys/kernel/debug/tracing/current_tracerecho'i2c_*'>/sys/kernel/debug/tracing/set_ftrace_filterecho1>/sys/kernel/debug/tracing/tracing_on# 跑 I2C 操作cat/sys/kernel/debug/tracing/trace八、调试驱动技巧
8.1 加 dev_info 打印
staticintmy_probe(structi2c_client*client,...){dev_info(&client->dev,"probe start, addr=0x%02x\n",client->addr);intid=i2c_smbus_read_byte_data(client,REG_ID);dev_info(&client->dev,"chip id=0x%02x\n",id);if(id!=EXPECTED_ID){dev_err(&client->dev,"chip id mismatch\n");return-ENODEV;}...}8.2 regmap 调试
structregmap_configconfig={.reg_bits=8,.val_bits=8,.reg_format_endian=REGMAP_ENDIAN_NATIVE,.cache_type=REGCACHE_RBTREE,.num_reg_defaults_raw=ARRAY_SIZE(regs),.reg_defaults_raw=regs,};// regmap 自带 debugfs// /sys/kernel/debug/regmap/0-0076/// registers -- dump 所有寄存器// name// rangecat/sys/kernel/debug/regmap/0-0076/registers8.3 i2c-dev 调试裸寄存器
# 不写驱动,直接 i2c-dev 操作验证器件i2cset-y00x76 0xF4 0x27# 配 BMP280 ctrli2cget-y00x76 0xD0# 读 ID- 先 i2c-tools 验证器件 + 寄存器,再写驱动
- 驱动 probe 失败时,i2c-tools 是"绕过驱动"的验证手段
8.4 降速调试
&i2c0 { clock-frequency = <100000>; // 降到 100k 排查 };- 400k 出问题,降到 100k 看好不好
- 降速好了 → 信号完整性/上拉/电容问题
- 降速还不好 → 协议/器件问题
九、关键问题 Q&A
Q1:i2cdetect 扫不到,但示波器看到 START 了?
A:START 发了但无 ACK。原因:① 地址错(7bit/8bit 混淆);② 器件焊接虚/没贴;③ 器件上电没完成;④ 器件复位引脚没拉高;⑤ VDD 没给到器件。逐项排查。
Q2:i2cdump 出来全是 0x00 或 0xFF?
A:
- 全 0x00:可能地址错,读到全 0(总线被拉低)
- 全 0xFF:无 ACK,i2cdump 默认填 FF
- 确认地址对、器件在、能正常 i2cget
Q3:示波器看到上升沿很缓,怎么办?
A:tr 大说明 Rp 太大或 Cb 太大。
- 减小 Rp(如 10k → 4.7k)
- 减小总线电容(短线/少器件/分段 TCA9548A)
- 降速(给 tr 更多时间)
- 检查上拉是不是真的接了(虚焊)
Q4:逻辑分析仪解码地址对,但 ACK 总是 NACK?
A:地址发了但从机不应答。① 器件没上电/复位没释放;② 器件地址引脚配置错(A0/A1/A2);③ 器件不支持该地址模式(10bit 器件用 7bit 扫);④ 器件在休眠模式要先唤醒。
Q5:Linux 下 I2C 报 -121(-EREMOTEIO)是什么?
A:-EREMOTEIO(-121)是 I2C 子系统表示"从机 NACK"的典型错误码。地址 NACK(器件不在)或数据 NACK(器件异常)都会报。看 dmesg 具体日志区分。
Q6:偶发挂死,抓不到现场,怎么办?
A:
- 软件加错误统计 + 日志(记录每次错误类型/时间)
- 看门狗监控,挂死触发恢复并记录
- 逻辑分析仪长时间抓(循环触发 + 长存储)
- 排除规律(温度?电源?电磁干扰?)
- 故障注入测试(主动复现)
十、实战案例
案例 1:地址 0x50 扫不到
现象:i2cdetect 扫不到 EEPROM 0x50。
排查:
- 万用表测 VDD=3.3V(对)
- 测 SDA/SCL 静态=3.3V(对,上拉在)
- 示波器抓:START 发了,地址 0x50 发了,第 9 拍 SDA 没拉低(NACK)
- 查 EEPROM 焊接:发现 SDA 焊盘虚焊
- 补焊后正常
案例 2:7bit vs 8bit 地址混淆
现象:datasheet 写器件地址 0xA0,i2cdetect 扫不到 0xA0。
分析:0xA0 是 8bit 写地址(0x50<<1|0)。i2cdetect 用 7bit,应扫 0x50。
解决:用 0x50 扫,扫到。Linux 设备树 reg 也用 7bit。
案例 3:400k 偶发数据错
现象:400k 读 BMP280,偶发温度异常。
排查:
- 逻辑分析仪抓:上升沿 tr=500ns(400k 要求<300ns)
- 算 Cb:tr/(0.8473×Rp)=500ns/(0.8473×4.7k)=125pF(偏大,线太长)
- 减小 Rp 到 2.2k,tr 降到 230ns,正常
- 或降速到 100k
案例 4:写 EEPROM 后读,偶发挂死
现象:写 EEPROM 立刻读,偶发 BUSY 卡死。
分析(10 篇案例):EEPROM 写周期 5ms 内拉伸 SCL,控制器未配拉伸超时。
解决:配拉伸超时 + 写后 delay 5ms 再读。
案例 5:多器件共总线,某器件偶发 NACK
现象:EEPROM + BMP280 + OLED 共总线,偶发 BMP280 NACK。
排查:
- 算总线电容:3 器件 + 长线 = 150pF(偏大)
- 上拉 10k,tr=1.3μs(400k 不达标)
- 减上拉到 4.7k,tr=600ns(勉强)
- 或用 TCA9548A 分段,各段独立电容
案例 6:Linux 驱动 probe 失败
现象:BMP280 驱动 probe 报 -ENODEV。
排查:
- dmesg:chip id=0x00, expected 0x58
- i2cget 读 0xD0 也是 0x00 → 通信层就有问题
- i2cdetect 扫到 0x76 → 控制器 OK,器件应答地址
- 示波器:地址 ACK,但数据 NACK → 器件收到地址但读寄存器不响应
- 查 datasheet:BMP280 上电后需要 2ms 稳定才能读
- probe 加 delay 2ms 后再读,正常
案例 7:EMI 导致偶发误 START
现象:工控现场 I2C 偶发数据错,dmesg 报 ARB_LOST(单主不该有)。
分析:EMI 毛刺在 SCL 高时让 SDA 下降,被误识别为 START/仲裁。
解决:
- 增大控制器滤波长度
- PCB 加 EMI 抑制(屏蔽线/限流/地平面)
- 软件加 CRC 校验,错乱重读
案例 8:DMA 读数据首字节错
现象:DMA 读 BMP280,首字节恒错。
分析(09 篇):DMA 启动前没先发读请求命令位,I2C 没真正发读事务,DMA 搬的是无效数据。
解决:DMA 启动前先 PIO 发 N 个读请求命令(bit8=1),再启动 DMA 收。
十一、本篇小结与速查
核心要点
- 工具链:软件(i2c-tools/sysfs/dmesg/ftrace)→ 硬件(万用表/示波器/逻辑分析仪)
- i2c-tools:detect 扫地址 / dump 寄存器 / get-set 读写 / transfer 灵活传输
- 示波器看模拟(电平/上升沿/毛刺),逻辑分析仪看数字(协议解码/时序)
- 万用表测静态:VDD/SDA-SCL 电平/上拉电阻/通断
- 故障定位:现象 → dmesg 看错误类型 → 示波器/逻辑分析仪抓波形 → 根因
- 7bit vs 8bit 地址坑:datasheet 0xA0 实际 7bit 是 0x50
- 降速是排查信号完整性的利器(降速好了 = SI 问题)
- i2c-tools 绕过驱动直接操作,验证器件/寄存器
- regmap debugfs 可 dump 寄存器
- 偶发问题:软件统计 + 长抓 + 故障注入
排查决策表
| 现象 | 第一步 | 第二步 |
|---|---|---|
| 地址扫不到 | 万用表测电平/上拉 | 示波器看 START 有没有 |
| 读写偶发错 | dmesg 看错误码 | 逻辑分析仪抓波形 |
| 总线挂死 | GPIO 读 SDA/SCL | 9 时钟恢复(10 篇) |
| 数据错位 | 逻辑分析仪看时序 | 检查 Sr / 采样点 |
| 上升沿缓 | 测 tr / 算 Cb | 减 Rp / 降速 / 分段 |
| NACK | 确认地址/上电/焊接 | 示波器看 ACK 拍 |
| probe 失败 | dmesg 看错误 | i2c-tools 绕过驱动验证 |
速查表
| 想干啥 | 命令/方法 |
|---|---|
| 扫总线 | i2cdetect -y N |
| dump 寄存器 | i2cdump -y N 0x50 |
| 读寄存器 | i2cget -y N 0x50 0x10 |
| 写寄存器 | i2cset -y N 0x50 0x10 0xAB |
| 灵活传输 | i2ctransfer -y N w1@0x50 0x10 r6 |
| 看 client | ls /sys/bus/i2c/devices/ |
| 看日志 | dmesg | grep i2c |
| 看 regmap | cat /sys/kernel/debug/regmap/0-0076/registers |
| 降速调试 | 设备树 clock-frequency=<100000> |
| 测上拉 | 万用表电阻档 SDA-VDD |
| 测电容 | 示波器测 tr,算 Cb=tr/(0.8473×Rp) |
| 协议解码 | 逻辑分析仪 + I2C decode |
延伸阅读
- 【I2C 技术系列 10】I2C 错误处理与总线恢复 —— 故障恢复机制
- 【I2C 技术系列 12】I2C 设备驱动实战 —— 器件驱动调试
- [[14-I2C排查手册与速查表]] —— 现场速查
- 【I2C 技术系列 01】I2C 电气特性与物理层 —— 电平/上拉原理
- 【I2C 技术系列 02】I2C 上拉电阻与总线电容设计 —— Rp/Cb 计算
- 【I2C 技术系列 06】I2C 速度模式与时序参数 —— 时序参数判据
- 【Linux内核专栏 16】调试与性能 —— Linux 调试方法
参考资料
- Linux Documentation/i2c/dev-interface
- i2c-tools man pages
- Saleae Logic / sigrok 文档
- NXP AN282(I2C 故障诊断)
【I2C 技术系列 00】总目录 · 上一篇:[[12-I2C设备驱动实战]] ·下一篇:[[14-I2C排查手册与速查表]]
✨ 感谢你的阅读 ✨
技术之路漫漫,分享是为了更好地交流。
如果本文的内容对你有启发,希望能得到你的支持:
👍 点赞|⭐ 收藏|👀 关注
如果你在调试过程中遇到了其他问题,
欢迎在评论区 💬留言,我们一起探讨。
关注我,一起交流底层开发的那些事儿!🚀