🏆本文收录于 《全栈 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 引出来。

你需要做三件事(按顺序):

  1. 确认你以前用 J-Link 连的时候到底用的是 SWD 还是 JTAG

    • 如果以前 J-Link 实际是 JTAG,那你现在换 CMSIS-DAP 却在 IAR 里走 SWD,就会出现你这张图的现象(读不到 DP IDCODE)。
    • 经验:R5 上 JTAG 的概率极大
  2. 确认板子调试口引脚(看原理图/丝印/接口定义)

    • SWD 至少需要:SWDIOSWCLKGNDVTref(目标电压参考)(可选 nRESET
    • JTAG 至少需要:TMSTCKTDITDOGNDVTref(可选 nTRST / nRESET
  3. 在 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 扫描不到

落地排查方式:

  1. 查芯片手册:是否支持 SWD、是否默认关 SWD、是否必须 JTAG

  2. 查安全/量产配置:是否设置了 JTAG/SWD disable

  3. 用以前能工作的 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 插件实现也可能有限

✅️问题预测(你接下来大概率会遇到的坑)

  1. 你一旦切到正确接口(JTAG)后,可能会遇到:

    • 能扫到链,但多核 core 选择不对(core0/core1)
    • SMP 需要 IAR 的特定工程/宏配置
  2. 如果是安全 SoC:

    • 上电后 debug 被关闭,只能 under-reset 连接
  3. 如果板子走线长/隔离器:

    • 需要把频率降到 50~200kHz 才稳定

✅️小结

你这个报错核心信息就是:IAR 通过 SWD 连不上(读不到 DP IDCODE)
最可能根因排序(从高到低)✅:

  1. 🥇 目标其实是 JTAG(或只引出 JTAG),你现在用 CMSIS-DAP 走 SWD
  2. 🥈 VTref/引脚/共地/频率/复位策略导致 SWD 握手失败
  3. 🥉 安全锁/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 -

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐