逻辑分析仪基础

核心工作原理

逻辑分析仪,说白了就是个数字信号的「录像机」。

我们平时用示波器看波形,看的是模拟电压的变化。但逻辑分析仪不一样,它只关心两个状态——高电平还是低电平,也就是逻辑 1 或逻辑 0。你想想看,对于 I2C 这种数字协议,我们最需要看的就是 SCL 和 SDA 两根线的电平跳变,以及它们之间的时序关系。

它的工作流程大致是这样的:

  • 探头接上被测信号
  • 内部比较器把模拟电压转换成数字电平(比如高于 2V 算 1,低于 0.8V 算 0)
  • 按照你设定的采样率,不停地抓取这些电平状态
  • 存入内存(也就是存储深度),然后显示到屏幕上

我在项目中遇到过不少新手,上来就问「为什么逻辑分析仪显示的波形是方波,没有毛刺?」其实不是没有毛刺,而是采样率如果不够高,那些窄的毛刺根本抓不到。这个我们后面细说。

逻辑分析仪数据采集流程 信号输入 模拟电压 比较器 电压→逻辑电平 采样 按采样率捕获 存储 存入存储深度 显示与分析 解码 I2C 协议 条件触发 从存储数据中定位 关键概念:采样率决定能抓到多窄的脉冲 存储深度决定能连续记录多长时间的波形

采样率——能不能抓到细节

采样率,单位是 S/s(样本/秒)。比如 100MS/s,就是一秒钟采样 1 亿次。

采样率越高,能捕获的信号细节就越丰富。 对于 I2C 总线,标准模式只有 100kHz,快速模式 400kHz,高速模式 3.4MHz。从频率上看似乎不高,但为什么我建议你采样率至少设到 50MS/s 以上?

原因在于:

  1. 信号上升沿和下降沿可能有毛刺或振铃,这些瞬态变化需要高采样率才能捕捉
  2. I2C 总线上可能存在很短的低电平脉冲(比如时钟拉伸时的特殊时序)
  3. 多机通信时的总线竞争,容易产生异常脉冲

经验公式: 采样率至少要达到目标信号最高频率的 5~10 倍。对于 400kHz 的 I2C,5 倍是 2MS/s,但我个人从没设这么低过。我通常直接开 50MS/s 或更高,宁可后期扔掉数据,也不能漏掉关键毛刺。

注意: 采样率不是越高越好。采样率越高,相同存储深度下能记录的时间窗口就越短。如果我想抓一个间隔 100ms 才出现一次的错误,高采样率反而可能让存储深度填满太快。

存储深度——能录多久

存储深度就是逻辑分析仪内部内存能存多少个样本点。单位是「点」或「样本」。比如 10M 存储深度,就是能存 1000 万个采样点。

举个例子你就明白了:

  • 采样率 100MS/s,存储深度 10M → 只能录 0.1 秒
  • 采样率 10MS/s,存储深度 10M → 能录 1 秒
  • 采样率 1MS/s,存储深度 10M → 能录 10 秒

所以我常说的一句话是:采样率和存储深度是一对冤家。你要在这两个参数之间找到平衡。

我处理 I2C 通信异常时,一般是这么做的:

  • 先用低采样率(比如 10MS/s)配合大存储深度,录一段长时间的总线活动
  • 观察出问题的大致位置之后,再用高采样率配合触发条件,锁定那个异常区域
  • 最后用 100MS/s 以上的采样率去抓细节毛刺

小技巧: 有些逻辑分析仪支持「分段存储」模式。我曾经调试一个 I2C 传感器,它的数据每 5 秒才更新一次。如果用普通模式,存储深度很快就被无用的空闲数据填满了。用分段存储,每段只记录有数据传输的那一小段,效率高得多。

其他关键参数

参数 说明 我对你的建议
通道数 同时能捕获多少路信号 I2C 只需要 2 通道(SCL+SDA),但多通道可以同时看中断、GPIO 等其他信号,方便定位因果关系
输入电压范围 可以检测的逻辑电平范围 3.3V 和 5V 最常见,有些逻辑分析仪支持 1.8V,注意匹配你的系统电平
触发功能 根据指定条件开始/停止捕获 I2C 触发条件包括:起始条件、停止条件、设备地址、数据匹配。这个功能太重要了,后面会专门讲
协议解码 硬件或软件解码协议 现在大部分逻辑分析仪都支持 I2C 协议解码,能直接显示地址、读/写位、数据和 ACK/NACK,省了很多手工数波形的功夫

综合考量——怎么选型

市面上的逻辑分析仪很多,从几十块钱的 USB 玩具到几万块的专业设备都有。我个人觉得,对于 I2C 调试来说:

  • 采样率至少 100MS/s(最好是 200MS/s 以上)
  • 存储深度至少 10M(如果能到 100M 更好,特别是调试 I2C 长数据包时)
  • 通道数 8 个起步(2 个给 I2C,其他的留给其他信号做关联分析)
  • 支持 I2C 协议解码,最好也支持触发

我曾经踩过一个坑: 用了一个便宜的 24MS/s 逻辑分析仪去调试 400kHz 的 I2C。表面上看采样率是信号频率的 60 倍,似乎够了。但实际抓到的波形,边沿全是台阶状,毛刺根本看不出来,更别提解码了。后来换了 200MS/s 的设备,一下就定位到了总线上的干扰问题。

动手实践——熟悉你的工具

在学习任何高级技巧之前,我强烈建议你先做一件事:

拿起你的逻辑分析仪,随便找个 I2C 设备(比如温度传感器、加速度计),连接好探头。然后:

  1. 试试用最低采样率采样
  2. 试试用最高采样率采样
  3. 观察同一个 I2C 数据包在两种采样率下的波形差异
  4. 看看存储深度满了之后发生了什么事——是自动停止还是覆盖旧数据

相信我,这个简单练习会让你对采样率和存储深度这两个参数有切身体会。我刚开始做嵌入式开发时,也没有条件用逻辑分析仪,只能靠示波器凑合用。但示波器的存储深度有限,看 I2C 协议非常吃力。后来第一次用逻辑分析仪看 I2C 波形,那种一目了然的感觉,简直打开了新世界的大门。

一句话总结本章: 逻辑分析仪就是数字信号的录像机,采样率决定画质细节,存储深度决定能录多长时间。这两个参数相互制约,你需要根据具体的调试场景灵活调整。