2. 测试环境硬件基础:常用测试仪器、硬件接口与信号测量基础

做嵌入式测试,说白了就是跟硬件打交道。你写再好的代码,最终都要落到引脚电平、总线时序上。我刚开始带项目时,有个同事调了三天I2C,死活读不到传感器数据,最后发现是示波器探头的地线夹子没夹好——这种坑,踩过一次就记住了。

这一章,咱们把测试环境里最常用的几样家伙事儿捋一遍。不追求大而全,只讲你上工位后立刻要用的东西。

2.1 常用测试仪器

2.1.1 示波器

示波器是嵌入式工程师的眼睛。我个人习惯,工位上至少放一台4通道、带宽100MHz以上的数字示波器。为什么是100MHz?因为你要看的信号,比如SPI时钟、UART波特率,基频通常在几十MHz以内,100MHz带宽足够捕捉5次谐波,波形还原度已经可以了。

选型建议: 如果预算允许,直接上200MHz带宽、1GSa/s采样率的型号。别买太便宜的玩具级示波器,测数字信号时上升沿会“圆”掉,你根本看不出时序问题。

示波器最常用的几个操作:

  • 自动设置(Auto Set): 快速看到波形,但别依赖它。自动设置的触发电平和时基往往不准。
  • 触发模式: 边沿触发最常用。测串口时用下降沿触发,测SPI时钟用上升沿。
  • 光标测量: 手动量周期、脉宽、上升时间。比自动测量参数更可靠。
  • 协议解码: 现在中端示波器都带UART/SPI/I2C解码功能,省掉逻辑分析仪很多事。
探头补偿: 每次换通道或换探头,先用示波器自带的1kHz方波校准信号做探头补偿。调成平顶方波再开始测。我见过有人拿未补偿的探头测了半小时,所有波形都带振铃,还以为是电路设计问题。

2.1.2 逻辑分析仪

示波器看模拟细节,逻辑分析仪看数字时序。说白了,逻辑分析仪只关心“0”和“1”,不关心电压到底是多少。它最适合抓总线协议、分析时序关系。

我常用的逻辑分析仪是24通道、100MHz采样率的USB款。够用,而且便宜。选型时注意两点:

  • 采样率: 至少是被测信号最高频率的4倍。测1MHz的SPI,采样率至少4MHz,建议10MHz以上。
  • 存储深度: 至少1M采样点。抓I2C的EEPROM读写序列时,存储深度不够会漏掉关键数据。
对比项 示波器 逻辑分析仪
信号类型 模拟 + 数字 仅数字(0/1)
通道数 2~4通道 8~32通道
采样率 高(GSa/s级) 中等(MSa/s级)
存储深度 通常较小 大(数M采样点)
协议解码 有限(高端型号支持) 丰富(几乎所有协议)
典型用途 看波形质量、噪声、上升沿 抓总线数据、分析时序

2.1.3 万用表

万用表是“三板斧”里的第一板。示波器看波形,万用表看静态值。我工位上常备两块:一块Fluke 17B+做日常测量,一块便宜的优利德专门测高压或容易烧表的地方。

嵌入式测试中万用表最常用的功能:

  • 通断蜂鸣: 查短路、查虚焊、查排线通断。效率最高。
  • 直流电压: 测电源轨、测GPIO电平、测参考电压。
  • 电阻: 测上下拉电阻、测线缆阻抗、测电机绕组。
  • 二极管压降: 判断二极管、三极管、MOS管好坏。
一个实用技巧: 测电源纹波时,万用表切换到AC档(交流电压),可以快速判断电源是否干净。如果AC读数超过几十mV,大概率需要加滤波电容。

2.2 硬件接口

接口是嵌入式系统的“神经”。你写驱动、调协议、烧程序,全得通过这些接口。下面这五个,是嵌入式测试里最常碰到的。

2.2.1 JTAG 与 SWD

这两个都是调试/烧录接口。JTAG是老祖宗,SWD是ARM搞的简化版。

  • JTAG: 5线(TCK、TMS、TDI、TDO、nTRST或nSRST)。支持链式菊花链,可以同时调试多个芯片。但线多,占引脚。
  • SWD: 2线(SWCLK、SWDIO)。ARM Cortex-M系列标配。速度够快,引脚少,我现在的项目基本都用SWD。

测试时注意:SWD的SWDIO引脚通常有内部上拉,但如果你板子上接了外部上拉电阻,阻值别太小(小于1kΩ会拉不动)。

我曾经踩过的坑: 有一块板子SWD死活连不上调试器,量了电压正常,换了线也不行。最后发现是SWCLK引脚上并联了一个100pF的电容,把时钟沿给“吃”掉了。去掉电容后秒连。所以,调试接口上别乱加电容。

2.2.2 UART

UART是嵌入式世界的“普通话”。几乎所有MCU都带,调试打印、AT指令、GPS模块、蓝牙模块……全用它。

UART测试要点:

  • 波特率匹配: 收发双方必须一致。常见的有9600、115200、921600。
  • 电平转换: MCU通常是3.3V TTL电平,PC串口是RS-232电平(±12V)。中间必须加MAX3232或CH340G之类的转换芯片。
  • 接线: TX接RX,RX接TX,GND接GND。别接反,接反了没数据。
调试小技巧: 用逻辑分析仪抓UART波形时,把采样率设成波特率的16倍以上。比如115200波特率,采样率设2MHz以上,解码成功率会高很多。

2.2.3 SPI

SPI是高速全双工总线。Flash、SD卡、LCD屏、传感器……很多外设都用它。4线制:SCLK、MOSI、MISO、CS(片选)。

测试SPI时,我一般先看三样东西:

  1. 时钟极性(CPOL)和相位(CPHA): 主从设备必须一致。模式0(CPOL=0, CPHA=0)最常用。
  2. 片选信号: 每次传输前CS拉低,传输完拉高。CS毛刺会导致数据错位。
  3. 时钟频率: 别超过从设备支持的最大值。有些廉价传感器只能跑1MHz,你给10MHz它直接罢工。

2.2.4 I2C

I2C是两线制(SCL、SDA),半双工,带地址寻址。EEPROM、温度传感器、RTC芯片……大量使用。

I2C测试的常见问题:

  • 上拉电阻: SCL和SDA必须接上拉电阻(通常4.7kΩ)。没上拉,总线拉不高,波形像“爬坡”。
  • 地址冲突: 同一条I2C总线上不能有两个相同地址的设备。用逻辑分析仪抓一下起始条件后的第一个字节,就能看到设备地址。
  • 时钟拉伸: 从设备可以拉低SCL让主设备等待。如果主设备不支持时钟拉伸,通信会超时。
排查I2C问题的标准流程:
1. 量SCL和SDA静态电平——应为高(上拉电压)。
2. 用示波器看起始条件——SCL高时SDA下降沿。
3. 抓地址字节——确认地址和读写位正确。
4. 看ACK/NACK——从设备在第9个SCL周期拉低SDA表示应答。
5. 检查停止条件——SCL高时SDA上升沿。

2.3 信号测量基础

仪器和接口都认识了,接下来聊聊怎么测、测什么。这部分是基本功,但很多人容易忽略。

2.3.1 电压测量

测电压看似简单,但有几个细节:

  • 参考点: 所有电压都是相对GND的。探头地线夹子要夹在离测量点最近的GND上,别绕远路。
  • 输入阻抗: 示波器探头通常有1MΩ或10MΩ输入阻抗。测高阻抗节点(比如ADC输入)时,用10MΩ档,否则探头会分压,测出来偏低。
  • 带宽限制: 测电源纹波时,打开示波器的20MHz带宽限制,滤掉高频噪声,只看电源本身的纹波。

2.3.2 时序测量

时序是嵌入式系统的命门。一个信号早到或晚到几纳秒,整个系统可能就挂了。

常用的时序参数:

参数 定义 典型测量方法
上升时间 信号从10%到90%幅值的时间 示波器光标或自动测量
下降时间 信号从90%到10%幅值的时间 同上
建立时间 数据在时钟沿之前稳定的时间 示波器余辉模式叠加多次触发
保持时间 数据在时钟沿之后保持稳定的时间 同上
抖动 时钟沿位置的短期变化 示波器直方图或专用抖动分析

2.3.3 噪声与干扰

嵌入式系统里,噪声是“房间里的大象”——你不想看见它,但它就在那儿。

常见的噪声来源:

  • 开关电源纹波: 频率等于开关频率(通常几百kHz),幅度几mV到几十mV。
  • 数字信号串扰: 高速时钟线靠近模拟信号线时,会通过寄生电容耦合过去。
  • 地弹: 多个输出同时翻转时,地线上产生瞬态压降。
  • 外部辐射: 电机、继电器、射频模块都会辐射噪声。
降噪三板斧:
1. 加去耦电容——每个IC的电源引脚放一个0.1μF陶瓷电容,靠近引脚放置。
2. 分开模拟地和数字地——用0Ω电阻或磁珠单点连接。
3. 屏蔽——敏感信号走内层,外层铺地。

2.4 知识体系总览

下面这张图,把本章的核心知识点串起来了。你可以把它当成一张“测试环境硬件地图”,以后遇到问题,先看地图,再动手。

测试环境硬件基础 - 知识体系总览 测试环境硬件基础 常用测试仪器 示波器 逻辑分析仪 万用表 硬件接口 JTAG SWD UART SPI I2C 信号测量基础 电压测量 时序测量 噪声与干扰 核心原则:先静态(万用表)→ 再动态(示波器)→ 最后抓协议(逻辑分析仪) 遇到问题不要慌,按这个顺序排查,90%的问题都能定位

嗯,这一章的内容就到这儿。仪器、接口、测量方法,这三样东西是嵌入式测试的“三根柱子”。后面每一章都会用到它们。你先把这些基础打牢,后面调起bug来会顺手很多。