工欲善其事,必先善其器。調試器在嵌入式開發調試中的重要性不言而喻,單步、斷點和監察的效率遠高於串口打印。可是,調試器對於通常開發人員每每是一個黑匣子。今天咱們就來談談調試器的原理,順便把本身的幾類調試器接線和注意事項記錄下來,以便查找。我經常要面對幾個方案,而各個方案的調試器都不同,接線有時連本身都記不住。因此這個帖子應值得嵌入式開發工程師收藏。微信
1、嵌入式調試多樣性架構
咱們先來回想調試的場景,思考一下這幾個問題:debug
1. ARM開發環境有Keil、IAR、ADS等等,咱們發現這幾個平臺都能用同一個調試器去調試ARM。設計
2.一個調試器能夠調試多種不一樣型號的CPU,包括STM32控制器和高端的處理器。3d
3.一個調試器有時接20個pin的JTAG接口,有時接4個pin的SWD接口。調試
4.開發環境KEIL不只支持ARM調試,還支持51單片機調試。blog
5.若是本身研發了一顆SOC芯片,並在JTAG的基礎上增長一些定製的功能,又該如何實現?接口
2、JLink調試原理資源
OK,咱們來分析一下JLINK的調試架構。咱們都知道,JLINK是調試ARM體系的。開發
網上的資料有時舊了,有時抄來抄去出錯了。咱們就以官方的版本爲例來講明。咱們安裝了JLINK驅動後,會在Doc\Manuals目錄有一個文件《UM08001_JLink.pdf》,這個文件就是Jlink的官方文檔資料。
咱們用這個架構圖來一一解釋上一節的問題,解開疑惑。
1. 對於第一個問題,JLINK定義了一個軟件調試層面的RDI接口標準,即Remote debug interface. Keil、IAR、ADS這些開發環境按照RDI標準進行定製,便可以支持JLINK調試。RDI底層使用USB傳輸,固然,其餘硬件接口也是能夠的。
2. 對於第三個問題,ARM體系原先是支持JTAG硬件調試接口的,隨着cortex系列增長SWD調試規範,如今愈來愈多的調試器選擇SWD接口。其接線少,速率高,也比較穩定。JTAG 20個口太佔用pin資源了。JLINK V6開始支持SWD,如今V8支持已經足夠好了。
3. 對於第二個問題,不論是低端控制器,仍是高端處理器,調試接口規範都是ARM體系的標準內容。ARM CPU原生支持JTAG/SWD調試協議接口。
OK,那JLINK這個角色是作什麼的?
-----將RDI接口協議轉換爲JTAG/SWD接口協議!!!
例如,IDE上能夠設置一個斷點,那IDE會使用RDI的設置斷點的API,而JLINK在實現這個API裏面,就轉化爲JTAG/SWD標準規範裏面的設置斷點功能,並經過JTAG/SWD硬件接口輸出到ARM CPU上。
3、IDE的調試開發
第四個和第五個問題都涉及到IDE。如何回答這兩個問題?
1. 從JLINK架構來看,調試包括:IDE->遠程調試接口->調試器->硬件調試接口->CPU。
2. 對於KEIL支持51單片機,調試器必需要支持51CPU的ISP調試規範。51單片機的調試彷佛沒有一家像JLINK那麼有影響力的調試廠商。也許是由於51調試器至關簡單吧,淘寶30塊左右就能買到。
那如今就剩下遠程調試接口這個環節了,這個問題解決了,就把第五個問題也解決了,由於不論是通用的SOC,仍是定製的SOC,CPU核心都是一致的,要麼是ARM,要麼是MIPS,要麼51等等。每種CPU在其體系標準裏面就決定了硬件調試規範了。要想調試CPU,其調試器必需要將上層的要求轉化爲符合其支持的硬件調試規範。
那麼,咱們來從新思考IDE的設計。IDE在立項研發的時候顯然但願能支持到不一樣體系的CPU,不然不是做死本身嗎?因此,咱們能夠想象,IDE其實也面向第三方調試廠商開放本身的接口。這樣各大廠商才能利用已經成熟的IDE。
因此,咱們來從新回答第四和第五個問題:
3. IDE->第三方廠商實現KEIL的接口->第三方廠商的遠程調試接口->第三方調試器->硬件調試接口->CPU. 因此,咱們在JLINK架構圖中看到,RDI接口實際上是JLINK廠商定義的接口,而不是IDE廠商定義的。
4. 第四個問題:KEIL->第三方廠商實現KEIL的接口->第三方廠商的遠程調試接口->第三方調試器->51調試規範->51 CPU
5. 第五個問題:從以上看來,其實第三方調試器廠商是能夠在實現硬件調試規範的基礎上,對於遠程調試接口作靈活的定製的。甚至能夠,在一款調試器的基礎上,實現支持多種CPU。通常集成電路設計公司,都有本身的調試器,其要開發多種CPU體系的芯片,因此本身研發的調試器確定可以多種不一樣的CPU的。
Ok,原理就說到這裏,你們應該對調試器有較爲深刻的理解了吧。對於硬件調試規範,之後有時間再細談吧。
4、ARM各種調試彙總
1.JLINK
1. JLINK有不一樣的軟件版本。不一樣版本的pin腳定義可能不同,尤爲是VCC. 這點,我卻是記憶猶新。
2.jlinkV6開始支持SWD模式。
JLINK的JTAG/SWD調試接口。VTref是輸入,接目標板的VDD.
3. 國內賣JLINK的廠商基本上都是抄人家的,因此本身在使用JLINK時也要以實測爲準。我手上兩個JLINK就大相徑庭。下圖左邊的JLINK,第19腳說是5v輸出,實測是0。對於右邊的JLINK的,1腳的VTref竟然會輸出V3.3,因此目標板能夠直接以這個爲電源來調試。對於左邊的JLINK,目標板必需要提供電源給JLINK的1腳。
4. JLINK能夠支持STM32等cortexM3系列等等,A8等高級CPU也能夠。藍牙DA14580和NRF51822都是基於cortexM0,也能夠。
2.STLINK
STLINK是ST公司研發的,專門針對ST公司的產品,通常支持SWD模式。原理跟上面接收的相仿。ST意法半導體還研發了STM8微控制器,其還有一種調試模式是SWIM單總線調試接口。即只須要一個口來調試,固然還要VCC,GND和RST口。
3.TI的CC254X調試器
以上介紹的JTAG是20pin,其實JTAG還有10pin標準接口的,TI的CC254X調試器便是此種。
4.51調試器
一時找不到,不知道放到哪裏了。
5. 其餘調試,未完待續,這個帖子隨時更新。