一種嵌入式系統(tǒng)實(shí)現(xiàn)的JTAG調(diào)試器
arm7TDMI寄存器和內(nèi)存訪問的實(shí)現(xiàn)
邊界掃描鏈分布在ARM7TDMI的32位數(shù)據(jù)總線的周圍, arm7TDMI每次取指令或者進(jìn)行數(shù)據(jù)存儲時都要通過32位數(shù)據(jù)總線進(jìn)行。這樣, 通過邊界掃描鏈1, 就可以插入新指令或者新數(shù)據(jù), 同時也可以捕獲出現(xiàn)在數(shù)據(jù)總線上的數(shù)據(jù)。通過這種方式, 可以檢查和修改arm7TDMI的通用寄存器和系統(tǒng)內(nèi)存。
以讀取寄存器R0 的值為例, 介紹邊界掃描鏈1 的操作過程。
讀取寄存器R0的值可以用指令STR R0, [R0] ( 機(jī)器碼為0xE5800000) 來實(shí)現(xiàn)。該指令可將寄存器R0 的值存儲到內(nèi)存單元R0中去。因?yàn)樵贏RM7TDMI處于調(diào)試狀態(tài)時, ARM7TDMI和外部是隔離開的, 所以該指令實(shí)際上不能訪問內(nèi)存單元,也不會對內(nèi)存單元產(chǎn)生任何影響。使用指令STR R0, [R0]可使得寄存器R0的值出現(xiàn)在數(shù)據(jù)總線上, 這樣就可以通過掃描鏈1將其捕獲,然后從TDO輸出。指令STR R0, [R0]的執(zhí)行需要兩個指令執(zhí)行周期。在第一個指令執(zhí)行周期, 執(zhí)行地址計算; 在第二個指令執(zhí)行周期,將寄存器R0的值放到數(shù)據(jù)總線上去。對arm寄存器寫操作及訪問內(nèi)存的方法與此類似,都是通過掃描鏈1, 只是所使用的指令不同而已。
網(wǎng)絡(luò)編程
通過網(wǎng)絡(luò)編程, 可以對目標(biāo)系統(tǒng)實(shí)現(xiàn)遠(yuǎn)程調(diào)試。網(wǎng)絡(luò)通信通過μClinux下的socket編程實(shí)現(xiàn),首先PC(調(diào)試主機(jī))通過網(wǎng)絡(luò)向仿真器發(fā)送命令, 仿真器通過統(tǒng)一的程序接口分析調(diào)試命令, 并將調(diào)試命令轉(zhuǎn)換成JTAG標(biāo)準(zhǔn)所要求的時序,通過I/O口線發(fā)送到目標(biāo)板; 然后目標(biāo)板執(zhí)行命令,并將命令執(zhí)行后得到的調(diào)試信息返回給仿真器, 接著仿真器將調(diào)試信息通過網(wǎng)絡(luò)發(fā)送給PC,這樣用戶在PC上便得到了調(diào)試信息。
JTAG調(diào)試器測試及部分執(zhí)行結(jié)果
本設(shè)計最終完成了一種在Linux終端下操作的JTAG調(diào)試器。調(diào)試器上電后便在μClinux 下自動運(yùn)行調(diào)試器客戶端程序, 同時在PC的Cygwin環(huán)境下運(yùn)行JTAG調(diào)試器服務(wù)器端程序jtager , 建立網(wǎng)絡(luò)連接。然后在Cygwin下鍵入用戶調(diào)試命令, 執(zhí)行下列操作: (1)寫目標(biāo)板上的CPU狀態(tài);(2)讀寫編址在統(tǒng)一內(nèi)存空間的外部設(shè)備寄存器; (3)讀寫目標(biāo)機(jī)上的RAM; (4)讀寫目標(biāo)機(jī)上的固態(tài)存儲設(shè)備, 如Flash;(5)對嵌入式ICE- RT進(jìn)行調(diào)試。
設(shè)計實(shí)現(xiàn)的調(diào)試器的用戶命令較多, 下面僅列出兩條典型命令I(lǐng)DCODE 和REG 執(zhí)行后的結(jié)果。
執(zhí)行IDCODE命令后, 讀出了一個基于S3C4510B的目標(biāo)開發(fā)板內(nèi)的CPUID號, 從而得到Device ID=0x1F0F0F0F.通過邏輯分析儀分析幾個JTAG接口信號的時序關(guān)系, 可以觀察到JTAG掃描連的訪問過程以及該過程中各種狀態(tài)的轉(zhuǎn)移,結(jié)果與JTAG_調(diào)試原理吻合。
執(zhí)行RE命令后, 得到了寄存器R0~R15及CPSR內(nèi)容, 即讀出了目標(biāo)開發(fā)板處理器S3C4510B在當(dāng)前處理器模式下的所有寄存器值, 而且還可以通過其他命令對其進(jìn)行修改。
此外, 通過掃描鏈2可以訪問嵌入式ICE- RT的17個寬度不同的內(nèi)部調(diào)試寄存器, 通過這些寄存器使目標(biāo)arm7TDMI分別進(jìn)入調(diào)試狀態(tài)的3種方式, 即控制DBGRQ信號、斷點(diǎn)和觀察點(diǎn), 實(shí)現(xiàn)在線調(diào)試功能。
linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)
評論