第二章:硬件接口识别——JTAG、UART、SPI、I2C 接口识别与测量

做嵌入式安全,第一关就是找到板子上的“门”。

我常说,拿到一块陌生板子,别急着上编程器。先拿万用表,把接口摸清楚。JTAG、UART、SPI、I2C,这四个接口是固件提取的命脉。你想想看,如果连调试口都找不到,后面再牛的分析工具也是白搭。

2.1 为什么硬件接口识别这么重要?

说白了,固件就藏在芯片的 Flash 里。但怎么把它读出来?

最直接的办法,就是通过芯片预留的调试接口。JTAG 可以让你直接控制 CPU,读取内存;UART 能给你一个交互 shell;SPI 和 I2C 则是外挂 Flash 的通信总线。

我遇到过不少新手,上来就对着芯片引脚一顿乱焊,结果烧了板子。嗯,这里要注意:先识别,后操作,这是铁律。

核心原则: 接口识别是固件提取的“侦察阶段”。用万用表测量电压、对地电阻,比用眼睛看丝印更可靠。

2.2 JTAG 接口识别

JTAG 是调试接口里的“大哥大”。它通常有 4 根信号线:TMS、TCK、TDI、TDO,再加上 VCC 和 GND。

怎么找?

  • 看排针: 板子上如果有 4 针、6 针、10 针、14 针或 20 针的排针,大概率是 JTAG 或 SWD。
  • 测电压: 上电后,用万用表直流电压档测引脚。VCC 引脚通常是 3.3V 或 1.8V。GND 引脚对地电阻接近 0Ω。
  • 找信号: TCK 引脚在芯片工作时会有脉冲信号,用示波器看最明显。没有示波器?用万用表频率档也能测到几十 MHz 的方波。

个人经验: 我习惯先找 GND。把万用表打到蜂鸣档,黑表笔接板子上的大铜皮(通常是 GND),红表笔扫排针。哪个引脚响了,就是 GND。找到 GND 后,VCC 就好找了——对地电压稳定的那个就是。

2.3 UART 接口识别

UART 是嵌入式设备的“救命稻草”。很多设备即使不开机,只要 UART 有输出,你就能看到启动日志。

UART 的特点:

  • 通常 3 根线:TX、RX、GND。有些还有 VCC。
  • TX 引脚在空闲时是高电平(3.3V 或 1.8V)。
  • RX 引脚电平不确定,但通常也是高电平。

测量方法:

  1. 上电后,用万用表测排针电压。如果某个引脚电压稳定在 3.3V 或 1.8V,且不是 VCC,那很可能是 TX。
  2. 用逻辑分析仪或示波器抓一下。如果看到一串高低电平变化的数据,那就是 UART 信号。
  3. 我曾经遇到一个路由器,UART 的 TX 引脚电压只有 1.2V。一开始以为是坏板子,后来发现是芯片内部电平转换的问题。嗯,别被电压值骗了。

避坑指南: 我曾经把 UART 的 TX 和 RX 接反了,结果终端什么输出都没有。记住:板子的 TX 接你的 RX,板子的 RX 接你的 TX。如果没输出,交换一下试试。

2.4 SPI 接口识别

SPI 是 Flash 芯片的“标配”接口。几乎所有外挂的 NOR Flash 或 NAND Flash 都用 SPI 通信。

SPI 的 4 根线:

信号 功能 典型电压
CS 片选(低电平有效) 3.3V / 1.8V
CLK 时钟 3.3V / 1.8V
MOSI 主出从入 3.3V / 1.8V
MISO 主入从出 3.3V / 1.8V

怎么找?

  • 找 Flash 芯片:板子上 8 脚或 16 脚的 SOIC 封装芯片,丝印通常是“25Qxx”、“W25Qxx”、“MX25Lxx”等。
  • 用万用表测 Flash 芯片的引脚:第 1 脚是 CS,第 2 脚是 MISO,第 5 脚是 MOSI,第 6 脚是 CLK。第 4 脚是 GND,第 8 脚是 VCC。
  • 上电后,CLK 引脚会有稳定的时钟信号。用万用表频率档能测到几 MHz 到几十 MHz 的频率。

核心技巧: 如果你不确定哪个引脚是 CS,可以测对地电阻。CS 引脚在空闲时是高电平,对地电阻通常较大。而 GND 引脚对地电阻接近 0Ω。

2.5 I2C 接口识别

I2C 只有两根线:SDA(数据)和 SCL(时钟)。它常用于连接传感器、EEPROM、RTC 等外设。

I2C 的特点:

  • 两根线都是开漏输出,需要上拉电阻。
  • 空闲时,SDA 和 SCL 都是高电平(3.3V 或 5V)。
  • 通信时,SCL 有稳定的时钟信号,SDA 有数据变化。

测量方法:

  1. 上电后,测排针电压。如果两个引脚都是 3.3V 或 5V,且不是 VCC,很可能是 I2C。
  2. 用示波器抓波形。SCL 是方波,SDA 是数据包。如果看到 9 个时钟脉冲对应 8 位数据加 1 位 ACK,那就是 I2C。
  3. 我遇到过一些设备,I2C 总线上挂了多个设备。用逻辑分析仪抓一下,能看到不同的设备地址。嗯,这有助于你判断哪个芯片在通信。

个人习惯: 我一般先用万用表测对地电阻。I2C 的 SDA 和 SCL 因为有上拉电阻,对地电阻通常在 1kΩ 到 10kΩ 之间。如果测到两个引脚电阻相近,且都是高电平,那基本就是 I2C 了。

2.6 实战:用万用表测量引脚

好了,理论说完了。咱们来点实际的。

步骤一:准备工具

  • 数字万用表(带蜂鸣档和频率档)
  • 示波器或逻辑分析仪(可选,但强烈推荐)
  • 镊子、杜邦线、排针

步骤二:找 GND

把万用表打到蜂鸣档。黑表笔接板子上的大铜皮或螺丝孔。红表笔扫所有排针。哪个引脚响了,就是 GND。记下来。

步骤三:找 VCC

上电。万用表打到直流电压档。黑表笔接 GND,红表笔扫排针。电压稳定在 3.3V 或 1.8V 的引脚,就是 VCC。记下来。

步骤四:找信号线

剩下的引脚,用万用表频率档测。如果有稳定的频率输出,那是时钟(CLK 或 TCK)。如果有不规律的电平变化,那是数据线(TX、MOSI、SDA 等)。

步骤五:验证

用示波器或逻辑分析仪抓波形。JTAG 的 TCK 是连续方波,UART 的 TX 是串行数据包,SPI 的 CLK 是突发方波,I2C 的 SCL 是 9 脉冲一组。看一眼波形,你就知道是什么接口了。

避坑指南: 我曾经遇到一块板子,JTAG 的 TCK 引脚对地短路。一开始以为是设计问题,后来发现是焊锡连锡了。用万用表测对地电阻,如果发现某个引脚对地电阻异常低(小于 10Ω),先检查焊接,别急着上电。

2.7 知识体系总结

为了让你更直观地理解这四种接口的识别逻辑,我画了一张流程图。

硬件接口识别流程图 拿到陌生板子 第一步:用万用表找 GND 和 VCC 第二步:测剩余引脚电压和频率 有频率信号? 可能是 JTAG、SPI 用示波器抓波形确认 可能是 UART、I2C 测空闲电平判断 确认接口类型,准备连接

这张图的核心逻辑很简单:先找电源和地,再测信号。有频率的,往 JTAG 和 SPI 方向查;没频率的,往 UART 和 I2C 方向查。最后用示波器一抓,真相大白。

2.8 写在最后

接口识别这活儿,说白了就是个体力活加经验活。我刚开始做的时候,也经常把 JTAG 和 SPI 搞混。后来发现,只要掌握了万用表的基本用法,再配合示波器看一眼波形,基本不会出错。

嗯,这里再啰嗦一句:别怕把板子搞坏。只要你不乱接 VCC 和 GND,一般不会烧芯片。大胆去测,小心去焊,慢慢就有感觉了。

本章核心: 万用表是硬件接口识别的“眼睛”。学会用它找 GND、VCC、信号线,你就能在 10 分钟内摸清一块陌生板子的接口布局。

专注资料整理