1. 程式人生 > >嵌入式偵錯程式原理和各類偵錯程式集錦

嵌入式偵錯程式原理和各類偵錯程式集錦

        工欲善其事,必先善其器。偵錯程式在嵌入式開發除錯中的重要性不言而喻,單步、斷點和監察的效率遠高於串列埠列印。但是,偵錯程式對於一般開發人員往往是一個黑匣子。今天我們就來談談偵錯程式的原理,順便把自己的幾類偵錯程式接線和注意事項記錄下來,以便查詢。我常常要面對幾個方案,而各個方案的偵錯程式都不一樣,接線有時連自己都記不住。所以這個帖子應值得嵌入式開發工程師收藏。

一、嵌入式除錯多樣性

我們先來回想除錯的場景,思考一下這幾個問題:

1. ARM開發環境有Keil、IAR、ADS等等,我們發現這幾個平臺都能用同一個偵錯程式去除錯ARM。

2.一個偵錯程式可以除錯多種不同型號的CPU,包括STM32控制器和高階的處理器。

3.一個偵錯程式有時接20個pin的JTAG介面,有時接4個pin的SWD介面。

4.開發環境KEIL不僅支援ARM除錯,還支援51微控制器除錯。

5.如果自己研發了一顆SOC晶片,並在JTAG的基礎上增加一些定製的功能,又該如何實現?

二、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上。

三、IDE的除錯開發

       第四個和第五個問題都涉及到IDE。如何回答這兩個問題?

1.     從JLINK架構來看,除錯包括:IDE->遠端除錯介面->偵錯程式->硬體除錯介面->CPU。

2.     對於KEIL支援51微控制器,偵錯程式必須要支援51 CPU的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,原理就說到這裡,大家應該對偵錯程式有較為深入的理解了吧。對於硬體除錯規範,以後有時間再細談吧。

四、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等cortex M3系列等等,A8等高階CPU也可以。藍芽DA14580和NRF51822都是基於cortex M0,也可以。

2. STLINK

       STLINK是ST公司研發的,專門針對ST公司的產品,一般支援SWD模式。原理跟上面接收的相仿。ST意法半導體還研發了STM8微控制器,其還有一種除錯模式是SWIM單匯流排除錯介面。即只需要一個口來除錯,當然還要VCC,GND和RST口。

3. TI的CC254X偵錯程式

以上介紹的JTAG是20pin,其實JTAG還有10pin標準介面的,TI的CC254X偵錯程式即是此種。

4.51偵錯程式

一時找不到,不知道放到哪裡了。

5. 其他除錯,未完待續,這個帖子隨時更新。

嵌入式企鵝圈原創團隊由阿里、魅族、nvidia、龍芯、炬力、拓爾思等資深工程師組成。百分百原創,每週兩篇,分享嵌入式、Linux、物聯網、GPU、Android、自動駕駛等技術。歡迎掃碼關注微信公眾號:嵌入式企鵝圈,實時推送原創文章!