2. SWD接口硬件识别:PCB板级SWD接口查找、原理图SWD信号追踪、万用表测量SWDIO/SWCLK引脚

拿到一块陌生的板子,第一件事是什么?我个人的习惯是——先找调试接口。没有调试接口,你连芯片在跑什么都不知道,更别提安全分析了。SWD接口虽然只有两根线,但在PCB上找到它们,有时候还真得费点功夫。

这一节,咱们就聊聊怎么在硬件层面把SWD接口揪出来。说白了,就是三板斧:看板子、看图纸、拿表量。

2.1 PCB板级SWD接口查找:从外观特征入手

先说说最直观的方法——肉眼观察。SWD接口在PCB上通常有固定的“长相”。

经验之谈: 大多数ARM Cortex-M系列芯片的SWD接口,都会引出4个或5个引脚:SWDIO、SWCLK、GND、VCC(3.3V或1.8V),有时还会多一个RESET或SWO。

常见的PCB接口形式有这几种:

  • 2x5双排插针(10-pin):ARM标准调试接口,最常见。SWDIO和SWCLK通常在中间两列。
  • 2x3双排插针(6-pin):紧凑型设计,常见于小尺寸产品。
  • 单排4-pin或5-pin排针:低成本方案,引脚顺序不固定,需要查原理图确认。
  • 裸焊盘(Test Pad):量产产品为了防调试,可能不装排针,只留几个小焊盘。这时候就得用万用表或示波器去戳了。

我遇到过一块工业控制板,厂家把SWD接口伪装成了JTAG接口的物理形状,但实际只连了SWDIO和SWCLK两根线。你想想看,如果只看外形就按JTAG去接,肯定连不上。

注意: 有些产品会故意在SWD接口旁边放一个假的排针,或者把SWD信号混在多功能引脚里。别被外观骗了,一定要用万用表确认。

2.2 原理图SWD信号追踪:从芯片引脚到接口

如果有原理图,那事情就简单多了。但原理图有时候也不那么直观,尤其是大型项目,信号可能经过电平转换、缓冲器或者复用开关。

追踪SWD信号的步骤,我一般这么来:

  1. 找到目标MCU:先定位主芯片,通常是板上最大的那颗,或者带有ARM Cortex-M标识的。
  2. 查找SWDIO和SWCLK引脚:在芯片的引脚列表里搜索“SWDIO”、“SWCLK”、“PA13”、“PA14”(STM32系列)、“TMS”、“TCK”(有些芯片复用JTAG命名)。
  3. 追踪网络标号:从芯片引脚出发,沿着网络标号(Net Label)走。看它连到了哪里——是直接去了排针,还是经过了电阻、电平转换芯片、或者模拟开关。
  4. 检查串联电阻:很多设计会在SWDIO和SWCLK上串联一个0Ω或10Ω的电阻。这个电阻既是调试口的“保险丝”,也是安全分析的突破口——把它拆掉,调试接口就断了。
关键点: 原理图上SWDIO和SWCLK的网络名不一定叫“SWDIO”和“SWCLK”。我见过叫“DBG_DATA”、“TMS”、“PA13”、“JTCK”的。别死板,要灵活。

举个例子,这是一段典型的STM32F103原理图追踪逻辑:

// 芯片引脚 -> 网络标号 -> 连接路径
PA14 (SWCLK) -> SWCLK_NET -> R21 (10Ω) -> J1-4 (排针第4脚)
PA13 (SWDIO) -> SWDIO_NET -> R22 (10Ω) -> J1-2 (排针第2脚)
GND -> GND_NET -> J1-3, J1-5 (排针第3、5脚)
VCC_3V3 -> VCC_NET -> J1-1 (排针第1脚)

你看,只要顺着网络标号走,就能把整个路径摸清楚。我曾经遇到一个设计,SWD信号中间加了一颗电平转换芯片,结果调试器死活连不上,最后发现是电平转换芯片的使能脚没拉高。这种坑,原理图上一眼就能看出来。

2.3 万用表测量SWDIO/SWCLK引脚:实战确认

没有原理图怎么办?或者原理图跟实物对不上?那就得上万用表了。

万用表测量SWD接口,主要做三件事:找GND、找VCC、确认SWDIO和SWCLK。

2.3.1 找GND和VCC

先把万用表打到通断档(蜂鸣档)。

  • 找GND:黑表笔接板子的地(比如USB外壳、螺丝孔、大面积的铜箔),红表笔去戳怀疑是GND的引脚。蜂鸣器响了,就是GND。
  • 找VCC:万用表打到直流电压档(20V档)。黑表笔接GND,红表笔戳其他引脚。测到3.3V或1.8V的,就是VCC。
小技巧: 如果板子没上电,可以用万用表的二极管档测VCC和GND之间的压降。正常的话,正向压降在0.3V~0.7V之间(因为芯片内部有保护二极管)。如果短路了,那就别上电了。

2.3.2 识别SWDIO和SWCLK

SWDIO和SWCLK在静态下(芯片没进入调试模式),有一些电气特征:

引脚 静态电压(对GND) 对地电阻(二极管档) 备注
SWCLK 通常为高电平(VCC或接近VCC) 较大(内部上拉或浮空) 内部有弱上拉,默认高电平
SWDIO 通常为高电平或不确定 较大 双向数据线,状态不定
GND 0V 0Ω 直接接地
VCC 3.3V / 1.8V 较大(对地) 电源

实际操作时,我一般这么干:

  1. 板子上电,万用表测所有可疑引脚的电压。
  2. 找到电压为VCC的引脚(电源)和0V的引脚(GND)。
  3. 剩下的引脚里,电压接近VCC的那个,大概率是SWCLK(因为内部上拉)。
  4. 电压在0V到VCC之间飘忽不定的那个,就是SWDIO。
注意: 有些芯片的SWCLK在复位期间可能是低电平,或者被配置成了GPIO输出。这时候电压法就不准了。我建议你配合示波器看波形——用调试器发一个连接序列,SWCLK上应该能看到方波,SWDIO上能看到数据跳变。

2.4 知识体系:SWD接口硬件识别流程

下面这张图,是我自己总结的SWD接口硬件识别流程。从拿到板子到确认引脚,每一步都标清楚了。

SWD接口硬件识别流程 SWD接口硬件识别流程 拿到目标板 有原理图? 是 原理图信号追踪 否 万用表测量引脚 确认SWDIO/SWCLK 连接调试器,开始调试/安全分析 注意:部分芯片可能 禁用SWD,需先解锁

这张图把整个识别过程串起来了。你从“拿到目标板”开始,先问自己有没有原理图。有,就走绿色通道,追踪网络标号;没有,就走红色通道,上万用表。最终汇合到确认引脚,然后连接调试器。

嗯,这里要注意一点:有些芯片出厂时SWD接口是默认开启的,但有些(比如STM32L0系列)如果设置了RDP Level 1或Level 2,SWD就会被禁用。这时候你就算找到了引脚,也连不上。所以,硬件识别只是第一步,后面还有安全分析等着我们。

核心总结: SWD接口硬件识别,说白了就是“看、追、量”三个字。看PCB外观,追原理图信号,量引脚电气特性。这三步走完,SWDIO和SWCLK基本就跑不掉了。