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