ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Atmel-ICE实测:AVR与SAM单片机调试器选型、接线与避坑指南

Atmel-ICE实测:AVR与SAM单片机调试器选型、接线与避坑指南 最近入手了一台Atmel-ICE折腾了几天把能想到的场景都试了一遍写一篇实测向的产品说明。简单说Atmel-ICE是Microchip官方出品的通用调试器/编程器用来把AVR系列和SAM系列单片机连到电脑上既能烧录程序也能在线调试、跑断点、看变量。对经常折腾AVR和SAM芯片的开发者来说这个工具基本绕不开。文章会从开箱硬件讲起再把Studio配置、命令行烧录、SWD/PDI/debugWIRE这些接口怎么选、常见坑怎么避都过一遍给准备入手或者已经拿到手还不太熟的人做个参考。1. Atmel-ICE是个什么定位的工具1.1 官方调试器产品线里的“中坚力量”Atmel被Microchip收购之后调试器产品线整体梳理过一轮。现在官方还在更新的硬件调试工具里Atmel-ICE排在中端位置比老的AVR ISP mkII、AVR Dragon功能全比高端的JTAGICE3更贴近普通开发者价格也在可接受范围内。它不是一个只能烧录的编程器而是一个完整的调试器支持在IDE里设置断点、单步执行、实时查看寄存器这些能力对定位嵌入式问题非常关键。老玩家应该记得以前Atmel的产品线很乱AVR ISP mkII管AVR编程JTAGICE3管AVR和SAM调试AVR Dragon带高压编程但速度慢手里没有两三台工具都不敢说自己搞AVR。Atmel-ICE的出现把这些需求收敛到了一台设备上AVR和SAM都支持编程和调试也都支持这也是我入手它的核心理由桌面不用堆一堆调试器了。1.2 基础版与完整版到底差在哪Atmel-ICE官方分成两个版本基础版Basic和完整版Full。硬件外形看起来几乎一样区别主要在于许可和功能授权。基础版支持SWD、PDI、TPI、debugWIRE、aWire和SPI编程平时用到的AVR、AVR XMEGA、SAM Cortex-M调试烧录都已经覆盖了。完整版在基础版之上增加了JTAG接口支持适合需要做Cortex-M3/M4全功能JTAG调试、或者调试部分AVR32芯片的场景。这里有个很多新手会忽略的点Atmel-ICE基础版和完整版在硬件上其实是一样的JTAG功能是通过软件许可控制的。如果你先买了基础版后面突然需要JTAG可以买升级许可把它变成完整版不需要重新买一台硬件。我个人的建议是纯做AVR和普通SAM开发基础版完全够用如果项目里有旧款芯片需要JTAG调试那就直接上完整版省得后面再补许可。1.3 一台设备覆盖多少种芯片和接口Atmel-ICE支持的目标芯片范围很广官方资料里明确列出的包含AVR全系ATtiny、ATmega、AVR XMEGA、SAM系列基于Cortex-M0/M0/M3/M4的芯片以及部分AVR32。接口类型覆盖了SWD、JTAG、PDI、TPI、debugWIRE、aWire、SPI几乎把Atmel时代留下来的专有调试接口都收进来了。对开发者来说这意味着什么就是你桌面上只需要留这一台Atmel-ICE就能搞定绝大多数AVR和SAM项目。比如你手头有一块ATtiny85想用debugWIRE调试另一块ATSAMD21想用SWD调试以前需要两个调试器换着插现在一台机器全搞定。而且官方还在持续更新固件新芯片出来后通常刷个固件就能识别不需要换硬件。2. 开箱与硬件细节2.1 包装里都有什么Atmel-ICE的包装比较简单我拿到手时盒子里有这几样东西Atmel-ICE主机一台、一条Micro-USB数据线、一条10-pin的扁平排线、一张快速入门说明卡。注意它没有附赠单独的电源适配器因为Atmel-ICE本身不需要外接电源供电走USB就行目标板则要自己供电。主机的做工中规中矩外壳是工程塑料体积比普通的U盘稍大一圈带上线缆之后桌面占用不大。正面有一个Micro-USB口旁边是两颗LED指示灯一颗指示USB连接状态一颗指示目标板连接状态。上手之前有个重要的认知要纠正Atmel-ICE的Micro-USB口只能连电脑不能给目标板供电也不带USB转串口功能不要指望它当串口调试工具用。2.2 两个目标接口要分清Atmel-ICE主机上其实有两个目标接口这是新手最容易弄混的地方。一个是10-pin、间距1.27mm的Cortex调试接口负责SWD和JTAG主要接SAM系列芯片另一个是6-pin、间距2.54mm的AVR调试接口负责PDI、TPI、debugWIRE、aWire以及部分SPI编程主要接AVR系列芯片。10-pin Cortex接口的引脚定义是标准的ARM调试口排列VTref、SWDIO/TMS、SWCLK/TCK、GND、TDO、TDI、nRESET都在上面。AVR 6-pin接口则是VTref、GND、nRESET、CLK、DATA这几个信号为主。接线之前一定先查手册确认引脚顺序不要凭印象乱插特别是SWDIO和SWCLK接反这种错误烧录时会直接报连接失败。2.3 电压适配范围与供电注意事项Atmel-ICE官方标称支持目标电压1.65V到5.5V基本覆盖了主流MCU的工作电压。它通过VTref引脚检测目标板电压并自动调整IO电平不需要手动跳线设置电压。这一点比老款的AVR ISP mkII方便很多以前还要确认调试器输出电压匹配目标板电压现在插上去测一下就自动适配了。但要注意VTref只是检测电压不是输出电源。目标板必须自己有供电而且最好和Atmel-ICE共地否则SWD或者PDI的时序信号没有参考电平连接会非常不稳定。我一开始图省事只接了SWDIO、SWCLK、GND结果Studio一直提示目标电压为0V后来发现目标板单独供电之后还要把GND接到调试器接上就一切正常了。3. 从连接到烧录环境配置与IDE设置3.1 安装驱动与Microchip StudioAtmel-ICE在Windows下使用需要安装Microchip Studio原Atmel Studio 7。安装包体积不小安装过程中会自动带上Atmel-ICE的USB驱动。装完驱动之后把Atmel-ICE插到电脑上设备管理器里应该会出现Atmel-ICE设备同时LED指示灯亮起。如果设备管理器里显示的是未知设备或者带感叹号多半是驱动没装好。最快的处理方式是重新运行一次Microchip Studio安装程序选择修复安装让它重新注册驱动。也可以在设备管理器里手动更新驱动指向Microchip Studio的安装目录下的driver文件夹。这个坑我遇到过当时换了一台新电脑只拷贝了绿色版工具没装Studio设备死活不认装完整版Studio后马上恢复。3.2 固件升级别跳过Atmel-ICE和电脑连接之后打开Microchip Studio时它会自动检测调试器固件版本。如果固件太旧Studio会弹窗提示升级。这个升级过程很快几秒到几十秒就完成升级过程中千万不要拔USB线或者断电否则调试器可能变砖。我已经遇到过两次升级提示基本是每次Studio大版本更新之后就会来一次。升级完成之后在Device Programming对话框里能看到调试器的固件版本号正常的固件版本都是官方正式版Beta版固件一般不太建议日常使用除非你手头的芯片特别新只有Beta固件才支持。另一个经验是升级固件前把所有打开的项目都关掉确保调试器没有被占用否则升级过程容易报错。3.3 首次连接并识别目标芯片硬件连好、Studio装好之后首次连接的目标操作路径是在Microchip Studio里打开Tools菜单选择Device Programming然后在Tool下拉框里选择Atmel-ICE在Device下拉框里选择你手头的芯片型号比如ATSAMD21G18A。Interface那一栏按实际接线选择SWD或PDI然后点击Apply。点完Apply之后可以点一下Read Device Signature如果一切都连接正常Studio会显示目标芯片的签名ID。这个签名ID是芯片出厂时就烧好的识别码不同型号的MCU对应不同值。如果读不到签名直接去目标板电压显示那里看一般会显示0.0V意味着VTref检测不到电压这时候要去查供电和接地。首次连接能够成功读出签名后面的烧录调试基本就顺了。3.4 命令行烧录atprogram和avrdudeMicrochip Studio自带的atprogram是命令行烧录工具路径在Studio安装目录下的atbackend文件夹里。用命令行烧录的好处是可以写脚本批量执行不适合打开IDE的时候用。基本用法是先用-t参数指定调试器类型atmelice用-i参数指定接口用-d参数指定芯片型号比如atprogram -t atmelice -i swd -d ATSAMD21G18A read -id atprogram -t atmelice -i swd -d ATSAMD21G18A program -f app.hex -c -v第一条命令读芯片ID第二条命令烧录hex文件并校验。如果芯片支持debugWIRE接口参数改成debugwire支持PDI的AVR XMEGA芯片就用-pdi。这条命令行其实很适合产线烧录场景写个批处理脚本就能让不熟悉IDE的同事一次跑通。另外开源烧录工具avrdude的新版本也加入了对Atmel-ICE的支持programmer类型有atmelice、atmelice_isp、atmelice_dw、atmelice_pdi等几种可以通过avrdude -c获取完整列表。不过avrdude对Atmel-ICE的支持更新节奏比官方Studio慢一些遇到新芯片型号时还是优先用atprogram。4. 实际调试操作记录4.1 用SWD调试ATSAMD21烧录LED闪烁程序我手头正好有一块基于ATSAMD21G18A的核心板就用它来实测SWD调试。接线比较简单Atmel-ICE的10-pin Cortex接口引出VTref、SWDIO、SWCLK、GND、nRESET五根线和目标板的对应引脚相连。SWD总共只需要这几根线比JTAG的4根信号线少速度也不会慢很多日常调试我一般优先用SWD。在Studio里建了一个简单工程直接生成GCC C的示例代码把板载LED的引脚配置成输出写一个毫秒级延时翻转电平的循环。编译通过后在Device Programming里选择hex文件点击Program按钮完成烧录。整个过程大概十来秒烧录完成后目标板LED开始闪烁。这里要夸一下Atmel-ICE的烧录速度虽然比不上J-Link Plus那种高速调试器但比老款AVR ISP mkII快很多日常迭代完全够用。4.2 用PDI调试AVR XMEGA芯片AVR XMEGA系列使用的是PDI接口在6-pin AVR接口上接线。需要接VTref、GND、CLK、DATA四根线这里特别注意CLK和DATA不能接反接反了Studio会报ID读取失败。我一开始是拿杜邦线随便接的结果反复报错后来用万用表对着原理图核对一遍才发现DATA和CLK交换了调整之后就正常识别。PDI接口有个好处是调试时占用的引脚少只需要两根信号线对于引脚紧张的AVR芯片很友好。烧录流程和SWD基本一致把Interface选成PDI读取签名后直接烧录。调试时一样可以设置断点、单步。整体体验下来Atmel-ICE对PDI的支持很成熟没有遇到奇怪的兼容性问题。4.3 debugWIRE模式的关键点如果你用的是ATtiny系列或者引脚特别少的AVR芯片PDI接口并不适用这时候要用debugWIRE。debugWIRE是Atmel的单线调试协议调试信号和复位引脚复用硬件上只要连VTref、GND、RESET三根线。需要注意debugWIRE会占用复位引脚所以启用调试功能后目标芯片的复位功能会变成调试接口普通ISP烧录方式会失效。想让芯片恢复正常复位功能需要通过Studio连接调试器后关闭debugWIRE功能或者对芯片执行全芯片擦除。这个特性在实际项目中容易被忽略我有一个板子烧完程序后想用普通编程器重新烧结果一直连接失败排查了半天才想起是因为debugWIRE还开着。4.4 断点、单步和变量监视Atmel-ICE在Microchip Studio里的调试体验和主流IDE比较接近。设置断点只要在代码行号旁边点击一下然后按F5运行程序执行到断点处会自动停下此时可以在Locals窗口查看局部变量值在Watch窗口添加需要监视的表达式也可以单步执行或者运行到光标处。用SWD调试时这种在线调试的响应速度比较快不过和J-Link相比会稍慢一些对于一般的Bug定位完全够用。实际调试中我最常用的是在中断处理函数里设置断点检查中断触发是否正常。有一次程序表现为随机死机找了一下午没头绪后来在HardFault_Handler里设了断点死机时果然停进去了然后通过调用栈和寄存器值定位到数组越界问题。这种问题如果只靠串口打印和猜测效率会低很多。这也是我坚持用硬件调试器而不是纯串口调试的原因。5. 常见问题排查与避坑指南5.1 连接失败先按这个顺序排查实际使用中连接失败是最常见的现象我把排查顺序整理成一个速查表。这里说的顺序很关键不要跳过前几步直接怀疑调试器坏了大部分问题都出在低级环节。现象可能原因解决方法Studio检测不到Atmel-ICEUSB线是纯充电线换一根带数据传输的Micro-USB线设备管理器显示未知设备驱动没装好修复安装Microchip Studio或手动指定驱动目录检测到调试器但目标电压显示0V目标板没上电或GND没共地给目标板供电接好GND线目标电压正常但读不到芯片签名SWDIO/SWCLK或PDI的CLK/DATA接反核对原理图交换两根信号线试一下提示无法进入调试模式debugWIRE占用复位引脚先关闭debugWIRE或执行全芯片擦除还有一个容易被忽略的Studio里选了错误的芯片型号。比如板子上实际是ATSAMD21E18A结果选成了ATSAMD21G18A虽然都是SAMD21系列但Flash和引脚资源不同有时能连上但烧录失败有时直接读不到签名。选型时一定要和板子实际丝印、原理图对应好。5.2 供电、线材和接触问题Atmel-ICE不能给目标板供电这是很多人上手时踩的坑。调试器上电后没有任何输出电源引脚它只是通过VTref检测目标电压从而调整IO电平。如果你接了一个只有MCU最小系统、没有单独电源的板子那不管怎么接线都连不上。正确做法是先给目标板用USB转串口模块或者稳压电源单独上电再把GND和调试器的GND接好然后才能正常检测到目标电压。线材方面SWD和PDI对线长比较敏感杜邦线超过20cm之后容易因为信号反射导致连接不稳定。我的经验是接线尽可能短10cm以内最佳。如果实在需要长线至少保证SWDIO和SWCLK两根本身不要绞在一起减少串扰。很多时候目标板能识别但烧录校验失败十有八九是线材和接触问题重新插拔一下排针或者换一根杜邦线就好了。5.3 与第三方IDE和命令行的兼容性坑不只用Microchip Studio很多人喜欢用PlatformIO、Arduino IDE或者其他第三方编译环境配合Atmel-ICE烧录。Arduino IDE可以通过配置文件把上传工具指向atprogram或者avrdude但要注意不同版本的Arduino核心对调试器支持程度不一样。实测下来用avrdude配合atmelice_isp给ATmega328P烧录是没问题的但给较新的芯片烧录时avrdude版本太旧会报“Device signature does not match”这时候换新版本avrdude或者直接用atprogram就能解决。PlatformIO里使用Atmel-ICE需要在platformio.ini里配置upload_protocol atmelice同时指定正确的接口类型。如果你的工程里有多个调试器同时插在电脑上Studio或者命令行工具偶尔会识别到错误的设备解决方法是拔掉不用的调试器只保留目标设备。批量烧录时我习惯用atprogram加目标板供电的稳定供电方式配合脚本执行产线效率比打开IDE点鼠标高不少。5.4 基础版用户容易忽略的限制如果你买的是Atmel-ICE基础版需要明确它不支持JTAG接口。虽然SWD已经能覆盖绝大多数Cortex-M调试场景但遇到老芯片或者特殊调试需求时JTAG仍然是必需的。我身边就有同事拿基础版去连接一个Cortex-M4开发板结果Studio提示不支持JTAG才知道自己买的是基础版。为了避免这种情况下单前先确认手头芯片需要哪个接口只做AVR和普通SAM就买基础版需要JTAG调试就上完整版。另外Atmel-ICE的驱动和固件更新策略比较激进每年会有几次固件更新。如果你在一个长期稳定的产线上使用担心新固件带来兼容性问题可以选择不升级继续用旧版本。我自己在开发机上保持最新固件因为要测试新芯片在产线上的那台则固定用老版本固件避免固件更新导致的意外行为变化。最后再分享一个我个人觉得很好用的习惯每次拿到一块新板子先用逻辑分析仪或者示波器看一下SWDCLK和SWDIO的波形。因为波形能直接反映接线是否正确、线材是否过长、目标板电压是否稳定。有几次连接不上就是通过观察波形发现CLK线上根本没有时钟信号最终定位到是目标板的SWCLK引脚被复用成了其他功能。这个技巧在排查疑难连接问题时非常管用比反复看报错信息高效得多。
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进