前言
最近在調(diào)試一些單板,對(duì)于這個(gè)調(diào)試工具我真的是又愛(ài)又恨,熟悉了那就是金箍棒,不熟悉那就是攔路虎。
有的東西用了很久還不知道這個(gè)玩意是干嘛的,于是這里來(lái)整理一篇來(lái)學(xué)習(xí)一下。
調(diào)試的工具針對(duì)不同的領(lǐng)域當(dāng)然有很多的,這里涉及到的工具是OpenOCD,這個(gè)玩意我們一起來(lái)學(xué)習(xí)一下相應(yīng)的使用方式。
一、OpenOCD是什么?
我們?cè)谑褂玫臅r(shí)候會(huì)用到OpenJTAG,那么先來(lái)看看OPENJTAG是什么?
1-OPENJTAG是什么?
OpenJTag是一個(gè)開(kāi)源項(xiàng)目(包含軟件和硬件)。
硬件是一個(gè)USB接口轉(zhuǎn)JTag接口的適配器。
借助開(kāi)源軟件OpenOCD可以完成程序的燒寫(xiě),調(diào)試等任務(wù)OpenJTag的功能:
往Flash燒寫(xiě)程序:支持NOR Flash 和 NAND Flash
支持Windows以及Linux
能夠用在支持GDB調(diào)試協(xié)議的工具上:如IAR, Eclipse
USB轉(zhuǎn)串口功能
所以本質(zhì)上還是開(kāi)源軟件OpenOCD
2-J-Link、J-Trace、Open JTAG區(qū)別
J-Link、J-Trace、Open JTAG都是用來(lái)調(diào)試程序的(當(dāng)然還有其他工具可以進(jìn)行調(diào)試,比如ICE),J-Link和J-Trace是SEGGER公司的(http://www.segger.com)。Open JTAG(http://www.openjtag.org/)是 一個(gè)開(kāi)源項(xiàng)目,其目標(biāo)是使嵌入式開(kāi)發(fā)者能夠通過(guò)JTAG接口,用開(kāi)放的硬件和軟件系統(tǒng)進(jìn)行燒寫(xiě)、校驗(yàn)和調(diào)試[1]。他們都基于JTAG調(diào)試接口協(xié)議。
本質(zhì)上都是基于JTAG接口協(xié)議的。
3-OpenOCD是什么
OpenOCD(Open On-Chip Debugger)開(kāi)源片上調(diào)試器,是一款開(kāi)源軟件,最初是由Dominic Rath同學(xué)還在大學(xué)期間發(fā)起的(2005年)項(xiàng)目。OpenOCD旨在提供針對(duì)嵌入式設(shè)備的調(diào)試、系統(tǒng)編程和邊界掃描功能。
OpenOCD的功能是在仿真器的輔助下完成的,仿真器是能夠提供調(diào)試目標(biāo)的電信號(hào)的小型硬件單元。仿真器是必須的,因?yàn)檎{(diào)試主機(jī)(運(yùn)行OpenOCD的主機(jī))通常不具備這種電信號(hào)的直接解析功能。
仿真器支持一個(gè)或多個(gè)傳輸協(xié)議,每個(gè)協(xié)議涉及不同的電信號(hào),且使用不同的協(xié)議棧進(jìn)行消息傳遞。市面上有很多種仿真器,并且這些仿真器的命名沒(méi)有統(tǒng)一的規(guī)律。
仿真器有時(shí)候會(huì)被封裝成獨(dú)立的加密狗,這種稱為硬件接口加密狗。一些開(kāi)發(fā)板上面直接集成了硬件接口加密狗,這樣可以使開(kāi)發(fā)板通過(guò)USB直接連到主機(jī)上進(jìn)行調(diào)試。
例如,JTAG仿真器支持JTAG協(xié)議的信號(hào),可以用來(lái)進(jìn)行TAPs和目標(biāo)板子之間符合JTAG協(xié)議(IEEE 1149.1)的通訊。TAP(Test Access Port)是處理特殊指令和數(shù)據(jù)的單元。TAPs在芯片與板子之間和之內(nèi)以菊花鏈的形式進(jìn)行連接。JTAG支持調(diào)試和邊界掃描。
還有SWD仿真器,這種仿真器支持使用SWD(Serial Wire Debug)信號(hào)與一些比較新的ARM芯片進(jìn)行通訊,而且還可以作為那些同時(shí)支持JTAG和SWD的芯片的仿真器。不過(guò)SWD僅支持調(diào)試,不支持邊檢掃描。
對(duì)于一些芯片,還有專門(mén)的編程下載器,這些下載器僅支持擦寫(xiě)FLASH的功能,不支持調(diào)試和邊界掃描。對(duì)于此類專用下載器,OpenOCD暫時(shí)并不支持。
加密狗:OpenOCD目前支持多種類型的硬件加密狗:基于USB的,基于并行端口的,以及其他在內(nèi)部運(yùn)行OpenOCD的獨(dú)立盒子。
GDB調(diào)試:它允許ARM7(ARM7TDMI和ARM720t),ARM9(ARM920T,ARM922T,ARM926EJ-S,ARM966E-S),XScale(PXA25x,IXP42x),Cortex-M3(Stellaris LM3,ST STM32和Energy Micro EFM32)和基于Intel Quark(x10xx)的內(nèi)核使用GDB協(xié)議進(jìn)行調(diào)試。
Flash編程:擦寫(xiě)FLASH支持外部CFI兼容NOR閃存(Intel和AMD / Spansion命令集)和幾個(gè)內(nèi)部閃存(LPC1700,LPC1800,LPC2000,LPC4300,AT91SAM7,AT91SAM3U,STR7x,STR9x,LM3,STM32x和EFM32)。包括各種NAND閃存控制器(LPC3180,Orion,S3C24xx等)的初步支持。
小結(jié)一下:
OpenOCD (Open On-Chip Debugger)是一個(gè)開(kāi)源的片上調(diào)試器,旨在提供針對(duì)嵌入式設(shè)備的調(diào)試、系統(tǒng)編程和邊界掃描功能。
OpenOCD的功能需要調(diào)試仿真器來(lái)輔助完成,調(diào)試仿真器是一個(gè)提供調(diào)試目標(biāo)電信號(hào)的小型硬件單元。常用的有Jink、STLink等,一些開(kāi)發(fā)板直接集成了調(diào)試仿真器,如小熊派開(kāi)發(fā)板就集成了STLink。
通過(guò)下面的OpenOCD架構(gòu)圖我們能更好的認(rèn)識(shí)OpenOCD。
可以看出OpenOCD提供了GDBServer,可以通過(guò)它進(jìn)行GDB相關(guān)的調(diào)試操作。
提供TeInet Server,可以通過(guò)Telnet連接對(duì)目標(biāo)板進(jìn)行燒錄、重啟等操作。
OpenOCD的配置基于TCL腳本,可以使用默認(rèn)自帶的TCL腳本,也可以編寫(xiě)自定義的腳本。
4-OpenJTAG怎么用?
上面我們提到OpenOCD需要調(diào)試仿真器配合使用,一般我們還會(huì)使用gdb client與其配合進(jìn)行遠(yuǎn)程調(diào)試。
在這里插入圖片描述
5-JTAG與SWD的區(qū)別
JTAG (Joint Test Action Group,聯(lián)合測(cè)試行動(dòng)小組)是一種國(guó)際標(biāo)準(zhǔn)測(cè)試協(xié)議(IEEE1149.1兼容),主要用于芯片內(nèi)部測(cè)試。現(xiàn)在多數(shù)的高級(jí)器件都支持JTAG協(xié)議,如ARM、DSP、FPGA器件等。標(biāo)準(zhǔn)的JTAG接口是4線:TMS、TCK、TDI、TDO,分別為模式選擇、時(shí)鐘、數(shù)據(jù)輸入和數(shù)據(jù)輸出線。相關(guān)JTAG引腳的定義為:
TMS:測(cè)試模式選擇,TMS用來(lái)設(shè)置JTAG接口處于某種特定的測(cè)試模式;
TCK:測(cè)試時(shí)鐘輸入;
TDl:測(cè)試數(shù)據(jù)輸入,數(shù)據(jù)通過(guò)TDI引|腳輸入JTAG接口;
TDO:測(cè)試數(shù)據(jù)輸出,數(shù)據(jù)通過(guò)TDO引腳從JTAG接口輸出;
串行調(diào)試(Serial Wire Debug),一種和JTAG不同的調(diào)試模式,與JTAG的20個(gè)引腳相比,SWD只需要4個(gè)(或者5個(gè))引腳,結(jié)構(gòu)簡(jiǎn)單,但是使用范圍沒(méi)有JTAG廣泛,主流調(diào)試器上也是后來(lái)才加的SWD調(diào)試模式。
SWD和傳統(tǒng)的調(diào)試方式區(qū)別:SWD模式比JTAG在高速模式下面更加可靠。在大數(shù)據(jù)量的情況下面JTAG下載程序會(huì)失敗,但是SWD發(fā)生的幾率會(huì)小很多。基本使用JTAG仿真模式的情況下是可以直接使用SWD模式的,只要你的仿真器支持,所以推薦大家使用這個(gè)模式。在GPIO剛好缺一個(gè)的時(shí)候,可以使用SWD仿真,這種模式支持更少的引腳。在板子的體積有限的時(shí)候推薦使用SWD模式,它需要的引腳少。
審核編輯:劉清
-
USB接口
+關(guān)注
關(guān)注
9文章
702瀏覽量
55831 -
適配器
+關(guān)注
關(guān)注
8文章
1972瀏覽量
68262 -
JTAG
+關(guān)注
關(guān)注
6文章
401瀏覽量
71842 -
J-Link
+關(guān)注
關(guān)注
0文章
84瀏覽量
22195 -
GDB調(diào)試
+關(guān)注
關(guān)注
0文章
24瀏覽量
1489
原文標(biāo)題:OpenOCD是什么?
文章出處:【微信號(hào):處芯積律,微信公眾號(hào):處芯積律】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論