JLink SWD接线翻车?别急,先看看这根线接对没 🛠️
你有没有经历过这样的时刻:
电脑上打开 J-Flash 或 Ozone,信心满满地点击“Connect”,结果弹出一个冷冰冰的提示:
❌ Cannot connect to target.
No device found.
Failed to measure up-time.
然后就开始怀疑人生——是 JLink 坏了?MCU 锁了?代码把调试口禁用了?还是……芯片根本没焊好?
别慌。先深呼吸一下,放下烙铁和万用表,听我说一句掏心窝子的话:
90% 的“无法连接”问题,其实都出在——线没接对。
尤其是当你从开发板换成自研板、或者换了个第三方下载器转接头之后,SWD 接线一乱,神仙也救不了。
今天咱们不讲虚的,就来聊聊那个看似简单却总让人栽跟头的问题: JLink 用 SWD 模式时,到底该怎么正确接线?哪些坑我们踩过一次就够了?
为什么 SWD 变成了主流?
在说接线之前,得先搞明白一件事:我们为啥现在几乎都用 SWD,而不是更早出现的 JTAG?
说实话,我刚入行那会儿,项目里清一色都是 JTAG——5 根线,TDI、TDO、TCK、TMS、nTRST,整整齐齐插上去,看起来特别“专业”。
但后来发现一个问题:很多小封装的 MCU(比如 LQFP48、QFN32),压根就没那么多引脚给你浪费!可调试又不能少,怎么办?
ARM 给的答案就是: Serial Wire Debug(SWD) 。
它只用两根线:
-
SWCLK
(时钟)
-
SWDIO
(双向数据)
就能完成程序下载、单步调试、寄存器读写等所有核心功能,甚至还能通过 SWO 实现 ITM 打印输出。
对比传统 JTAG 动辄 4~5 根信号线,SWD 不仅节省 PCB 空间,还降低了布线复杂度和干扰风险。虽然它不支持边界扫描测试(Boundary Scan),但对于绝大多数 Cortex-M 应用来说,完全够用。
所以现在的趋势很明确:
👉 新项目基本默认启用 SWD;
👉 老架构才保留 JTAG;
👉 很多厂商干脆直接把 JTAG 引脚复用给 GPIO,只留 SWD。
JLink 的 20-Pin 接口,真有那么“标准”吗?
说到连接,绕不开的就是那个熟悉的 20-pin ARM 接口 。两排 10 针,间距 2.54mm,插上去咔哒一声,仿佛一切就绪。
但问题来了——这个所谓的“标准接口”,真的统一吗?
答案是: 并不完全。
SEGGER 官方定义了一套引脚顺序,叫做 “Standard 20-pin Cortex Debug Connector” ,也被广泛称为 “JTAG/SWD 20-pin header”。但有些厂商为了兼容自家旧设备,或图省事自己改了定义,导致新手一通乱接,烧了都不知道自己错在哪。
所以我们必须以 SEGGER 官方文档为准 ,来看一眼这 20 个脚到底都是干啥的。
✅ JLink 20-Pin 引脚详解(俯视图,插头朝向自己)
| Pin | 名称 | 功能说明 |
|---|---|---|
| 1 | VTref | 目标板参考电压输入 —— 这是关键!JLink 靠它判断电平逻辑 |
| 2 | SWDIO/TMS | 数据线(SWD 模式下为 SWDIO) |
| 3 | GND | 地 |
| 4 | SWCLK/TCK | 时钟线(SWD 模式下为 SWCLK) |
| 5 | GND | 地 |
| 6 | RESET | 复位控制(低电平有效) |
| 7 | GND | 地 |
| 8 | NC | 未连接 |
| 9 | GND | 地 |
| 10 | SWO | 串行输出(用于 ITM trace 输出) |
| 11 | GND | 地 |
| 12 | NC | 未连接 |
| 13 | GND | 地 |
| 14 | NC | 未连接 |
| 15 | GND | 地 |
| 16 | NC | 未连接 |
| 17 | GND | 地 |
| 18 | VCC | JLink 向外供电(最大 200mA)⚠️ 输出!不是输入! |
| 19 | GND | 地 |
| 20 | KEY / 空缺 | 定位键(防反插设计) |
看到没?这里面藏着好几个“致命陷阱”。
最常见的五类接线错误,你中了几条?
别笑,下面这些错误我都亲手犯过,有的还是带团队时看着别人犯的……血泪教训总结如下👇
🔴 错误一:VTref 悬空 or 接错电压等级
这是最常见、也是最容易被忽略的一点。
你以为只要接了 SWDIO 和 SWCLK 就能连上?大错特错!
JLink 在初始化前会先检测 Pin 1 的 VTref 电压,以此决定后续通信的电平阈值。如果你把它悬空,JLink 会认为目标系统没有上电,直接拒绝连接。
📌 举个真实案例:
有个同事做了一个超低功耗项目,主控是 STM32L4,供电电压只有 1.8V。他把 VTref 接到了 3.3V 上,结果 JLink 判断电平异常,始终报“Target voltage too high”。
反过来,如果目标板是 3.3V,而你忘了接 VTref,JLink 默认按最低档处理,也可能通信失败。
✅ 正确做法:
- 必须将
Pin 1 (VTref)
接到目标板的主电源(通常是 MCU 的 VDD);
- 保证电压匹配,不要跨压连接;
- 若使用电平转换电路(如 TXS0108E),记得把 VTref 放在低压侧取样。
💡 小贴士:可以用万用表测一下 Pin 1 对地电压,确认是否等于你的系统电压。
🔴 错误二:GND 只接了一根,甚至没接牢
你说:“我接地了啊,你看不是连着吗?”
但问题是——你只接了一根 GND。
SWD 是高速数字信号(最高可达 50MHz),哪怕短距离传输,也需要良好的回流路径。单点接地容易形成地环路或引入噪声,严重时会导致采样错误。
更离谱的是有些人用杜邦线随便找了个“地”就接上了,结果那个“地”其实是浮空的滤波电容负极……
📌 实测经验:
曾经在一个客户现场,我们反复重试都无法连接,最后发现是 GND 线太细 + 插针松动,实测阻抗高达几欧姆!换一根粗线后瞬间连上。
✅ 正确做法:
- 至少连接
3~4 根 GND 线
(推荐 Pin 3、5、9、19);
- 使用双排杜邦线时,确保每排都有地线;
- PCB 设计阶段就要预留多个接地孔,避免长走线。
🔧 工程师私藏技巧:用万用表蜂鸣档测量 JLink 和目标板 GND 之间的通断,电阻应小于 0.5Ω。
🔴 错误三:SWDIO 和 SWCLK 接反了 😵💫
听起来像笑话?但在实际操作中真有人这么干。
特别是当你的目标板丝印没打清楚,或者用了非标准排针顺序时,很容易凭“位置感”瞎猜。
比如看到 Pin 2 和 Pin 4 相邻,就以为一个是 Clock 一个是 Data,随手一对接——完蛋,时钟进了数据脚,数据进了时钟脚,通信彻底混乱。
📌 曾经有个实习生把 SWCLK 接到了 STM32 的 PA13(本该是 SWDIO),然后问我:“为什么每次下载都要手动复位才能连上?”
我说:“因为你根本没连对。”
✅ 正确做法:
- 查看 MCU 手册,确认 SWD 引脚映射(如 STM32 的 PA13=SWDIO, PA14=SWCLK);
- 在 PCB 上清晰标注“SWDIO”、“SWCLK”;
- 使用不同颜色的杜邦线区分(建议灰色=SWDIO,白色=SWCLK);
- 万不得已可用飞线,但务必做好标记。
⚠️ 提醒:某些芯片允许重映射调试接口(如通过 AFIO 修改),但出厂默认是有固定位置的。
🔴 错误四:RESET 引脚不接,靠手动复位“碰运气”
这个问题特别典型:你不接 RESET(Pin 6),也能偶尔连上,但成功率忽高忽低。
为什么会这样?
因为很多 MCU 出厂时默认开启 SWD 接口,但一旦运行用户代码,可能会执行以下操作:
__HAL_RCC_DBGMCU_CLK_DISABLE(); // 关闭调试模块时钟
__HAL_AFIO_REMAP_SWJ_DISABLE(); // 禁用 SWJ 接口(包括 SWD 和 JTAG)
一旦发生这种情况,除非硬复位,否则 JLink 再也无法识别目标芯片。
而如果你接了 RESET 线,JLink 可以自动发送复位脉冲,在启动初期抢占调试权限。
📌 实战场景:
你在调试 bootloader,想在 application 中关闭 SWD 来防止逆向。这时候如果不接 RESET,下次再想连接就得拆代码、重新刷固件,非常麻烦。
✅ 正确做法:
- 务必连接
Pin 6 (RESET)
到 MCU 的 NRST 引脚;
- 添加 10kΩ 上拉电阻,确保复位稳定;
- 如需隔离,可用跳帽或拨码开关控制;
- 在 J-Flash 设置中勾选 “Connect under reset” 选项,提高连接成功率。
🔴 错误五:把 VCC 当成电源输入,反向供电烧 JLink 💥
这是最危险的一种错误。
注意看: Pin 18 是 VCC Output!
意思是:JLink 可以通过这一脚给目标板提供最多 200mA 的电流,方便你在没有外部电源的情况下进行调试。
但它 绝对不能作为输入端!
如果你的目标板已经有独立电源,还把这个脚连上去,轻则电压倒灌导致 JLink 异常,重则直接烧毁内部稳压电路。
📌 血的教训:
一位朋友在调试一块电池供电的小板子时,为了让 JLink 也能“取电”,就把他的主电源接到 JLink 的 VCC 脚……后果可想而知,JLink 再也没法识别设备了。
✅ 正确做法:
- 如果目标板已有电源 → 断开 Pin 18 或使用跳帽隔离;
- 如果目标板无电源 → 可以接上,但负载不得超过 200mA;
- 更安全的做法是:只接 VTref(Pin 1)获取电平参考,VCC 悬空或切断;
- 高级玩法:加一个理想二极管或 Power ORing 电路实现无缝切换。
实际工程怎么快速定位连接失败?
光知道错误类型还不够,你还得有一套系统的排查流程。
以下是我在多个项目中验证过的“七步诊断法”,照着走一遍,基本都能找到问题所在。
🔍 “无法连接”七步排查清单
| 步骤 | 检查内容 | 方法/工具 |
|---|---|---|
| 1️⃣ | 目标板是否上电? | 用万用表测 VTref 是否等于系统电压(如 3.3V) |
| 2️⃣ | GND 是否可靠共地? | 测量两端 GND 间电阻 < 1Ω |
| 3️⃣ | SWDIO/SWCLK 是否接反? | 对照原理图检查连线,必要时飞线测试 |
| 4️⃣ | MCU 是否处于死锁或复位状态? | 观察 NRST 电平,尝试手动复位后立即连接 |
| 5️⃣ | 调试接口是否被代码禁用? |
查看是否有
__HAL_AFIO_REMAP_SWJ_DISABLE()
类函数调用
|
| 6️⃣ | 是否启用了读保护(RDP)? |
使用 J-Link Commander 执行
unlock
解锁芯片
|
| 7️⃣ | 硬件本身是否损坏? | 更换 MCU 或换一台 JLink 交叉测试 |
其中第 6 步很多人不知道:即使接线全对,如果芯片开启了读保护,JLink 也会拒绝访问。
这时候你需要用命令行工具解锁:
JLinkExe
> Device = AUTO
> Unlock
它会自动识别型号并清除 RDP,恢复调试能力。
如何用 J-Link Commander 快速验证连接?
比起图形界面工具,我更喜欢用命令行工具来做底层诊断。
因为它反馈的信息更原始、更准确,不会被 IDE 层层封装掩盖真相。
试试这个经典组合:
JLinkExe
> Device = STM32F103C8 # 根据你的芯片填写
> Speed = 4000 # 先用低速测试
> Connect
如果一切正常,你会看到类似输出:
Connecting to target via SWD...
Found SW-DP with ID 0x1BA01477
Scanning APs... Found AHB-AP at AP0
CoreSight SoC-400 found
CPUID = 0x411FC231: Cortex-M3 r1p1
...
Connection established.
但如果出现这些关键词,就知道问题在哪了:
-
Could not find core in Coresight chain→ 接线错误或电源未上 -
Target voltage too low/high→ VTref 异常 -
Failed to measure up-time→ 通信失败,大概率 GND 或时钟问题 -
No device found→ 可能芯片损坏或调试口被禁
💡 进阶技巧:可以加上
-if SWD -speed 4000
参数直接运行:
JLinkExe -device STM32F103C8 -if SWD -speed 4000
适合写成批处理脚本,自动化测试产线连接状态。
设计阶段如何避免这些问题?
最好的排错,是在问题发生之前就预防。
作为硬件工程师,在画板子的时候就得为调试留足余地。
✅ 推荐设计实践
- 预留标准 2x5 2.54mm 排针 ,并明确标注引脚名称;
- VTref 直接连到 MCU 的 VDD 引脚 ,不要经过开关或 LDO;
- GND 多打几个过孔 ,方便测试点夹持;
- RESET 加 10kΩ 上拉 + 0.1μF 滤波电容 ,提升稳定性;
- SWD 引脚附近添加 TVS 二极管 ,防静电击穿;
- 可选:增加 LED 指示灯 ,接在 SWCLK 或 RESET 上,直观显示活动状态;
- 使用弹簧针(Pogo Pin)治具时 ,确保定位精准、压力均匀。
❌ 应该避免的设计雷区
- 自定义非标准接口顺序(比如把 VCC 放中间);
- 把 JLink 的 VCC 输出直接并联到主电源轨(可能引起倒灌);
- 在 SWD 引脚上串联大电阻或磁珠(影响信号完整性);
- 未做任何 ESD 防护,裸露引脚暴露在外;
- 把调试接口做成隐藏式(难维护、难测试)。
特殊情况处理:MCU 锁死了怎么办?
有时候你会发现,不管怎么接线,JLink 就是连不上,而且连
unlock
都无效。
这时候可能是以下几种情况:
🧩 情况一:读保护 Level 2 启用(RDP=2)
某些 STM32 型号支持 RDP Level 2,启用后会完全封锁调试接口,甚至连芯片 Flash 都无法读取。
此时唯一的解决办法是:
- 进入
Bootloader 模式
(BOOT0=1, BOOT1=0);
- 使用 ST-Link 或 USB DFU 方式擦除整个芯片;
- 或联系原厂申请“去激活密钥”(极少开放)。
⚠️ 注意:RDP=2 是不可逆的,慎用!
🧩 情况二:SWD 被永久禁用(熔丝位设置)
部分芯片(如 Nordic nRF 系列、Silicon Labs EFM32)可以通过编程熔丝位永久关闭调试接口。
这种情况下,除非重新烧录 Bootloader 或使用高压解锁,否则无法恢复。
🧩 情况三:PCB 短路 or 开路
虽然概率低,但也存在:PCB 走线断裂、焊盘虚焊、插座接触不良等问题。
建议:
- 用显微镜检查焊接质量;
- 用飞线绕过可疑节点测试;
- 使用 ICT 测试夹具批量筛查。
总结一下:记住这几条黄金法则 ✨
说了这么多,最后送你几句我常年挂在嘴边的话,保你少走弯路:
🟢
VTref 必接,且必须等于目标电压。
→ 它是 JLink 的“眼睛”,看不到电压就不干活。
🟢
GND 多接几根,别抠门。
→ 数字信号的地,就像高速公路的应急车道,越多越安全。
🟢
SWDIO 和 SWCLK 不能反,也不能换。
→ 它们不是情侣鞋,左右脚不能互换。
🟢
RESET 要接,不然你就得靠手按复位。
→ 自动化时代,谁还用手动?
🟢
VCC 是输出!输出!输出!重要的事情说三遍。
→ 给别人供电可以,别让别人反过来喂你“毒药”。
🟢
每次连接失败,先查线,再查电,最后看代码。
→ 别一上来就说“JLink 坏了”、“芯片废了”,大多数时候是你自己错了 😅
🛠️ 最后送大家一句来自 SEGGER 官方文档的经典忠告:
“The most powerful debugging tool is still a well-connected debugger.”
调试器再强大,也得先连得上才行。
希望这篇文章能帮你避开那些年我们一起踩过的坑。下次再遇到“无法连接”,不妨停下来问一句:
“嘿,我的 VTref 接好了吗?” 🤔
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
354

被折叠的 条评论
为什么被折叠?



