http://blog.csdn.net/yueqian_scut/article/details/52432857 2016 工欲善其事,必先善其器。調(diào)試器在嵌入式開發(fā)調(diào)試中的重要性不言而喻,單步、斷點和監(jiān)察的效率遠高于串口打印。但是,調(diào)試器對于一般開發(fā)人員往往是一個黑匣子。今天我們就來談談調(diào)試器的原理,順便把自己的幾類調(diào)試器接線和注意事項記錄下來,以便查找。我常常要面對幾個方案,而各個方案的調(diào)試器都不一樣,接線有時連自己都記不住。所以這個帖子應值得嵌入式開發(fā)工程師收藏。
一、嵌入式調(diào)試多樣性 我們先來回想調(diào)試的場景,思考一下這幾個問題: 1. ARM開發(fā)環(huán)境有Keil、IAR、ADS等等,我們發(fā)現(xiàn)這幾個平臺都能用同一個調(diào)試器去調(diào)試ARM。 2.一個調(diào)試器可以調(diào)試多種不同型號的CPU,包括STM32控制器和高端的處理器。 3.一個調(diào)試器有時接20個pin的JTAG接口,有時接4個pin的SWD接口。 4.開發(fā)環(huán)境KEIL不僅支持ARM調(diào)試,還支持51單片機調(diào)試。 5.如果自己研發(fā)了一顆SOC芯片,并在JTAG的基礎上增加一些定制的功能,又該如何實現(xiàn)?
二、JLink調(diào)試原理 OK,我們來分析一下JLINK的調(diào)試架構。我們都知道,JLINK是調(diào)試ARM體系的。 網(wǎng)上的資料有時舊了,有時抄來抄去出錯了。我們就以官方的版本為例來說明。我們安裝了JLINK驅(qū)動后,會在Doc\Manuals目錄有一個文件《UM08001_JLink.pdf》,這個文件就是Jlink的官方文檔資料。 我們用這個架構圖來一一解釋上一節(jié)的問題,解開疑惑。 1. 對于第一個問題,JLINK定義了一個軟件調(diào)試層面的RDI接口標準,即Remote debug interface. Keil、IAR、ADS這些開發(fā)環(huán)境按照RDI標準進行定制,即可以支持JLINK調(diào)試。RDI底層使用USB傳輸,當然,其他硬件接口也是可以的。 2. 對于第三個問題,ARM體系原先是支持JTAG硬件調(diào)試接口的,隨著cortex系列增加SWD調(diào)試規(guī)范,現(xiàn)在越來越多的調(diào)試器選擇SWD接口。其接線少,速率高,也比較穩(wěn)定。JTAG 20個口太占用pin資源了。JLINK V6開始支持SWD,現(xiàn)在V8支持已經(jīng)足夠好了。 3. 對于第二個問題,不管是低端控制器,還是高端處理器,調(diào)試接口規(guī)范都是ARM體系的標準內(nèi)容。ARM CPU原生支持JTAG/SWD調(diào)試協(xié)議接口。 OK,那JLINK這個角色是做什么的? -----將RDI接口協(xié)議轉(zhuǎn)換為JTAG/SWD接口協(xié)議?。?! 例如,IDE上可以設置一個斷點,那IDE會使用RDI的設置斷點的API,而JLINK在實現(xiàn)這個API里面,就轉(zhuǎn)化為JTAG/SWD標準規(guī)范里面的設置斷點功能,并通過JTAG/SWD硬件接口輸出到ARM CPU上。
三、IDE的調(diào)試開發(fā) 第四個和第五個問題都涉及到IDE。如何回答這兩個問題? 1. 從JLINK架構來看,調(diào)試包括:IDE->遠程調(diào)試接口->調(diào)試器->硬件調(diào)試接口->CPU。 2. 對于KEIL支持51單片機,調(diào)試器必須要支持51 CPU的ISP調(diào)試規(guī)范。51單片機的調(diào)試似乎沒有一家像JLINK那么有影響力的調(diào)試廠商。也許是因為51調(diào)試器相當簡單吧,淘寶30塊左右就能買到。 那現(xiàn)在就剩下遠程調(diào)試接口這個環(huán)節(jié)了,這個問題解決了,就把第五個問題也解決了,因為不管是通用的SOC,還是定制的SOC,CPU核心都是一致的,要么是ARM,要么是MIPS,要么51等等。每種CPU在其體系標準里面就決定了硬件調(diào)試規(guī)范了。要想調(diào)試CPU,其調(diào)試器必須要將上層的要求轉(zhuǎn)化為符合其支持的硬件調(diào)試規(guī)范。 那么,我們來重新思考IDE的設計。IDE在立項研發(fā)的時候顯然希望能支持到不同體系的CPU,否則不是作死自己嗎?所以,我們可以想象,IDE其實也面向第三方調(diào)試廠商開放自己的接口。這樣各大廠商才能利用已經(jīng)成熟的IDE。 所以,我們來重新回答第四和第五個問題: 3. IDE->第三方廠商實現(xiàn)KEIL的接口->第三方廠商的遠程調(diào)試接口->第三方調(diào)試器->硬件調(diào)試接口->CPU. 所以,我們在JLINK架構圖中看到,RDI接口其實是JLINK廠商定義的接口,而不是IDE廠商定義的。 4. 第四個問題:KEIL->第三方廠商實現(xiàn)KEIL的接口->第三方廠商的遠程調(diào)試接口->第三方調(diào)試器->51調(diào)試規(guī)范->51 CPU 5. 第五個問題:從以上看來,其實第三方調(diào)試器廠商是可以在實現(xiàn)硬件調(diào)試規(guī)范的基礎上,對于遠程調(diào)試接口做靈活的定制的。甚至可以,在一款調(diào)試器的基礎上,實現(xiàn)支持多種CPU。一般集成電路設計公司,都有自己的調(diào)試器,其要開發(fā)多種CPU體系的芯片,所以自己研發(fā)的調(diào)試器肯定能夠多種不同的CPU的。 Ok,原理就說到這里,大家應該對調(diào)試器有較為深入的理解了吧。對于硬件調(diào)試規(guī)范,以后有時間再細談吧。
四、ARM各類調(diào)試匯總 1. JLINK 1. JLINK有不同的軟件版本。不同版本的pin腳定義可能不一樣,尤其是VCC. 這點,我倒是記憶猶新。 2.jlinkV6開始支持SWD模式。 JLINK的JTAG/SWD調(diào)試接口。VTref是輸入,接目標板的VDD. 3. 國內(nèi)賣JLINK的廠商基本上都是抄人家的,所以自己在使用JLINK時也要以實測為準。我手上兩個JLINK就截然不同。下圖左邊的JLINK,第19腳說是5v輸出,實測是0。對于右邊的JLINK的,1腳的VTref居然會輸出V3.3,所以目標板可以直接以這個為電源來調(diào)試。對于左邊的JLINK,目標板必須要提供電源給JLINK的1腳。 4. JLINK可以支持STM32等cortex M3系列等等,A8等高級CPU也可以。藍牙DA14580和NRF51822都是基于cortex M0,也可以。 2. STLINK STLINK是ST公司研發(fā)的,專門針對ST公司的產(chǎn)品,一般支持SWD模式。原理跟上面接收的相仿。ST意法半導體還研發(fā)了STM8微控制器,其還有一種調(diào)試模式是SWIM單總線調(diào)試接口。即只需要一個口來調(diào)試,當然還要VCC,GND和RST口。 3. TI的CC254X調(diào)試器 以上介紹的JTAG是20pin,其實JTAG還有10pin標準接口的,TI的CC254X調(diào)試器即是此種。 4.51調(diào)試器 一時找不到,不知道放到哪里了。 5. 其他調(diào)試,未完待續(xù),這個帖子隨時更新。
嵌入式企鵝圈原創(chuàng)團隊由阿里、魅族、nvidia、龍芯、炬力、拓爾思等資深工程師組成。百分百原創(chuàng),每周兩篇,分享嵌入式、Linux、物聯(lián)網(wǎng)、GPU、Android、自動駕駛等技術。歡迎掃碼關注微信公眾號:嵌入式企鵝圈,實時推送原創(chuàng)文章!
|
|
來自: 心不留意外塵 > 《驅(qū)動移植》