基于EmJTAG的ARM嵌入式系統(tǒng)調(diào)試工具
ARM嵌入式系統(tǒng)的大致開發(fā)流程是:先在PC機(jī)上編寫程序源代碼;由ARM的交叉編譯器編譯、鏈接生成一個(gè)目標(biāo)文件;然后將目標(biāo)文件轉(zhuǎn)化成可以下載到目標(biāo)機(jī)運(yùn)行的二進(jìn)制代碼,在目標(biāo)機(jī)上調(diào)試運(yùn)行;最終將調(diào)試成功的二進(jìn)制文件固化在目標(biāo)機(jī)中。這一系列過程中,最關(guān)鍵的步驟就是在PC機(jī)上調(diào)試在目標(biāo)機(jī)上運(yùn)行的程序。這就需要采用遠(yuǎn)程調(diào)試的方式,即在PC機(jī)上運(yùn)行調(diào)試器軟件,被調(diào)試程序在目標(biāo)機(jī)上運(yùn)行。
本文描述了這樣一個(gè)遠(yuǎn)程調(diào)試系統(tǒng):利用USB批量傳輸?shù)目煽啃?,將遠(yuǎn)程調(diào)試協(xié)議EmRDI的報(bào)文封裝在USB數(shù)據(jù)包中;協(xié)議轉(zhuǎn)換器EmJTAG再根據(jù)接收到的USB數(shù)據(jù)包中的協(xié)議信息,轉(zhuǎn)換成適當(dāng)?shù)腏TAG信號(hào)來控制和調(diào)試ARM核。協(xié)議轉(zhuǎn)換器EmJTAG由ST公司的ST72651芯片外加一片接口驅(qū)動(dòng)芯片74LVC244來實(shí)現(xiàn)。ST72651內(nèi)部集成了USB模塊和數(shù)據(jù)傳輸協(xié)處理器部件(DTC),通過對(duì)DTC的編程來產(chǎn)生控制ARM核的邊界掃描序列,以產(chǎn)生相應(yīng)的JTAG信號(hào)。
文章最終實(shí)現(xiàn)了PC機(jī)對(duì)ARM核的目標(biāo)機(jī)的調(diào)試功能:PC機(jī)的調(diào)試器軟件可以下載程序至目標(biāo)機(jī),實(shí)時(shí)控制目標(biāo)機(jī)上代碼的單步/全速運(yùn)行或停止,以及設(shè)置斷點(diǎn)和觀察點(diǎn)、讀寫寄存器/存儲(chǔ)器等。
1 系統(tǒng)組成及原理
如圖1所示,整個(gè)調(diào)試系統(tǒng)包括三部分: PC機(jī)(調(diào)試器)、協(xié)議轉(zhuǎn)換器(EmJTAG)以及目標(biāo)板(基于ARM核)。調(diào)試的目的是實(shí)現(xiàn)在PC機(jī)上控制目標(biāo)板單步或全速運(yùn)行,并可以實(shí)時(shí)地察看或修改寄存器及存儲(chǔ)器的值。
系統(tǒng)設(shè)計(jì)實(shí)現(xiàn)了一個(gè)遠(yuǎn)程調(diào)試協(xié)議EmRDI,它采用點(diǎn)對(duì)點(diǎn)的連接方式,以請(qǐng)求響應(yīng)的方式進(jìn)行交互。調(diào)試請(qǐng)求由PC機(jī)上的調(diào)試器軟件發(fā)出,經(jīng)由USB總線傳輸至協(xié)議轉(zhuǎn)換器EmJTAG;EmJTAG解讀該協(xié)議請(qǐng)求,在執(zhí)行相應(yīng)的操作之后,以USB數(shù)據(jù)包的形式發(fā)送回PC機(jī)(即響應(yīng)過程)。
EmRDI協(xié)議定義了如下一些調(diào)試請(qǐng)求:讀/寫核寄存器、讀/寫存儲(chǔ)器、設(shè)置/清除硬件斷點(diǎn)、設(shè)置/清除軟件斷點(diǎn)、設(shè)置/清除數(shù)據(jù)觀察點(diǎn)、復(fù)位、停止運(yùn)行、全速/單步運(yùn)行和返回處理器狀態(tài)/設(shè)備標(biāo)識(shí)符。經(jīng)驗(yàn)證,這些請(qǐng)求的組合,可以實(shí)現(xiàn)PC機(jī)對(duì)目標(biāo)機(jī)上ARM核的調(diào)試和控制功能。
EmRDI協(xié)議請(qǐng)求格式(16字節(jié))如下:
EmRDI協(xié)議響應(yīng)格式(8字節(jié))如下:
ARM核的芯片基本上都遵循JTAG規(guī)范,并帶有邊界掃描功能,此類芯片內(nèi)集成了一個(gè)JTAG電路結(jié)構(gòu)。JTAG電路由TAP(測(cè)試訪問端口)、TAP控制器、指令寄存器、測(cè)試數(shù)據(jù)寄存器組成。另外,ARM7TDMI核還包含了一個(gè)提供在線調(diào)試支持的EmbeddedICE宏單元。
圖1 系統(tǒng)框圖
EmJTAG和PC機(jī)通過USB總線連接,與目標(biāo)板則遵循JTAG調(diào)試接口標(biāo)準(zhǔn)。JTAG規(guī)范中,使用稱為“邊界掃描單元”的基本結(jié)構(gòu)。邊界掃描單元將JTAG電路與處理器邏輯電路聯(lián)系起來,通過它可以將一個(gè)輸入信號(hào)加載到處理器邏輯中而不影響邏輯的其他電路,也可以將處理器邏輯的輸出信號(hào)采樣到邊界掃描單元中。若干個(gè)邊界掃描單元構(gòu)成邊界掃描寄存器(BSR),也稱為“邊界掃描鏈”。邊界掃描寄存器的數(shù)據(jù)通過JTAG接口的TDI引腳和TDO引腳串行移進(jìn)移出。
PC機(jī)上需要實(shí)現(xiàn):EmJTAG的USB驅(qū)動(dòng)程序和調(diào)試器軟件。
EmJTAG上需要實(shí)現(xiàn):USB固件程序和用于產(chǎn)生JTAG信號(hào)的邊界掃描程序。
2 硬件設(shè)計(jì)和實(shí)現(xiàn)
系統(tǒng)的硬件部分主要是指協(xié)議轉(zhuǎn)換器EmJTAG的實(shí)現(xiàn)。協(xié)議轉(zhuǎn)換器的功能,就是接收PC機(jī)上調(diào)試器軟件發(fā)送的遠(yuǎn)程調(diào)試協(xié)議信息,將它轉(zhuǎn)換成JTAG時(shí)序信號(hào)發(fā)送到目標(biāo)板,然后把目標(biāo)板的反饋信息或者數(shù)據(jù)返回給PC機(jī)的調(diào)試器軟件。
EmJTAG使用意法半導(dǎo)體(ST)公司的ST72651芯片,原理框圖如圖2所示。它集成了1個(gè)全速(12 Mbps)USB接口模塊,1個(gè)時(shí)鐘頻率為24 MHz的數(shù)據(jù)傳輸協(xié)處理器(DTC),32 KB程序存儲(chǔ)空間,5 KB RAM,硬件I2C和SPI接口,多達(dá)47個(gè)可編程I/O口;工作電壓為2.7~5.5 V,由USB直接供電。
圖2 EmJTAG原理框圖
與PC機(jī)通信方面,USB接口部分只需要將DP腳上拉一個(gè)電阻,使PC機(jī)識(shí)別到USB設(shè)備。DTC模塊產(chǎn)生4個(gè)時(shí)鐘信號(hào)作為JTAG時(shí)鐘信號(hào)(TDI、TDO、TMS和TCK),由I/O口引出,外部再加一個(gè)接口驅(qū)動(dòng)芯片74LVC244,將這4個(gè)信號(hào)連接到標(biāo)準(zhǔn)的JTAG接口上。TAP控制器復(fù)位信號(hào)nTRST和系統(tǒng)復(fù)位信號(hào)nSRST通過I/O邏輯直接控制。
EmJTAG采用USB供電方式,同時(shí)在TCK引腳上連接一個(gè)指示燈BUSY,顯示系統(tǒng)是否處于忙狀態(tài)。接口驅(qū)動(dòng)芯片74LVC244由內(nèi)部集成的電壓校準(zhǔn)器產(chǎn)生3.3 V來提供電壓。
3 軟件設(shè)計(jì)和實(shí)現(xiàn)
軟件部分主要包括: PC機(jī)上的調(diào)試器軟件,EmJTAG協(xié)議轉(zhuǎn)換器的PC端驅(qū)動(dòng)程序以及EmJTAG中的固件程序。
3.1 PC機(jī)上的調(diào)試器軟件
采用VC++ 6.0 MFC。其主要功能是與EmJTAG的PC端驅(qū)動(dòng)程序通信,將調(diào)試命令通過USB總線發(fā)送至EmJTAG。
3.2 EmJTAG的PC端驅(qū)動(dòng)程序
使用Driverstudio3.1開發(fā)Windows下的USB驅(qū)動(dòng)程序,使EmJTAG和PC機(jī)的應(yīng)用程序可以進(jìn)行數(shù)據(jù)交互。
3.3 EmJTAG中的固件程序
固件程序使用意法半導(dǎo)體(ST)開發(fā)工具STVD7 for InDART STX進(jìn)行開發(fā)。這一部分也是調(diào)試系統(tǒng)最重要的部分,即如何產(chǎn)生JTAG時(shí)序信號(hào)控制ARM核。EmJTAG中的固件分成以下多個(gè)模塊實(shí)現(xiàn)。
3.3.1 DTC軟件插件程序模塊
圖3 DTC功能框圖
評(píng)論