SAMD21E16B-U使用Atmel ICE通过SWD连接报错无法重新编程调试
问题根因判断
首次烧写正常后续无法连接,90%以上概率是你烧入的用户代码将SAMD21的**SWD引脚(PA30=SWCLK、PA31=SWDIO)**配置为了其他功能(GPIO/外设引脚),芯片启动后直接切换了引脚功能,导致调试器无法通过SWD接口读取芯片IDR寄存器。
可行解决方案
方法1:手动实现复位下连接(无需修改配置)
- 用镊子或跳线将SAMD21的RESET引脚拉低到GND并保持
- 点击IDE中的调试/烧写按钮,在调试器发起连接请求的瞬间松开复位引脚
- 此时芯片刚退出复位状态,还未运行用户代码修改SWD引脚配置,调试器可以正常连接,连接成功后直接执行全擦除/重新烧写即可恢复
方法2:配置VisualGDB支持复位下连接
VisualGDB本身支持该功能,无需依赖STM32类的专属选项:
- 打开当前项目的调试属性页,找到调试后端配置项(默认一般为OpenOCD)
- 在「额外调试命令参数」栏中添加命令:
set CONNECT_UNDER_RESET 1 - 保存配置后直接触发调试,即可自动实现复位下连接
方法3:用官方工具直接擦除芯片
如果上述IDE操作失败,可以用Microchip官方工具直接擦除:
- 打开Microchip Studio(原Atmel Studio),进入「器件编程」界面
- 调试器选择Atmel ICE,通信接口选择SWD,目标器件选择SAMD21E16B-U
- 按住芯片复位引脚,点击「读取设备信息」,连接成功后直接执行「全片擦除」即可清空用户代码,恢复SWD功能
后续规避建议
- 非必要不要复用PA30、PA31两个引脚的功能,保留默认SWD属性
- 若业务必须使用这两个引脚,可在用户代码开头添加2~3秒的上电延时,延时结束后再执行引脚复用配置,后续烧写时在上电后立刻发起连接即可
内容的提问来源于stack exchange,提问作者Mary
相关产品推荐
相关产品推荐

