Linux I2C 调试三板斧:从 regmap 到逻辑分析仪
Linux I2C 调试三板斧从 regmap 到逻辑分析仪I2C 在嵌入式系统里像空气一样无处不在——Sensor 配置、EEPROM、PMIC、Tuning 参数全走 I2C。但 I2C 不出问题还好一出问题能卡你好几天。这篇文章不讲 I2C 协议基础直接讲调试实战。第一板斧I2C-tools工具集装一次受用终生# 扫描总线i2cdetect-y0# 读写寄存器i2cget-y00x30 0x10 w# 读 wordi2cset-y00x30 0x10 0xFF# 写 byte# dump 一段寄存器i2cdump-y00x30 b最常见的坑i2cdetect显示--地址被占用其实不一定说明设备坏了。有些 Sensor 在进入 streaming 状态后会屏蔽掉通用扫描命令需要用-r参数强制读。还有发现i2cget读出来全是0xFF——不是设备坏了是 I2C 总线上的上拉电阻焊错了。4.7K 换 2.2K 立马正常。第二板斧内核调试接口Linux 内核的 I2C 子系统提供了很多调试手段很多人不知道# 打开 I2C 调试日志echo0x0f/sys/module/i2c_core/parameters/irq_debug# 查看 I2C 适配器信息cat/sys/bus/i2c/devices/i2c-0/namecat/sys/bus/i2c/devices/i2c-0/speed# 查看设备树里配的设备cat/sys/bus/i2c/devices/0-0030/name更高级的打开内核 I2C 消息跟踪// 在驱动里加或改内核配置#CONFIG_I2C_DEBUG_BUSy#CONFIG_I2C_DEBUG_COREy开了之后 dmesg 会看到每次 I2C 传输的完整消息流——地址、长度、数据。在排查 NACK 或总线 Hang 问题时非常有用。第三板斧逻辑分析仪抓波形软件调试到极限了必须上逻辑分析仪。I2C 协议很简单总共就 SCL 和 SDA 两根线。但看波形时重点看三个地方1. 起始条件START ConditionSCL 高电平时SDA 从高→低跳变最常见的问题上拉电阻太大SDA 下降沿太缓导致从设备没识别到 START2. ACK/NACK第9个 SCL 时钟主设备释放 SDA从设备拉低表示 ACK连续出现 NACK 的三个原因按概率排序① 地址不对7位 vs 8位地址搞混了② 设备没上电③ 设备处于 busy 状态正在处理上一笔传输3. STOP Condition 后的总线状态SCL 高电平时SDA 从低→高跳变STOP 后 SDA 和 SCL 都应该被上拉到高电平如果 STOP 后 SDA 被拉到低电平 → 总线锁死了总线锁死Bus Lock是我遇到的 I2C 最恶心的 bug。原因是某个传输中途被中断了比如系统高负载时 I2C 中断被打断导致从设备还在等时钟主设备已经不发了。解决办法硬件层面SCL 上串联一个 GPIO检测到总线锁死时主动给 9 个时钟脉冲复位从设备软件层面I2C 传输加超时超时后 reset I2C 控制器踩坑实录Sensor I2C 配置失败分享一个案例——某款 Sensor 在批量生产时大约 3% 的模组 I2C 读 ID 失败。现象i2cdetect 能扫到设备地址读 16-bit 寄存器时前 50 次成功第 51 次开始返回 0xFF复位 Sensor 后恢复但传输 30-40 次后又挂排查过程先怀疑时序——加大clock-frequency从 400K 降到 100K没用开I2C_DEBUG_BUS看内核日志发现每次失败前有一笔「写 16-bit 地址 读 8-bit 数据」的传输耗时超过 10ms上逻辑分析仪抓波形发现 Sensor 在某些写入后需要 5-8ms 的「消化时间」如果这期间发新请求SENSOR 内部还在处理上一笔导致 ACK 丢失根因Sensor 的 OTPOne-Time Programmable校准区读取不能连续访问每次读之间需要至少 5ms 的 delay。修复在驱动里每次读 OTP 寄存器后加usleep_range(5000, 8000)。I2C 调试决策树总结故障最快诊断手段最可能根因设备扫不到量供电 看波形上拉电阻/虚焊间歇 NACK降速 抓波形总线电容过大/从设备忙数据全 0xFF量 SDA 电平总线锁死/从设备未初始化数据随机错开 CRC 检查信号完整性/走线过长做嵌入式这么多年I2C 的坑永远不是协议本身而是物理层和时序。

相关新闻

鸿蒙Flutter 页面过渡动画:默认动画与自定义动画实现

鸿蒙Flutter 页面过渡动画:默认动画与自定义动画实现

引言 在Flutter开发中,页面过渡动画是提升用户体验的重要手段。流畅的动画效果能够让应用看起来更加精致和专业。本文将深入探讨Flutter中的页面过渡动画机制,包括默认动画效果和自定义动画实现,帮助开发者掌握如何创建令人印象深刻的页面切换…

2026/10/3 5:11:17 阅读更多 →
多线程学习:线程与进程

多线程学习:线程与进程

线程和进程是什么 前言 在计算机科学中,进程(Process)和线程(Thread)是操作系统进行资源分配和调度的基本单位,也是理解并发编程的核心概念。 1 了解线程和进程的基础知识概念 2 理清楚线程和进程的区别…

2026/10/2 9:37:24 阅读更多 →
【Prometheus 】Prometheus + Docker 监控服务器CPU、内存完整实战

【Prometheus 】Prometheus + Docker 监控服务器CPU、内存完整实战

Prometheus Docker 监控服务器CPU、内存完整实战 承接上一篇 Java JVM 监控,这里分两套方案: node-exporter(标准方案):采集宿主机整机CPU、内存、磁盘、网络配套 Prometheus 配置、Grafana 面板、CPU/内存告警、Merm…

2026/10/2 2:55:23 阅读更多 →

最新新闻

落地页文案的10个转化技巧:用ai-design-skills写好标题公式与CTA

落地页文案的10个转化技巧:用ai-design-skills写好标题公式与CTA

落地页文案的10个转化技巧:用ai-design-skills写好标题公式与CTA 【免费下载链接】ai-design-skills 项目地址: https://gitcode.com/gh_mirrors/ai/ai-design-skills ai-design-skills 是一套面向 Claude Code、Cursor 等 AI 编程工具的落地页设计技能库&a…

2026/10/5 13:58:20 阅读更多 →
成都温江专业美术书法培训机构

成都温江专业美术书法培训机构

优奇艺美术教育,自 2009 年办学至今,十七年专注 3 至 16 岁儿童与青少年美术、书法美育。我们坚持全专职持证教师授课,所有老师长期深耕少儿艺术教育,懂专业,更懂孩子。课程由内部教研团队独立研发,体系完善…

2026/10/5 13:58:20 阅读更多 →
智能体推理性能优化:从硬件加速到可观测性的软硬协同之路

智能体推理性能优化:从硬件加速到可观测性的软硬协同之路

最近我朋友圈里聊得最多的消息,就是 d-Matrix 与 Gimlet Labs 的这次合作。如果你只是把它当成又一条“某某芯片公司与某某平台握手”的行业新闻,那确实没啥感觉;但如果你最近正在做 AI 智能体的推理性能优化,或者被智能体应用上线…

2026/10/5 13:58:20 阅读更多 →
插件机制全解析:从加载原理到故障排查实战

插件机制全解析:从加载原理到故障排查实战

说到 plugins,我第一反应不是某个具体软件,而是一连串又爱又恨的回忆。你可能也遇到过:打开一个工具,界面上弹出一行报错,说某个插件没有激活;或者安装了一个看起来很棒的插件,程序直接崩溃&…

2026/10/5 13:58:20 阅读更多 →
时钟MUX时序约束详解:从原理到实践避免时钟切换死机

时钟MUX时序约束详解:从原理到实践避免时钟切换死机

做后端时序收敛这么多年,每次看到时钟MUX约束报错,我基本都能猜到问题出在哪。时钟MUX(clock MUX)是芯片里最常见也最容易被低估的结构,而它的时序约束一旦写错,轻则CTS多长出几层buffer,重则芯…

2026/10/5 13:58:20 阅读更多 →
SpringBoot+Vue宠物健康顾问系统:从架构设计到前后端分离实践

SpringBoot+Vue宠物健康顾问系统:从架构设计到前后端分离实践

1. 项目概览:这个“宠物健康顾问”到底是什么 先说结论:这套SpringBootVue的宠物健康顾问系统,核心是做“宠物医院的轻量级数字化管理”。它不是一个花架子demo,而是把真实宠物门诊日常要干的几件事——宠物档案建档、在线问诊、疫…

2026/10/5 13:57:20 阅读更多 →

日新闻

马斯克杀回智能体战场,Grok 4.5万亿参数撑腰,Cursor接手数字白领项目:用TaoToken统一Key跑通多模型Agent工作流

马斯克杀回智能体战场,Grok 4.5万亿参数撑腰,Cursor接手数字白领项目:用TaoToken统一Key跑通多模型Agent工作流

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/5 0:00:22 阅读更多 →
AI编程工具插件机制详解:plugin.json配置与加载失败排查指南

AI编程工具插件机制详解:plugin.json配置与加载失败排查指南

1. 从“plugins”这个词说起:它到底在解决什么问题如果你最近在折腾 AI 编程工具,尤其是 Cursor、Codex CLI、Claude Code 这类带 CLI 的编辑器或命令行助手,那你大概率绕不开一个词——plugins。这个词本身不新鲜,从浏览器到 IDE…

2026/10/5 0:00:23 阅读更多 →
第26课:OpenClaw|日志审计与问题诊断:把日志链路改到 TaoToken 的排查清单

第26课:OpenClaw|日志审计与问题诊断:把日志链路改到 TaoToken 的排查清单

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/5 0:00:23 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/5 5:06:42 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/5 1:10:22 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/5 3:06:17 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 11:40:45 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 9:43:54 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 20:14:29 阅读更多 →