一種嵌入式系統(tǒng)實現的JTAG調試器
ARM7TDMI 提供了4 條掃描鏈, 分別是掃描鏈0、1、2 和3.通過掃描鏈0可以訪問arm7TDMI內核的外圍電路,包括數據總線。該掃描鏈長度為113位, 具體包括數據總線的0 ̄31位、內核控制信號、地址總線的0 ̄31 位、嵌入式ICE -RT的控制信號等。掃描鏈1是掃描鏈0的子集, 長度為33位,具體包括數據總線的0 ̄31位和BREAKPT信號,掃描鏈1比掃描鏈0的長度短了很多,通過掃描鏈1可以更快地將指令或數據插入到ARM7TDMI的內部。掃描鏈2長度為38位, 該掃描鏈專門用來訪問嵌入式ICE-RT內部的寄存器, 通過訪問嵌入式ICERT的內部寄存器,可以讓ARM7TDMI進入調試狀態(tài)、設置斷點、設置觀察點。通過掃描鏈3, arm7TDMI可以訪問外部的邊界掃描鏈, 該掃描鏈用得很少。
ARM7TDMI 的調試狀態(tài)和正常運行狀態(tài)是有區(qū)別的。在正常運行狀態(tài)下, ARM7TDMI 由MCLK( MemoryClock)驅動, 正常運行。在調試狀態(tài)下, ARM7TDMI的正常運行被打斷,并且和系統(tǒng)的其他部分隔離開來??梢酝ㄟ^掃描鏈插入特定的ARM/THUMB指令來讀寫ARM7TDMI的內部寄存器和修改內存的內容。在完成需要的操作后,可以用RESTART JTAG 指令讓arm7TDMI返回到正常運行狀態(tài),恢復原來的運行。
JTAG調試器硬件是以基于ARM7芯片的嵌入式系統(tǒng)實現的。該系統(tǒng)以帶以太網接口的arm芯片S3C4510B為核心處理器, 以μClinux為嵌入式操作系統(tǒng)。JTAG調試器軟件主要包括兩部分: JTAG調試器與目標機的接口模塊和與調試主機的接口模塊。
嵌入式系統(tǒng)設計
設計并制作標準的S3C4510B應用系統(tǒng), 主要配置為2MBFLASH、16MBSDRAM、10/100Mbps 自適應以太網口、終端接口、并行I/O 接口等。利用S3C4510B 的通用I/O口中的P[4]、P[5]、P[6]、P[8]分別模擬JTAG標準中TAP的4個信號接口, 即TCK、TMS、TDI、TDO.
從軟件上看, 需要將μClinux 操作系統(tǒng)移植到設計制作的基于S3C4510B的JTAG調試器硬件平臺上,以便開發(fā)基于網絡的調試器軟件。μCLinux是為沒有內存管理單元(MMU)的處理器設計的一種嵌入式操作系統(tǒng),它繼承了桌面Linux的強大網絡功能,其內核采用模塊化的組織結構,通過增減內核模塊的方式來增減系統(tǒng)的功能。
通常,在PC機上通過并口模擬JTAG時序,也可以按照標準仿真器設計JTAG調試器。與上述方案不同,本設計采用開放源代碼軟件設計JTAG調試器應用軟件,主要參考了Open- JTAG小組開發(fā)的通過PC機并口實現JTAG操作的軟件jtager - 1.0.0,將其中對PC 機并口的操作改為對S3C4510B口線的操作,通過設置S3C4510B的通用I/O口模式寄存器IOPMOD 的值可將P[4]、P[5]、P[6]設置為輸出模式,將P[8]設置為輸入模式,然后通過編程設置I/O口數據寄存器IOPDATA的值,控制P [4]、P[5]、P[6]、P[8]的狀態(tài)實現JTAG標準要求的時序。隨后,根據arm7TDMI調試特性,修改操作代碼,增加通過網絡的遠程調試功能。
arm7TDMI的JTAG指令實現
ARM7TDMI 的指令寄存器長度是4位, 通過TAP和JTAG接口, 可以把指令裝載到指令寄存器中。在CAPTURE-IR狀態(tài)下, 固定值B0001總是被裝載到指令寄存器中。在SHIFT- IR狀態(tài)下, 可以把arm7TDMI支持的新指令從TDI串行輸入,同時固定值B0001會從TDO 串行輸出。通過輸出的這個固定值,可以判斷當前的操作是否正確。在UPDATE- IR狀態(tài)下, 新輸入的指令被裝載到指令寄存器中。在回到RUN- TEST/IDLE狀態(tài)后,新指令立即生效。
IDCODE和SCAN_N是ARM7TDMI調試中經常用到的JTAG命令。IDCODE命令的二進制代碼是1110.IDCODE命令將Device Identification Code寄存器連接到TDI和TDO之間。Device Identification Code寄存器的長度是32 位,通過TAP可以讀到ARM7TDMI的ID.SCAN_N命令的二進制代碼是0010.arm7TDMI 提供了4 條掃描鏈,通過SCAN_N指令可以選擇需要訪問的掃描鏈。選擇掃描鏈的過程是:先把SCAN_N指令裝載到指令寄存器中,該指令會將長度為4位的掃描鏈選擇寄存器連接到TDI和TDO之間;通過TAP狀態(tài)的轉移便可使選擇的掃描鏈連接到TDI和TDO之間。
另外BYPASS、INTEST、RESTART等JTAG指令的實現方法與上面兩條指令的實現方法類似。
嵌入式ICE- RT邏輯實現
嵌入式ICE- RT是arm處理器內部集成的在線仿真功能模塊,通過JTAG調試接口與外界交互,其中包含的常用寄存器。
要訪問嵌入式ICE- RT內部的寄存器,可通過掃描鏈2對Debug Control Register進行訪問。實現過程:通過TAP將SCAN_N指令寫入JTAG指令寄存器中,通過TDI將數值2寫到掃描鏈選擇寄存器中,即選擇了掃描鏈2,在通過掃描鏈2訪問任何嵌入式ICE- RT內部寄存器之前,還需要用INTEST指令將當前通過SCAN_N指令選擇的掃描鏈置為內部測試狀態(tài)。寫入INTEST指令的過程和寫入SCAN_N 指令的過程類似。接下來就可以通過掃描鏈2訪問嵌入式ICE- RT內部寄存器,實現對arm7TDMI的基本調試功能。
linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)
評論