JTAG(Joint Test Action Group,聯合測試行動組)是一種國際標準測試協議(IEEE 1149.1兼容)。標準的JTAG接口是4線——TMS、TCK、TDI、TDO,分別為模式選擇、時鐘、數據輸入和數據輸出線。 JTAG的主要功能有兩種,或者說JTAG主要有兩大 類:一類用于測試芯片的電氣特性,檢測芯片是否有問題;另一類用于Debug,對各類芯片以及其外圍設備進行調試。一個含有JTAG Debug接口模塊的CPU,只要時鐘正常,就可以通過JTAG接口訪問CPU的內部寄存器、掛在CPU總線上的設備以及內置模塊的寄存器。本文主要介紹的是Debug功能。 1 JTAG原理分析 簡單地說,JTAG的工作原理可以歸結為:在器件內部定義一個TAP(Test Access Port,測試訪問口),通過專用的JTAG測試工具對內部節點進行測試和調試。首先介紹一下邊界掃描和TAP的基本概念和內容。 1.1 邊界掃描 邊界掃描(Boundary-Scan)技術的基本思想是在靠近芯片的輸入/輸出引腳上增加一個移位寄存器單元,也就是邊界掃描寄存器(Boundary-Scan Register)。 當芯片處于調試狀態時,邊界掃描寄存器可以將芯片和外圍的輸入/輸出隔離開來。通過邊界掃描寄存器單元,可以實現對芯片輸入/輸出信號的觀察和控制。對于芯片的輸入引腳,可以通過與之相連的邊界掃描寄存器單元把信號(數據)加載到該引腳中去;對于芯片的輸出引腳,也可以通過與之相連的邊界掃描寄存器“捕獲”該引腳上的輸出信號。在正常的運行狀態下,邊界掃描寄存器對芯片來說是透明的,所以正常的運行不會受到任何影響。這樣,邊界掃描寄存器提供了一種便捷的方式用于觀測和控制所需調試的芯片。另外,芯片輸入/輸出引腳上的邊界掃描(移位)寄存器單元可以相互連接起來,在芯片的周圍形成一個邊界掃描鏈(Boundary-Scan Chain)。邊界掃描鏈可以串行地輸入和輸出,通過相應的時鐘信號和控制信號,就可以方便地觀察和控制處在調試狀態下的芯片。 1.2 測試訪問口TAP TAP(Test Access Port)是一個通用的端口,通過TAP可以訪問芯片提供的所有數據寄存器(DR)和指令寄存器(IR)。對整個TAP的控制是通過TAP控制器(TAP Controller)來完成的。下面先分別介紹一下TAP的幾個接口信號及其作用。其中,前4個信號在IEEE1149.1標準里是強制要求的。
簡單地說,PC機對目標板的調試就是通過TAP接口完成對相關數據寄存器(DR)和指令寄存器(IR)的訪問。 系統上電后,TAP Controller首先進入Test-LogicReset狀態,然后依次進入Run-Test/Idle、Selcct-DR-Scan、Select-IR-Scan、Capture-IR、Shift-IR、Exitl-IR、Update-IR狀態,最后回到Run-Tcst/Idle狀態。在此過程中,狀態的轉移都是通過TCK信號進行驅動(上升沿),通過TMS信號對TAP的狀態進行選擇轉換的。其中,在Capture-IR狀態下,一個特定的邏輯序列被加載到指令寄存器中;在Shift-IR狀態下,可以將一條特定的指令送到指令寄存器中;在Update—IR狀態下,剛才輸入到指令寄存器中的指令將用來更新指令寄存器。最后,系統又回到Run—Test/Idle狀態,指令生效,完成對指令寄存器的訪問。當系統又返回到Run—Test/Idle狀態后,根據前面指令寄存器的內容選定所需要的數據寄存器,開始執行對數據寄存器的工作。其基本原理與指令其存器的訪問完全相同,依次為seIect—DR—Scan、Capture—DR、Shift—D、Exitl一DR、Update—DR,最后回到Run-Tcst/Idle狀態。通過TDl和TDO,就可以將新的數據加載到數據寄存器中。經過一個周期后,就可以捕獲數據寄存器中的數據,完成對與數據寄存器的每個寄存器單元相連的芯片引腳的數據更新,也完成了對數據寄存器的訪問。 目前,市場上的JTAG接口有14引腳和20引腳兩種。其中,以20引腳為主流標準,但也有少數的目標板采用14引腳。經過簡單的信號轉換后,可以將它們通用。 下面通過對JD44BOX實驗開發板的簡易JTAG的基本原理進行分析,以及對JD44BOX和STR710試驗開發板主板的JTAG原理進行對比,進一步闡述JTAG的工作原理。JD44BOX實驗開發板的簡易JTAG的原理圖如圖1所示。 圖1中,74LS244為三態輸出的8組緩沖器和總線驅動器,其功能如表l所列。 由表1可知,在JD4480X實驗板的調試過程中,這款簡易JTAG的主要作用就是將PC機發出的電信號與實驗板的電信號進行匹配,以實現驅動目標板的功能。 STR710和JD44BOX主板的JTAG原理圖如圖2和圖3所示。 通過圖2和圖3的對比可以發現,雖然所用的仿真器有很大的差別,但是,實際上忽略一些上下拉電阻以及保護電容(這些電阻、電容對于電路功能沒有意義),它們的基本原理圖是十分相似的,唯一的差別就在于對RTCK信號(用于測試時鐘返回)和DBGRQ信號(用于設置目標板工作狀態)的處理。實際上,在IEEE1149.1標準中這兩個信號都不是強制要求的。因此,在分析仿真器(JTAG)的工作原理時完全可以忽略這兩個信號的情況,而僅對IFEE 1149.1標準中強制要求的4個信號進行分析。 2 仿真器與簡易JTAG的性能對比 2.1 仿真器硬件連接
硬件連接如圖4所示。通過主機的并口與仿真器相連接,再將仿真器與目標板的JTAG調試接口連接。 2.2 性能對比 如表2所列,雖然通過不同的調試代理所需的下載時間有所不同,但是兩種仿真器所存在的性能差異仍然很明顯。在選用簡易JTAG下載文件的過程中,效率最高的調試代理所需的時間仍將近是仿真器的6倍,這就是仿真器的優勢所在。性能的提高必然要付出更多的代價,對開發者來說這個代價就是成本。經過市場的考察,仿真器的價格一般在千兀左右,而簡易JTAG的價格一般在百元左右,也就是存在將近10倍的差別。另外,還需要考慮的就是其兼容性。兼容性包括與H標板的兼容和與調試代理的兼容。在與目標板的兼容方面,后面的內容中會有詳細說明;在與調試代理的兼容方面也有所反映。簡易JTAG能夠與多個調試代理兼容,而仿真器只能使用其自帶的調試代理,具有一定的局限性。 2.3 原因分析 既然所有JTAG的基本原理都是一樣的,為什么這兩種仿真器的速度會存在如此大的差異,而且并不是所有的仿真器都是通用的呢? 首先介紹一下ARM7掃描鏈架構,如圖5所示。 與簡易JTAG比較,在掃描過程中,STR710的仿真器為ARM7TDMI添加了一個專門的指針通道以及相應的存儲空間store-multiple(STM)。因此在調試狀態下,仿真器不再利用系統除了邊界扣描寄存器外的任何其他資源,而是通過JTAG-style接口直接獲取系統的狀態信息,對系統狀態進行觀測以及調試,進而大大提高調試速度。 在STR7lO目標板中,ARM7TDMI可以通過外部信號和內部電路模塊(ICE)進入調試狀態。當目標板一旦進入調試狀態后,內核就將其與存儲器分離開來,這樣內核就可以保證在不影響系統正常運作的狀態下對系統的狀況進行監測和調試。同時,ARM7TDMI內部狀態的檢測是通過JTAG-style接口進行的,這個接口允許指令不通過數據線直接進入到內核的掃描通道。這樣在調試狀態下,STM就可以直接嵌入到指令通道并存儲ARM7TDMI寄存器的內容,在不影響系統工作的情況下將這些內容移位出來,使仿真器獲得目標板的狀態信息。 與仿真器比較,簡易JTAG完成的工作就要少得多。它只是完成了對主機信號的電平轉換,也就是相當于一個驅動器。上面提到的所有工作都要交給CPU去做,因此在使用簡易JTAG下載文件時目標板自然會相應地降低速度。尤其是當程序相對較大時,其速度就會大大降低,對于一些開發人員來講,這是相當致命的缺點。 關于仿真器與目標板的兼容問題,現在市場上的部分仿真器出現不同程度的不兼容問題,其產生的主要原因是對RTCK信號(DBGRQ信號極不常見,這里不作介紹)的處理情況存在一些差異(不包括周立功系列的實驗開發板,它們的仿真器使用的足單片機,與大多數的仿真器都不能兼容)。例如,在STR710中是將STCK信號與TCK信號直接相連了,而在nano2410A實驗開發板中是將STCK信號直接接地,因此造成了ARM JTAG Emulator在nano2410A實驗開發板中的不兼容。在對nano2410A主板的JTAG進行了小小的改動后就完成了仿真器兼容性的擴展。 備注:①JD4480X為北京交通大學自控室實驗開發板,STR710為北京微芯力科技有限公司實驗開發板;②實驗數據為秒表所測。 |