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