嵌入式調試器原理和各類調試器集錦(JLINK、STLINK、CCDEBUG)


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

 

一、嵌入式調試多樣性

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

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單片機,調試器必須要支持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,原理就說到這里,大家應該對調試器有較為深入的理解了吧。對於硬件調試規范,以后有時間再細談吧。

 

四、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. 其他調試,未完待續,這個帖子隨時更新。

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM