IAR用DAP调试多核,新买的DAP报错:Fatal error: Failed to connect to CPUSession aborted!...如何解决?
🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值 。
🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值 。
📌 特别说明:
文中问题案例来源于真实生产环境与公开技术社区,并结合多位一线资深工程师与架构师的长期实践经验,经过人工筛选与AI系统化智能整理后输出。文中的解决方案并非唯一“标准答案”,而是兼顾可行性、可复现性与思路启发性的实践参考,供你在实际项目中灵活运用与演进。
欢迎你 关注、收藏并订阅本专栏,与持续更新的技术干货同行,一起让问题变资产,让经验可复制,技术跃迁,稳步向上。
📢 问题描述
详细问题描述如下: IAR用DAP调试多核,新买的DAP报错如下,是板子不兼容吗?
芯片是cortex-R5架构,9.30版本的IAR,debugger选cmsis-dap,刚买了个dap,卖家说软件版本很新且支持R5。连接上去报错了,具体报错如下图所示:

此外还用了一个比较老的dap,报错也是一模一样,无法读取IDCODE。(板子之前一直用J-link调试,然后IAR官方说多核SMP只支持dap和i-jet)
全文目录:
📣 请知悉:如下方案不保证一定适配你的问题!
如下是针对上述问题进行专业角度剖析答疑,不喜勿喷,仅供参考:
✅️问题理解
你在 IAR 9.30 里选 CMSIS-DAP 去调试一颗 Cortex-R5(多核/SMP) 的芯片,刚买的新 DAP(以及一个老 DAP)都在连接阶段报同样错误:
CoreSight error: Cannot read IDCODE. No SWD access. Debugging is not possible.Failed to connect to CPU
你怀疑是不是“板子/芯片不兼容 DAP”。
结论先给你一句最可能的真相(非常关键)
这类报错 99% 不是“板子不兼容”,而是 IAR 这次在用 SWD 方式握手(读 DP IDCODE)失败:要么物理连线/供电参考/速度有问题,要么更常见的是——你的 Cortex-R5 目标实际只支持/只引出了 JTAG,而 IAR 的 CMSIS-DAP 驱动在当前配置下走的是 SWD(或你的 DAP 固件只支持 SWD)。所以它连 “IDCODE” 都读不到,直接在最早阶段挂掉。
✅️问题解决方案
🟢方案 A:先确认“是不是在用错调试接口(SWD vs JTAG)”——这是命中率最高的根因
你日志里写得很明确:No SWD access。而 Cortex-R5 在很多芯片/SoC 上默认走 JTAG,有的甚至压根不支持 SWD,或者板子只把 JTAG 引出来。
你需要做三件事(按顺序):
-
确认你以前用 J-Link 连的时候到底用的是 SWD 还是 JTAG
- 如果以前 J-Link 实际是 JTAG,那你现在换 CMSIS-DAP 却在 IAR 里走 SWD,就会出现你这张图的现象(读不到 DP IDCODE)。
- 经验:R5 上 JTAG 的概率极大。
-
确认板子调试口引脚(看原理图/丝印/接口定义)
- SWD 至少需要:
SWDIO、SWCLK、GND、VTref(目标电压参考)(可选nRESET) - JTAG 至少需要:
TMS、TCK、TDI、TDO、GND、VTref(可选nTRST/nRESET)
- SWD 至少需要:
-
在 IAR 里找“接口类型/传输方式”选项,强制切到 JTAG(如果有)
- 有些 IAR 版本/驱动对 CMSIS-DAP 只实现了 SWD(尤其是一些第三方 DAPLink 固件)
- 如果 IAR 的 CMSIS-DAP 插件里根本没有 JTAG 选项,那就基本坐实:
✅ 不是板子不兼容,而是 “IAR+CMSIS-DAP 这条链路无法用 JTAG”
这种情况下你只能用 IAR 支持的 i-jet(或 IAR 认可支持 JTAG 的探针/驱动组合)。
🔥关键点:你现在死在 “读 IDCODE” 这一步,这一步就是 SWD/JTAG 的最底层握手阶段;只要接口不对或探针不支持该接口,就必挂。
🟢方案 B:按“硬件握手必查清单”排掉 80% 低级坑(就算接口对也可能失败)
就算你确定目标是 SWD,也仍可能因为下面任意一点读不到 IDCODE(非常常见):
✅ 1)VTref(目标电压参考)一定要接
很多 CMSIS-DAP 探针需要读取 VTref 才会驱动对应电平;VTref 没接/接错会导致“看起来连上 USB 了,但根本没在正确电平上对话”。
👉 用万用表测:探针 VTref 脚对 GND 是否是 1.8V/3.3V/5V(应等于板子 IO 电压)
✅ 2)GND 必须共地且接触可靠
没共地=永远读不到 IDCODE。别笑,这真的是第一大坑😭
✅ 3)引脚映射是否正确(尤其 20Pin 转接线很容易接错)
-
ARM 20-pin 标准口里:
- TMS 在 SWD 模式下等价于 SWDIO
- TCK 在 SWD 模式下等价于 SWCLK
如果你按“JTAG 名字”接线,但 IAR 在跑 SWD,就会错得非常隐蔽。
✅ 4)降低调试频率(SWD/JTAG 时钟)
IAR 里通常有 Speed / Frequency 选项:
- 先拉到 100 kHz~500 kHz
- 稳定后再逐步提高
很多板子上电早期/时钟没稳/走线长,速度快了就读不到 IDCODE。
✅ 5)Connect under reset(上电复位下连接)
如果目标芯片上电后很快:
- 重映射了调试引脚复用(pinmux)
- 触发了安全机制/锁调试
- watchdog 迅速复位
就会导致你“偶尔能连/大多数连不上”。
👉 解决:让探针 拉住 nRESET 再连接(IAR 里一般叫 Connect under reset / Reset and halt)
🟡方案 C:如果芯片/SoC 有“调试口复用/安全锁”,需要先把 Debug 解锁或固定 strap
Cortex-R5 经常出现在汽车/工业 SoC 中,很多会有:
- 安全启动后关闭调试端口(Debug disable)
- eFuse/OTP 锁定 JTAG/SWD
- strap 引脚决定 JTAG 是否启用
- 多核模式下 DAP 访问需要先让某个域上电
表现就和你一样:读不到 IDCODE 或 AP 扫描不到。
落地排查方式:
-
查芯片手册:是否支持 SWD、是否默认关 SWD、是否必须 JTAG
-
查安全/量产配置:是否设置了 JTAG/SWD disable
-
用以前能工作的 J-Link:
- 看它连上时报告的接口类型、链路扫描到的 TAP 数量
- 如果 J-Link 也只能在 “connect under reset” 下连,那就是安全/启动流程导致
🔴方案 D:接受现实:很多“卖家说支持 R5”的 CMSIS-DAP 其实只支持 SWD,R5 多数要 JTAG
这个坑我见过太多次了:
- 卖家说“支持 Cortex-R5”,但它只是在协议层支持 ARM CoreSight SWD
- 你的 R5 目标可能根本没有 SWD(或者板子没引出 SWD)
- 于是无论新旧 DAP 都一样报错:No SWD access
如果你确认板子只有 JTAG,且 IAR 的 CMSIS-DAP 选项没有 JTAG,那么最稳妥路线就是:
- ✅ 直接上 IAR i-jet(IAR 官方支持 SMP 多核的优先路径)
- 或者找 IAR 明确支持的、且驱动支持 JTAG 的探针组合(注意不是“探针支持 JTAG”就行,还得 IAR 那个驱动支持!)
✅️问题延伸
1) “Cannot read IDCODE”到底是读哪个 IDCODE?
这里读的通常是 Debug Port(DP)的 IDCODE(SWD/JTAG 最开始的识别步骤)。
连 DP 都读不到说明问题在:
- 接口模式错(SWD/JTAG错位)
- 线没接对/没共地
- VTref 不对
- 时钟太快/信号差
- 目标端口被禁用(安全/strap)
也就是说:这不是“多核/SMP配置没写对”这种高层问题,而是更底层。
2) 为什么 J-Link 可以,DAP 不行?
因为:
- J-Link 对 JTAG/SWD 支持更全、容错强、还有更灵活的复位连接策略
- CMSIS-DAP(尤其 DAPLink 固件)经常 SWD-only,对 JTAG/多 TAP/复杂链路支持弱很多
- IAR 的 CMSIS-DAP 插件实现也可能有限
✅️问题预测(你接下来大概率会遇到的坑)
-
你一旦切到正确接口(JTAG)后,可能会遇到:
- 能扫到链,但多核 core 选择不对(core0/core1)
- SMP 需要 IAR 的特定工程/宏配置
-
如果是安全 SoC:
- 上电后 debug 被关闭,只能 under-reset 连接
-
如果板子走线长/隔离器:
- 需要把频率降到 50~200kHz 才稳定
✅️小结
你这个报错核心信息就是:IAR 通过 SWD 连不上(读不到 DP IDCODE)。
最可能根因排序(从高到低)✅:
- 🥇 目标其实是 JTAG(或只引出 JTAG),你现在用 CMSIS-DAP 走 SWD
- 🥈 VTref/引脚/共地/频率/复位策略导致 SWD 握手失败
- 🥉 安全锁/strap/调试口复用把调试端口关了
🌹 结语 & 互动说明
希望以上分析与解决思路,能为你当前的问题提供一些有效线索或直接可用的操作路径。
若你按文中步骤执行后仍未解决:
- 不必焦虑或抱怨,这很常见——复杂问题往往由多重因素叠加引起;
- 欢迎你将最新报错信息、关键代码片段、环境说明等补充到评论区;
- 我会在力所能及的范围内,结合大家的反馈一起帮你继续定位 👀
💡 如果你有更优或更通用的解法:
- 非常欢迎在评论区分享你的实践经验或改进方案;
- 你的这份补充,可能正好帮到更多正在被类似问题困扰的同学;
- 正所谓「赠人玫瑰,手有余香」,也算是为技术社区持续注入正向循环
🧧 文末福利:技术成长加速包 🧧
文中部分问题来自本人项目实践,部分来自读者反馈与公开社区案例,也有少量经由全网社区与智能问答平台整理而来。
若你尝试后仍没完全解决问题,还请多一点理解、少一点苛责——技术问题本就复杂多变,没有任何人能给出对所有场景都 100% 套用的方案。
如果你已经找到更适合自己项目现场的做法,非常建议你沉淀成文档或教程,这不仅是对他人的帮助,更是对自己认知的再升级。
如果你还在持续查 Bug、找方案,可以顺便逛逛我专门整理的 Bug 专栏:《全栈 Bug 调优(实战版)》。
这里收录的都是在真实场景中踩过的坑,希望能帮你少走弯路,节省更多宝贵时间。
✍️ 如果这篇文章对你有一点点帮助:
- 欢迎给 bug菌 来个一键三连:关注 + 点赞 + 收藏
- 你的支持,是我持续输出高质量实战内容的最大动力。
同时也欢迎关注我的硬核公众号 「猿圈奇妙屋」:
获取第一时间更新的技术干货、BAT 等互联网公司最新面试真题、4000G+ 技术 PDF 电子书、简历 / PPT 模板、技术文章 Markdown 模板等资料,统统免费领取。
你能想到的绝大部分学习资料,我都尽量帮你准备齐全,剩下的只需要你愿意迈出那一步来拿。
🫵 Who am I?
我是 bug菌:
- 热活跃于 CSDN | 掘金 | InfoQ | 51CTO | 华为云 | 阿里云 | 腾讯云 等技术社区;
- CSDN 博客之星 Top30、华为云多年度十佳博主/卓越贡献者、掘金多年度人气作者 Top40;
- 掘金、InfoQ、51CTO 等平台签约及优质作者;
- 全网粉丝累计 30w+。
更多高质量技术内容及成长资料,可查看这个合集入口 👉 点击查看 👈️
硬核技术公众号 「猿圈奇妙屋」 期待你的加入,一起进阶、一起打怪升级。
- End -
更多推荐


所有评论(0)