ARM仿真下载器
1、ARM Cortex系列仿真调试器
1.1、主流的调试工具
(1)J-Link
J-Link是最著名的ARM开发调试工具,J-Link由SEGGER公司生产。提供对市面上几乎所有ARM内核芯片的支持。目前最新版本的J-Link产品为V9,支持JTAG和SWD模式。并且对主要的IDE环境如KEIL、IAR都有良好的支持。优点很多,因此也是首选的调试工具。
(2)ULINK,通用的ARM JTAG工具ULINK
ULINK是ARM官方的调试工具,KEIL出品。ULINK也可以支持大多数的ARM芯片,对KEIL的支持非常好,是KEIL的默认调试工具。缺点是因为不支持IAR,影响了ULINK的推广。ULINK官方提供电路图等资料,属於半开放的,可以自做。
1.2、其它通用型工具
(1) OpenJTAG
OpenJTAG为开源的JTAG调试工具,功能强大,并且配合其他的开源软件工具可用於在Linux对ARM芯片进行调试,因此在一些社群中使用较多。因为采用FTDI+FPGA双芯片的架构,成本相对较高。
(2)J-link ARM-OB
因为SEGGER版本众多。其中有一些定制的版本,不带J-link模式而仅支持SWD模式。J-link ARM-OB最初是SEGGER给某个厂家的特殊版本。被破解后目前可以自制,成本约¥20。
ARM-OB因为不支持JTAG模式,而仅支持SWD模式,因此有些较早的ARM7内核MCU,并且不支持SWD模式的芯片,是不能够调试的。
(3)低成本的并口JTAG
并口JTAG的电路网上很多,目前因为电脑没有了并口的关系,处於淘汰阶段。但从成本上来说是最便宜的。较流行的一种要注意20PIN的接线,其中RTCK的接法。
1.3、定制版本和厂家的调试工具
(1)ST公司的ST-LINK
ST-LINK可以单独购买,也可以通过ST公司的开发板自带,Discovery系列的开发板价格最低价格不到¥100。板载的ST-LINK可以仿真ST公司的所有ARM芯片。
ST-LINK除支持ST公司的ARM MCU(M3内核的STM32F1、F2,M4内核的F4、F3以及M0内核的F0),还支持STM8系列。ST-LINK的版本目前为ST-LINK V2。虽然资料基本公开,但既然成本不高,就没必要自制。
(2)TI公司的Stellaris ICDI
TI的Stellaris ICDI用於调试Stellaris系列芯片。TI的开发板都自带的,采用FTDI2232芯片,并额外提供串口用於调试。也有少量产品使用LM3S的MCU代替FTDI2232仿真。
TI的ICDI调试工具支持LM3S系列Cortex-M3以及LM4F系列Cortex-M4内核的芯片。支持Keil、IAR以及自家的CCS调试环境。TI的LM3S811开发板原来是送的,不花钱,现在LM4F的Lanchpad通过官方论坛可以以低於¥100的价格买到。
(3)NXP公司的LPCXpresso
NXP的LPCXpresso开发板支持NXP的M0和M3系列MCU调试,板载的开发工具设计成与目标芯片分离,因此可用来对NXP的CORTEX-M0和M3调试。
目前LPCXpresso板载的调试目前必须与特定的LPCXpresso IDE软件配合,而不能配合使用KEIL和IAR。但因为是基与Eclipse开源项目,所以可以支持Linux环境。
与LPCXpresso相仿的国内的英蓓特和周立功也有NXP LPC1114芯片的开发板。
NXP的另一个支持环境是mbed,目前mbed也对Freescale的一些芯片提供支持。
(4) Nuvoton新唐的Nu-Link
目前新唐推出了M0内核的MCU,(M4内核的计划推出)开发板自带Nu-Link,用来调试自家的芯片。新唐科技的开发板型号很多,如果参加过中电网的线上座谈的话,手头应该会有了。开发板的价格未知,但厂商目前基本上是以送的方式再推广。
(5)Freescale的Freedom
飞思卡尔的Freedom系列开发板算很便宜,官方价格有些不到¥100,用於开发M0+系列的KinetisL系列。自带OPENSDA。
(6)CooCox的CoLink
也是采用FTDI2232芯片实现。属於少有的国内开源项目。提供完整的资料,可以自制。CoLink不仅支持CooCox IDE,也可以支持KEIL等环境,只是目前支持的芯片还比较少,并且大部分是M0内核的芯片。
(7)其他MCU厂商的调试工具
爱特梅尔 、EnergyMicro 、英飞凌 、亚德诺 、赛普拉斯 、芯科实验室 、富士通 、盛群 、瑞萨
2、常用的仿真器
2.1、J-Link
SEGGER公司的 J-Link是嵌入式开发领域常用的ARM调试器。 J-Link是为支持各种处理器内核芯片推出的USB主机接口的JTAG调试仿真器。可以配合多种主流的集成开发环境(免费的Eclipse,GDB,Segger Embedded Studio,IAR EWARM,ARM Keil等),支持所有ARM7/9/11, Cortex M/R/A, 8051, PIC32, PowerPC, RX和RISC-V内核芯片的调试仿真,操作方便、连接方便、简单易学是开发微处理器最实用的开发工具之一。
J-Link是SEGGER公司为支持仿真ARM内核芯片推出的JTAG仿真器。配合IAR EWAR,ADS,KEIL,WINARM,RealView等集成开发环境支持所有ARM7/ARM9/ARM11,Cortex M0/M1/M3/M4, Cortex A5/A8/A9等内核芯片的仿真,与IAR,Keil等编译环境无缝连接,操作方便、连接方便、简单易学,是学习开发ARM最好最实用的开发工具。产品规格:电源USB供电,整机电流 <50mA 支持的目标板电压 1.2 ~ 3.3V,5V兼容 目标板供电电压 4.5 ~ 5V (由USB提供5V) 目标板供电电流 最大300mA,具有过流保护功能 工作环境温度 +5℃~ +60℃ 存储温度 -20℃ ~ +65℃ 湿度 <90%尺寸(不含电缆) 100mm x 53mm x 27mm 重量(不含电缆)70g 电磁兼容 EN 55022, EN 5502 。
J-LINK仿真器目前已经升级到V9.50版本,其仿真速度和功能远非简易的并口WIGGLER调试器可比。J-LINK支持ARM7/ARM9/ARM11,Cortex M0/M1/M3/M4, Cortex A4/A8/A9等内核芯片,支持ADS、IAR、KEIL开发环境。V9.3版本较V8.0版本进一步提升了下载速度,最大下载速度提升到1 MByte/s。
JLINK是一个通用的开发工具,可以用于KEIL、IAR、ADS 等平台。速度,效率,功能都很好,据说是众多仿真器里最强悍的。
(1)J-LINK硬件版本
J-Link拥有多种型号如J-Link BASE、J-Link PLUS、J-Link ULTRA+、J-Link PRO等。我们常说的是J-Link V8、V9、V10版,指的是J-Link BASE的硬件版本。如何查看目前使用的J-Link是哪个型号及硬件版本呢?将J-Link连接到电脑,然后使用Segger提供的J-Link Commander工具来进行查看,如下图:
JLINK 从 V1 到 V4 是同等级别的,使用了16位的复杂指令集CPU作为控制器,不同版本之间仅仅是在固件和电路上有着一些小的改进。
但是从 V5 版开始,使用了 ARM7 作为主控制器,JTAG 接口最大速度一下提升到 12M,由于这个高速度,JLINK 的性能突飞猛进,尤其是用软件提供的无限断点功能非常好用,不再被 ARM 核的两个硬件断点限制搞得很难受了。
同是 V5 版的 JLINK 也有比较大的改动,V5.0 到 V5.2 是小小的调整。
V5.3 为 KICK-START 版本专门增加了一个电源供应功能,可以让简单的学习板无需外接电源就可以使用了。但是这个功能也仅仅是 KICK-START 版本才有,其它版本上没有这个功能。
而V5.4将原来挂在外面的5V电源CPU适配器装配到内部了,改动比较大。这样就可以直接调试5V的ARM了,不然买个小适配器电路板也要几百块,让用户亏死了。
从 V5.4 到 V5.9 似乎没有什么改动,因为手册都没有提到过,也就是说没有啥值得提的。而且新升级的固件也说可以支持ARM Cortex-M3的SW-DP、SWJ-DP两种调试模式,并且这个功能在V5.x系列上均可以支持。
V6.0 是为了适合低密度管脚 ARM 的调试来改进的。由于这类 ARM 的 JTAG 接口常常与 I/O 口合用,如果这些 I/O 被分配了 JTAG 功能以外的作用,则在每次用 JTAG 下载完数据后,必须要拔掉 JTAG 电缆,免得 JLINK 的 JTAG 接口输出电平干扰 CPU 的 I/O 工作。而V6.0新的改动就是让 JTAG接口可以进入高阻状态(和三态门功能一样),与用户的电路在电气上完全断开了,这样可以避免用户来回拔插JTAG电缆的动作,又方便又实用。
(2) J-LINK 固件
固件就是运行在J-Link内部的程序,官方会不定期发布新的固件。我们可以根据自己的需要来选择J-Link的固件。J-Link固件升级和J-Link驱动升级不是一个概念,升级固件是指更改J-Link内部运行的程序,而升级J-Link驱动是指更改PC端J-Link的驱动程序。并不是每升级一次J-Link驱动程序都需要升级一次J-Link固件。使用Segger提供的工具J-Link Commander可以查看固件版本。如下图:
升级固件可以通过J-Link Configurator来完成,如下图:
(3)J-LINK 驱动
J-Link驱动可以前往Segger官网下载。一般安装IDE时都会自带J-Link驱动程序,当从Segger官网下载最新的J-Link驱动程序并安装后, IAR中的J-Link的DLL不会更新为最新,这需要使用Segger提供的工具J-Link DLL Updater来完成这些软件自带的J-Link驱动程序的更新,如下图:
从图中可以得知IAR 8.41、IAR 8.22、MDK5、Tracealyzer 4、uC-Probe里面的J-Link DLL可以更新,只需要将这些软件勾选上,点击右下方的OK即可完成J-Link DLL在软件中的更新和升级。
2.2、ULink仿真器
ULINK是ARM/KEIL公司推出的仿真器,目前网上可找到的是其升级版本,ULINK2和ULINK Pro仿真器。ULINK/ULINK2可以配合Keil软件实现仿真功能,并且仅可以在Keil软件上使用,增加了串行调试(SWD)支持,返回时钟支持和实时代理等功能。开发工程师通过结合使用RealView MDK的调试器和ULINK2,可以方便的在目标硬件上进行片上调试(使用on-chip JTAG,SWD和OCDS)、Flash编程。
但是要注意的是,ULINK是KEIL公司开发的仿真器,专用于KEIL平台下使用,ADS、IAR下不能使用。
2.3、ST_Link
STlink只能用于STM32和STM8,不能用作其他厂家的产品。目前是半开源状态。CMSIS-DAP现在叫DAPlink了,是ARM公司的开源项目,兼容性也不错。Jlink是商业产品,正品价格比较高,但是兼容性和功能应该是最好的,Jlink支持RTT,RTT( Real Time Terminal)是SEGGER公司新出的可以在嵌入式应用中与用户进行交互的实时终端。J-link驱动4.90之后的版本都支持RTT。RTT既可以从MCU上输出信息、也可以向应用程序发送信息,由于其高速的特性,所以不影响MCU的实时性。RTT对于像SystemView这类系统分析工具来说非常重要。所以有条件的话还是购买Jlink正版仿真器,资金紧张或者想要开源的DAPlink,如果只用STM32开发,可以考虑ST-link。
ST-LINK是专门针对意法半导体STM8和STM32系列芯片的仿真器。ST-LINK /V2指定的SWIM标准接口和JTAG / SWD标准接口,其主要功能有:
编程功能:可烧写FLASH ROM、EEPROM、AFR等;
仿真功能:支持全速运行、单步调试、断点调试等各种调试方法,可查看IO状态,变量数据等;
仿真性能:采用USB2.0接口进行仿真调试,单步调试,断点调试,反应速度快;
编程性能:采用USB2.0接口,进行SWIM / JTAG / SWD下载,下载速度快;
2.4、CMSIS_DAP
CMSIS-DAP本身就是开源的,没有正版盗版的说法,推荐用CMSIS-DAP
3、JTAG和SWD接口
3.1、JTAG接口
JTAG(Joint Test Action Group,联合测试行动小组)是一种国际标准测试协议(IEEE 1149.1兼容),主要用于芯片内部测试。现在多数的高级器件都支持JTAG协议,如ARM、DSP、FPGA器件等。标准的JTAG接口是4线:TMS、 TCK、TDI、TDO,分别为模式选择、时钟、数据输入和数据输出线。 相关JTAG引脚的定义为:
TMS:测试模式选择,TMS用来设置JTAG接口处于某种特定的测试模式;
TCK:测试时钟输入;
TDI:测试数据输入,数据通过TDI引脚输入JTAG接口;
TDO:测试数据输出,数据通过TDO引 脚从JTAG接口输出;
JTAG协议在定义时,由于当时的计算机(PC机)普遍带有并口,因而在连接计算机端是定义使用的并口。而计算机到了今天,不要说笔记本电脑,现在台式计算机上面有并口的都很少了,取而代之的是越来越多的USB接口。所以,目前市场上已经很少看到它的身影了。
3.2、SWD接口
串行调试(Serial Wire Debug),应该可以算是一种和JTAG不同的调试模式,使用的调试协议也应该不一样,所以最直接的体现在调试接口上,与JTAG的20个引脚相比,SWD只需要4个(或者5个)引脚,结构简单,但是使用范围没有JTAG广泛,主流调试器上也是后来才加的SWD调试模式。
SWD和传统的调试方式区别:
SWD模式比JTAG在高速模式下面更加可靠。在大数据量的情况下面JTAG下载程序会失败,但是SWD发生的几率会小很多。基本使用JTAG仿真模式的情况下是可以直接使用SWD模式的,只要你的仿真器支持,所以推荐大家使用这个模式。
在大家GPIO刚好缺一个的时候,可以使用SWD仿真,这种模式支持更少的引脚。
在大家板子的体积有限的时候推荐使用SWD模式,它需要的引脚少,当然需要的PCB空间就小啦!比如你可以选择一个很小的2.54间距的5芯端子做仿真接口。
3.3、RDI接口
远程调试接口(Remote Debug Interface),是ARM公司提出的标准调试接口,主要用于ARM芯片的仿真,由于各个IDE厂商使用的调试接口各自独立,硬件无法进行跨平台的调试。现在众多的IDE厂家都逐步采用标准RDI作为ARM仿真器的调试接口,因此使跨平台的硬件调试成为可能。EasyJTAG由于使用标准RDI调试接口,因此在任何使用标准RDI接口的IDE调试环境中都可以使用,例如ARM公司的ADS1.2/IAR公司的EWARM 3.30 。