複製鏈接
請複製以下鏈接發送給好友

JTAG

鎖定
JTAG聯合測試工作組(Joint Test Action Group)的簡稱,是在名為標準測試訪問端口和邊界掃描結構的IEEE的標準1149.1的常用名稱。此標準用於驗證設計與測試生產出的印刷電路板功能。
1990年JTAG正式由IEEE的1149.1-1990號文檔標準化,在1994年,加入了補充文檔對邊界掃描描述語言(BSDL)進行了説明。從那時開始,這個標準被全球的電子企業廣泛採用。邊界掃描幾乎成為了JTAG的同義詞。
在設計印刷電路版時,當前最主要用在測試集成電路的副區塊,而且也提供一個在嵌入式系統很有用的調試機制,提供一個在系統中方便的"後門"。當使用一些調試工具像電路內模擬器用JTAG當做信號傳輸的機制,使得程序員可以經由JTAG去讀取集成在CPU上的調試模塊。調試模塊可以讓程序員調試嵌入式系統中的軟件。
中文名
聯合測試行為組織
外文名
Joint Test Action Group
簡    寫
JTAG
成立時間
1985年

JTAGJTAG工作原理

PC控制JTAG:用JTAG電纜連接PC的打印端口或者USB或者網口。最簡單的是連接打印端口 [1] 
TMS:在每個含有JTAG的芯片內部,會有個JTAG TAP控制器。TAP控制器是一個有16個狀態的狀態機,而TMS就是這玩意的控制信號。當TMS把各個芯片都連接在一起的時候,所有的芯片的TAP狀態跳轉是一致的。下面是TAP控制器的示意圖:
圖1 圖1
改變TMS的值,狀態就會發生跳轉。如果保持5個週期的高電平,就會跳回test-logic-rest,通常用來同步TAP控制器;
通常使用兩個最重要的狀態是Shift-DR和Shift-IR,兩者連接TDI和TDO使用。
IR:命令寄存器,你可以寫值到這個寄存器中通知JTAG幹某件事。每個TAP只有一個IR寄存器而且長度是一定的。
DR:TAP可以有多個DR寄存器,與IR寄存器相似,每個IR值會選擇不同的DR寄存器。

JTAG電氣特性

JTAG的接口是一種特殊的4/5個接腳接口連到芯片上 ,所以在電路版上的很多芯片可以將他們的JTAG接腳通過Daisy Chain的方式連在一起,並且集成電路只需連接到一個“JTAG端口”就可以訪問一塊印刷電路板上的所有集成電路。這些連接引腳是 [2] 
  1. TDI(測試數據輸入)
  2. TDO(測試數據輸出)
  3. TCK(測試時鐘)
  4. TMS(測試模式選擇)
  5. TRST(測試復位)可選。
因為只有一條數據線,通信協議有必要像其他串行設備接口,如SPI一樣為串列傳輸。時鐘由TCK引腳輸入。配置是通過TMS引腳採用狀態機的形式一次操作一位來實現的。每一位數據在每個TCK時鐘脈衝下分別由TDI和TDO引腳傳入或傳出。可以通過加載不同的命令模式來讀取芯片的標識,對輸入引腳採樣,驅動(或懸空)輸出引腳,操控芯片功能,或者旁路(將TDI與TDO連通以在邏輯上短接多個芯片的鏈路)。TCK的工作頻率依芯片的不同而不同,但其通常工作在10-100MHz(每位10-100ns)。
當在集成電路中進行邊界掃描時,被處理的信號是在同一塊IC的不同功能模塊間的,而不是不同IC之間的。
TRST引腳是一個可選的相對待測邏輯低電平有效的復位開關——通常是異步的,但有時也是同步的,依芯片而定。如果該引腳沒有定義,則待測邏輯可由同步時鐘輸入復位指令而復位。
儘管如此,極少消費類產品提供外部的JTAG端口接口,但作為開發樣品的殘留,這些接口在印刷電路板上十分常見。在研發後,這些接口常常為反向工程提供了非常良好的途徑。

JTAG國際標準

JTAG JTAG
JTAG也是一種國際標準測試協議(IEEE 1149.1兼容),主要用於芯片內部測試。現今多數的高級器件都支持JTAG協議,如DSP、FPGA、ARM、部分單片機器件等。標準的JTAG接口是4線:TMSTCKTDITDO,分別為模式選擇、時鐘、數據輸入和數據輸出線。 相關JTAG引腳的定義為:TCK為測試時鐘輸入;TDI為測試數據輸入,數據通過TDI引腳輸入JTAG接口;TDO為測試數據輸出,數據通過TDO引腳從JTAG接口輸出;TMS為測試模式選擇,TMS用來設置JTAG接口處於某種特定的測試模式;TRST為測試復位,輸入引腳,低電平有效。GND
TI還定義了一種叫SBW-JTAG的接口,用來在引腳較少的芯片上通過最少的利用引腳實現JTAG接口,它只有兩條線,SBWTCK,SBWTDIO。實際使用時一般通過四條線連接,VCC,SBWTCK,SBWTDIO,GND,這樣就可以很方便的實現連接,又不會佔用大量引腳。
JTAG最初是用來對芯片進行測試的,基本原理是在器件內部定義一個TAP(Test Access Port測試訪問口)通過專用的JTAG測試工具對內部節點進行測試。JTAG測試允許多個器件通過JTAG接口串聯在一起,形成一個JTAG鏈,能實現對各個器件分別測試。現今,JTAG接口還常用於實現ISP(In-System Programmable;在線編程),對FLASH等器件進行編程。
JTAG編程方式是在線編程,傳統生產流程中先對芯片進行預編程後再裝到板上因此而改變,簡化的流程為先固定器件到電路板上,再用JTAG編程,從而大大加快工程進度。JTAG接口可對DSP芯片內部的所有部件進行編程。
在硬件結構上,JTAG 接口包括兩部分:JTAG 端口和控制器。與JTAG 接口兼容的器件可以是微處理器MPU)、微控制器(MCU)、PLD、CPL、FPGA、DSP、ASIC 或其它符合IEEE1149.1 規範的芯片。IEEE1149.1 標準中規定對應於數字集成電路芯片的每個引腳都設有一個移位寄存單元,稱為邊界掃描單元BSC。它將JTAG 電路與內核邏輯電路聯繫起來,同時隔離內核邏輯電路和芯片引腳。由集成電路的所有邊界掃描單元構成邊界掃描寄存器BSR。邊界掃描寄存器電路僅在進行JTAG 測試時有效,在集成電路正常工作時無效,不影響集成電路的功能。

JTAG接口解讀

JTAG接口解讀
通常所説的JTAG大致分兩類,一類用於測試芯片的電氣特性,檢測芯片是否有問題;一類用於Debug;一般支持JTAG的CPU內都包含了這兩個模塊。
一個含有JTAG Debug接口模塊的CPU,只要時鐘正常,就可以通過JTAG接口訪問CPU的內部寄存器和掛在CPU總線上的設備,如FLASH,RAM,SOC(比如4510B,44Box,AT91M系列)內置模塊的寄存器,像UART,Timers,GPIO等等的寄存器。
上面説的只是JTAG接口所具備的能力,要使用這些功能,還需要軟件的配合,具體實現的功能則由具體的軟件決定。
例如下載程序到RAM功能。瞭解SOC的都知道,要使用外接的RAM,需要參照SOC DataSheet的寄存器説明,設置RAM的基地址,總線寬度,訪問速度等等。有的SOC則還需要Remap,才能正常工作。運行Firmware時,這些設置由Firmware的初始化程序完成。但如果使用JTAG接口,相關的寄存器可能還處在上電值,甚至時錯誤值,RAM不能正常工作,所以下載必然要失敗。要正常使用,先要想辦法設置RAM。在ADW中,可以在Console窗口通過Let 命令設置,在AXD中可以在Console窗口通過Set命令設置。
下面是一個設置AT91M40800的命令序列,關閉中斷,設置CS0-CS3, 並進行Remap,適用於AXD(ADS帶的Debug)
setmem 0xfffff124,0xFFFFFFFF,32 ---關閉所有中斷
setmem 0xffe00000,0x0100253d,32 ---設置CS0
setmem 0xffe00004,0x02002021,32 ---設置CS1
setmem 0xffe00008,0x0300253d,32 ---設置CS2
setmem 0xffe0000C,0x0400253d,32 ---設置CS3
setmem 0xffe00020,1,32 ---Remap
如果要在ADW(SDT帶的DEBUG)中使用,則要改為:
let 0xfffff124=0xFFFFFFFF ---關閉所有中斷
let 0xffe00000=0x0100253d ---設置CS0
let 0xffe00004=0x02002021 ---設置CS1
let 0xffe00008=0x0300253d ---設置CS2
let 0xffe0000C=0x0400253d ---設置CS3
let 0xffe00020=1 ---Remap
為了方便使用,可以將上述命令保存為一個文件config.ini, 在Console窗口輸入 ob config.ini 即可執行。
使用其他debug,大體類似,只是命令和命令的格式不同。
設置RAM時,設置的寄存器以及寄存器的值必須和要運行程序的設置一致。一般編譯生成的目標文件是ELF格式,或類似的格式,包含有目標碼運行地址,運行地址在Link時候確定。Debug下載程序時根據ELF文件中的地址信息下載程序到指定的地址。如果在把RAM的基地址設置為0x10000000, 而在編譯的時候指定Firmware的開始地址在0x02000000, 下載的時候,目標碼將被下載到0x02000000,顯然下載會失敗。
通過JTAG下載程序前應關閉所有中斷,這一點和Firmware初始化時關閉中斷的原因相同。在使用JTAG接口的時候,各中斷的使能未知,尤其是FLASH裏有可執行碼的情況,可能會有一些中斷被使能。使用JTAG下載完代碼,要執行時,有可能因為未完成初始化就產生了中斷,導致程序異常。所以,需要先關閉中斷,一般通過設置SOC的中斷控制寄存器完成。
使用JTAG寫Flash。在理論上,通過JTAG可以訪問CPU總線上的所有設備,所以應該可以寫FLASH,但是FLASH寫入方式和RAM大不相同,需要特殊的命令,而且不同的FLASH擦除,編程命令不同,而且塊的大小,數量也不同,很難提供這一項功能。所以一般Debug不提供寫Flash功能,或者僅支持少量幾種Flash。
現今就我知道的,針對ARM,只有FlashPGM這個軟件提供寫FLASH功能,但使用也非常麻煩。AXD,ADW都不提供寫FLASH功能。寫Flash的方法可以是,自己寫一個簡單的程序,專門用於寫目標板的FLASH,利用JTAG接口,下載到目標板,再把要燒寫的目標碼裝成BIN格式,也下到目標板(地址和燒FLASH的程序的地址不同),然後運行已經下載的燒FLASH的程序。使用這種方式,比起FlashPGM的寫Flash,速度似乎要快一些。

JTAG掃描技術

JTAG是一種所謂的邊界掃描技術。
邊界掃描測試是在20世紀80年代中期作為解決PCB物理訪問問題的JTAG接口發展起來的,這樣的問題是新的封裝技術導致電路板裝配日益擁擠所產生的。邊界掃描在芯片級層次上嵌入測試電路,以形成全面的電路板級測試協議。利用邊界掃描--自1990年以來的行業標準IEEE 1149.1--您甚至能夠對最複雜的裝配進行測試、調試和在系統設備編程,並且診斷出硬件問題。
邊界掃描的優點:
通過提供對掃描鏈的IO的訪問,可以消除或極大地減少對電路板上物理測試點的需要,這就會顯著節約成本,因為電路板佈局更簡單、測試夾具更廉價、電路中的測試系統耗時更少、標準接口的使用增加、上市時間更快。除了可以進行電路板測試之外,邊界掃描允許在PCB貼片之後,在電路板上對幾乎所有類型的CPLD和閃存進行編程,無論尺寸或封裝類型如何。在系統編程可通過降低設備處理、簡化庫存管理和在電路板生產線上集成編程步驟來節約成本並提高產量。
邊界掃描原理:
IEEE 1149.1 標準規定了一個四線串行接口(第五條線是可選的),該接口稱作測試訪問端口(TAP),用於訪問複雜的集成電路(IC),例如微處理器、DSP、ASIC和CPLD。除了TAP之外,混合IC也包含移位寄存器狀態機,以執行邊界掃描功能。在TDI(測試數據輸入)引線上輸入到芯片中的數據存儲在指令寄存器中或一個數據寄存器中。串行數據從TDO(測試數據輸出)引線上離開芯片。邊界掃描邏輯由TCK(測試時鐘)上的信號計時,而且TMS(測試模式選擇)信號驅動TAP控制器的狀態。TRST(測試重置)是可選項。根據相關數據手冊中的説明,TRST、TDI、TMS引腳上需要接一個10KΩ的上拉電阻,而TCK需要接一個10KΩ的下拉電阻。
在PCB上可串行互連多個可兼容掃描功能的IC,形成一個或多個掃描鏈,每一個鏈都由其自己的TAP。每一個掃描鏈提供電氣訪問,從串行TAP接口到作為鏈的一部分的每一個IC上的每一個引線。在正常的操作過程中,IC執行其預定功能,就好像邊界掃描電路不存在。但是,當為了進行測試或在系統編程而激活設備的掃描邏輯時,數據可以傳送到IC中,並且使用串行接口從IC中讀取出來。這樣數據可以用來激活設備核心,將信號從設備引線發送到PCB上,讀出PCB的輸入引線並讀出設備輸出。
嵌入式系統設計中,一些高檔的微處理器都帶有JTAG接口,方便多目標系統進行測試,同時還可以實現flash編程。

JTAGJTAG電纜

關於簡單JTAG電纜
有各種各樣簡單JTAG電纜,其實只是一個電平轉換電路,同時還起到保護作用。JTAG的邏輯則由運行在PC上的軟件實現,所以在理論上,任何一個簡單JTAG電纜,都可以支持各種應用軟件,如Debug等。可以使用同一個JTAG電纜寫Xilinx CPLD,AXD/ADW調試程序。關鍵在於軟件的支持,大多數軟件都不提供設定功能,因而只能支持某種JTAG電纜。
關於簡單JTAG電纜的速度
JTAG 是串行接口,使用打印口的簡單JTAG電纜,利用的是打印口的輸出帶鎖存的特點,使用軟件通過I/O產生JTAG時序。由JTAG標準決定,通過JTAG 寫/讀一個字節要一系列的操作,根據我的分析,使用簡單JTAG電纜,利用打印口,通過JTAG輸出一個字節到目標板,平均需要43個打印口I/O, 在我機器上(P4 1.7G),每秒大約可進行660K次 I/O 操作,所以下載速度大約在660K/43, 約等於15K Byte/S. 對於其他機器,I/O速度大致相同,一般在600K ~ 800K.
關於如何提高JTAG下載速度。
很明顯,使用簡單JTAG電纜無法提高速度。要提高速度,大致有兩種辦法,
1。使用嵌入式系統提供JTAG接口,嵌入式系統和微機之間通過USB/Ethernet相連,這要求使用MCU。
2。使用CPLD/FPGA提供JTAG接口,CPLD/FPGA和微機之間使用EPP接口(一般微機打印口都支持EPP模式),EPP接口完成微機和CPLD/FPGA之間的數據傳輸,CPLD/FPGA完成JTAG時序。
這兩種方法本人都實現過。第一個方法可以達到比較高的速度,實測超過了200KByte/S(注意:是Byte,不是Bit);但是相對來説,硬件複雜,製造相對複雜。第二種相對來説,下載速度要慢一些,最快時達到96KByte/S,但電路簡單,製造方便,而且速度可以滿足需要。第二種方案還有一個缺點,由於進行I/O操作時,CPU不會被釋放,因此在下載程序時,微機CPU顯得很繁忙。

JTAGJTAG鏈

因為只有一條數據線,通信協議有必要像其他串行設備接口,如SPI一樣為串行傳輸。時鐘由TCK引腳輸入。配置是通過TMS引腳採用狀態機的形式一次操作一位來實現的。每一位數據在每個TCK時鐘脈衝下分別由TDI和TDO引腳傳入或傳出。可以通過加載不同的命令模式來讀取芯片的標識,對輸入引腳採樣,驅動(或懸空)輸出引腳,操控芯片功能,或者旁路(將TDI與TDO連通以在邏輯上短接多個芯片的鏈路)。TCK的工作頻率依芯片的不同而不同,但其通常工作在10-100MHz(每位10-100ns)。
當在集成電路中進行邊界掃描時,被處理的信號是在同一塊IC的不同功能模塊間的,而不是不同IC之間的。
TRST引腳是一個可選的相對待測邏輯低電平有效的復位開關——通常是異步的,但有時也是同步的,依芯片而定。如果該引腳沒有定義,則待測邏輯可由同步時鐘輸入復位指令而復位。
儘管如此,極少消費類產品提供外部的JTAG端口接口,但作為開發樣品的殘留,這些接口在印刷電路板上十分常見。在研發後,這些接口常常為反向工程提供了非常良好的途徑 [3] 

JTAGJTAG引腳

JTAG已經有腳了,通常四個腳:TDI,TDO,TMS,TCK,當然還有個復位腳TRST。對於芯片上的JTAG的腳實際上是專用的。
TDI:測試數據輸入,數據通過TDI輸入JTAG口;
TDO:測試數據輸出,數據通過TDO從JTAG口輸出;
TMS:測試模式選擇,用來設置JTAG口處於某種特定的測試模式;
TCK:測試時鐘輸入;
TRST:測試復位;

JTAG經典用法

CPU和FPGA製造商允許JTAG用來端口debug;FPGA廠商允許通過JTAG配置FPGA,使用JTAG信號通入FPGA核。
參考資料
  • 1.    劉軍. JTAG技術在PCB測試中的應用[J]. 科技信息, 2010(21):430-431.
  • 2.    王永生[1], 巫鏡廷[2], 等. 採用JTAG結構實現SoC芯片的片上仿真器及接口[J]. 計算機工程與應用, 2002(16):240-243.
  • 3.    JTAG專業術語:  .電子系統設計[引用日期2012-06-25]