2. 测试环境硬件基础:常用测试仪器、硬件接口与信号测量基础
做嵌入式测试,说白了就是跟硬件打交道。你写再好的代码,最终都要落到引脚电平、总线时序上。我刚开始带项目时,有个同事调了三天I2C,死活读不到传感器数据,最后发现是示波器探头的地线夹子没夹好——这种坑,踩过一次就记住了。
这一章,咱们把测试环境里最常用的几样家伙事儿捋一遍。不追求大而全,只讲你上工位后立刻要用的东西。
2.1 常用测试仪器
2.1.1 示波器
示波器是嵌入式工程师的眼睛。我个人习惯,工位上至少放一台4通道、带宽100MHz以上的数字示波器。为什么是100MHz?因为你要看的信号,比如SPI时钟、UART波特率,基频通常在几十MHz以内,100MHz带宽足够捕捉5次谐波,波形还原度已经可以了。
示波器最常用的几个操作:
- 自动设置(Auto Set): 快速看到波形,但别依赖它。自动设置的触发电平和时基往往不准。
- 触发模式: 边沿触发最常用。测串口时用下降沿触发,测SPI时钟用上升沿。
- 光标测量: 手动量周期、脉宽、上升时间。比自动测量参数更可靠。
- 协议解码: 现在中端示波器都带UART/SPI/I2C解码功能,省掉逻辑分析仪很多事。
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管好坏。
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Ω会拉不动)。
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。别接反,接反了没数据。
2.2.3 SPI
SPI是高速全双工总线。Flash、SD卡、LCD屏、传感器……很多外设都用它。4线制:SCLK、MOSI、MISO、CS(片选)。
测试SPI时,我一般先看三样东西:
- 时钟极性(CPOL)和相位(CPHA): 主从设备必须一致。模式0(CPOL=0, CPHA=0)最常用。
- 片选信号: 每次传输前CS拉低,传输完拉高。CS毛刺会导致数据错位。
- 时钟频率: 别超过从设备支持的最大值。有些廉价传感器只能跑1MHz,你给10MHz它直接罢工。
2.2.4 I2C
I2C是两线制(SCL、SDA),半双工,带地址寻址。EEPROM、温度传感器、RTC芯片……大量使用。
I2C测试的常见问题:
- 上拉电阻: SCL和SDA必须接上拉电阻(通常4.7kΩ)。没上拉,总线拉不高,波形像“爬坡”。
- 地址冲突: 同一条I2C总线上不能有两个相同地址的设备。用逻辑分析仪抓一下起始条件后的第一个字节,就能看到设备地址。
- 时钟拉伸: 从设备可以拉低SCL让主设备等待。如果主设备不支持时钟拉伸,通信会超时。
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 知识体系总览
下面这张图,把本章的核心知识点串起来了。你可以把它当成一张“测试环境硬件地图”,以后遇到问题,先看地图,再动手。
嗯,这一章的内容就到这儿。仪器、接口、测量方法,这三样东西是嵌入式测试的“三根柱子”。后面每一章都会用到它们。你先把这些基础打牢,后面调起bug来会顺手很多。