2、硬件选型与信号捕获:选择合适的逻辑分析仪

做自定义协议解码,第一步不是写代码,而是把信号抓回来。

信号都抓不准,后面解码全是白搭。我见过太多人花大把时间调软件,结果发现是探头没夹好。嗯,咱们先把硬件这关过了。

2.1 逻辑分析仪怎么选?Saleae 还是 DSLogic?

市面上主流的逻辑分析仪,说白了就两大阵营:Saleae 和 DSLogic。我个人两个都用过,说说真实感受。

对比项 Saleae (如 Logic 8/Pro 16) DSLogic (如 DSLogic Plus/U3Pro)
采样率 最高 500MS/s (Pro 系列) 最高 400MS/s (U3Pro 系列)
通道数 8 / 16 通道 16 通道为主
存储深度 取决于 PC 内存 (流模式) 板载 256Mpts (U3Pro)
软件生态 Saleae Logic 软件,闭源但好用 DSView (开源),支持第三方插件
价格 较贵 (Pro 系列上千) 性价比高 (几百元)
协议解码 内置常见协议,扩展性一般 开源,可自定义解码器

我的建议是:

  • 如果你主要做常见协议(I2C、SPI、UART),图省心,选 Saleae。它的软件确实流畅,开箱即用。
  • 如果你要折腾自定义协议,需要自己写解码器,我推荐 DSLogic。开源生态意味着你可以改底层代码,甚至把解码逻辑跑在 FPGA 上。

核心观点: 做自定义协议解码,DSLogic 的开放性和大存储深度更有优势。Saleae 适合快速验证,DSLogic 适合深度开发。

2.2 探针连接与信号完整性

选好仪器,接下来是探针。这一步很多人不重视,其实坑最多。

探针怎么夹?

  • 共地是命根子: 逻辑分析仪的参考地必须和被测板子的地连在一起。不共地,信号全是毛刺。我刚开始做项目时,有次抓 SPI 波形全是乱的,折腾半天发现是地线夹子松了。
  • 线要短: 探针线越长,天线效应越明显。高频信号(比如 10MHz 以上)会辐射出去,也会把噪声耦合进来。我习惯用杜邦线,但长度控制在 10cm 以内。
  • 信号线别扎堆: 多根信号线绑在一起,串扰会很严重。尤其是时钟线和数据线,尽量分开走。

信号完整性怎么保证?

  • 阻抗匹配: 逻辑分析仪输入阻抗一般是 100kΩ 左右,对被测电路影响不大。但如果你测的是高速信号(比如 50MHz 以上),要考虑探头电容的影响。
  • 施密特触发: 大部分逻辑分析仪内部有施密特触发器,能滤掉毛刺。但别完全依赖它,信号太脏的话,触发会误判。
  • 加个小电阻: 如果信号线上有振铃,可以在探头端串联一个 100Ω 电阻。这是我调试一个 20MHz 时钟信号时发现的,加电阻后波形干净多了。

警告: 千万不要用长飞线去抓高速信号!我曾经用 30cm 的杜邦线抓 50MHz 的时钟,结果波形上全是过冲和回勾,根本没法看。后来换成同轴电缆做的探头,问题才解决。

2.3 采样率与存储深度设置

这两个参数直接决定你能抓到什么信号,以及能抓多久。

采样率怎么设?

  • 奈奎斯特定理是底线: 采样率至少是信号最高频率的 2 倍。但实际中,我建议至少 4 倍。比如你的自定义协议时钟是 10MHz,采样率至少设到 40MS/s。
  • 为什么是 4 倍? 因为逻辑分析仪是数字采样,2 倍只能保证不丢脉冲,但脉冲宽度、边沿抖动这些细节根本看不出来。4 倍以上才能看到信号的真实面貌。
  • 别盲目开最高: 采样率越高,数据量越大。如果你抓的是低速信号(比如 1kHz 的按键),用 100MS/s 纯属浪费,还容易把存储填满。

存储深度怎么算?

  • 公式很简单: 存储深度 = 采样率 × 捕获时间。比如你设 100MS/s,想抓 1 秒的数据,就需要 100M 点的存储深度。
  • DSLogic 的 256Mpts 够用吗? 看场景。抓一个完整的 SPI Flash 读取序列(几百毫秒),256M 绰绰有余。但如果你想抓一个上电启动过程(几秒到几十秒),就得降低采样率。
  • Saleae 的流模式: Saleae 可以把数据实时流到 PC 内存,理论上无限长。但实际受 USB 带宽和 PC 性能限制,高速采样时容易丢数据。

我的经验: 调试自定义协议时,我一般先设一个较高的采样率(比如信号频率的 10 倍),抓一小段波形看看边沿质量。确认没问题后,再降低采样率去抓长序列。这样既保证了细节,又不会把存储撑爆。

实际设置步骤:

  1. 先估算你的协议时钟频率。比如你设计了一个 5MHz 的自定义总线。
  2. 采样率设为 50MS/s(10 倍)。
  3. 存储深度设为 50M 点(可抓 1 秒数据)。
  4. 触发方式设为上升沿或下降沿,触发通道选时钟线。
  5. 开始捕获,观察波形。如果信号有毛刺,检查探头连接;如果数据不够长,降低采样率或增加存储深度。

避坑指南: 我曾经调试一个 1MHz 的自定义协议,采样率设了 200MS/s,结果存储深度只有 10M 点,只能抓 50ms 的数据。协议的一个完整帧要 100ms,死活抓不全。后来把采样率降到 50MS/s,才抓到完整帧。记住:采样率不是越高越好,够用就行。

2.4 总结一下

硬件选型这块,说白了就是三个字:够用、稳定、开放

  • 选逻辑分析仪,看你要不要自己写解码器。要就 DSLogic,不要就 Saleae。
  • 探针连接,共地第一,线要短,信号要干净。
  • 采样率和存储深度,根据信号频率和捕获时长来算,别盲目追求高参数。

下一章咱们开始讲怎么用这些工具抓取自定义协议的波形,然后一步步把协议解码出来。嗯,到时候会用到很多实际案例,都是我踩过的坑。