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 。