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 年
JTAG工作原理,電氣特性,國際標準,接口解讀,掃描技術,JTAG電纜,JTAG鏈,JTAG引腳,經典用法,
JTAG工作原理
PC控制JTAG:用JTAG電纜連線PC的列印連線埠或者USB或者網口。最簡單的是連線列印連線埠。
TMS:在每個含有JTAG的晶片內部,會有個JTAG TAP控制器。TAP控制器是一個有16個狀態的狀態機,而TMS就是這玩意的控制信號。當TMS把各個晶片都連線在一起的時候,所有的晶片的TAP狀態跳轉是一致的。下面是TAP控制器的示意圖:
改變TMS的值,狀態就會發生跳轉。如果保持5個周期的高電平,就會跳回test-logic-rest,通常用來同步TAP控制器;
通常使用兩個最重要的狀態是Shift-DR和Shift-IR,兩者連線TDI和TDO使用。
IR:命令暫存器,你可以寫值到這個暫存器中通知JTAG乾某件事。每個TAP只有一個IR暫存器而且長度是一定的。
DR:TAP可以有多個DR暫存器,與IR暫存器相似,每個IR值會選擇不同的DR暫存器。
電氣特性
JTAG的接口是一種特殊的4/5個接腳接口連到晶片上 ,所以在電路版上的很多晶片可以將他們的JTAG接腳通過Daisy Chain的方式連在一起,並且積體電路只需連線到一個“JTAG連線埠”就可以訪問一塊印刷電路板上的所有積體電路。這些連線引腳是:
- TDI(測試數據輸入)
- TDO(測試數據輸出)
- TCK(測試時鐘)
- TMS(測試模式選擇)
- TRST(測試復位)可選。
因為只有一條數據線,通信協定有必要像其他串列設備接口,如SPI一樣為串列傳輸。時鐘由TCK引腳輸入。配置是通過TMS引腳採用狀態機的形式一次操作一位來實現的。每一位數據在每個TCK時鐘脈衝下分別由TDI和TDO引腳傳入或傳出。可以通過載入不同的命令模式來讀取晶片的標識,對輸入引腳採樣,驅動(或懸空)輸出引腳,操控晶片功能,或者旁路(將TDI與TDO連通以在邏輯上短接多個晶片的鏈路)。TCK的工作頻率依晶片的不同而不同,但其通常工作在10-100MHz(每位10-100ns)。
當在積體電路中進行邊界掃描時,被處理的信號是在同一塊IC的不同功能模組間的,而不是不同IC之間的。
TRST引腳是一個可選的相對待測邏輯低電平有效的復位開關——通常是異步的,但有時也是同步的,依晶片而定。如果該引腳沒有定義,則待測邏輯可由同步時鐘輸入復位指令而復位。
國際標準
JTAG也是一種國際標準測試協定(IEEE 1149.1兼容),主要用於晶片內部測試。現今多數的高級器件都支持JTAG協定,如DSP、FPGA、ARM、部分單片機器件等。標準的JTAG接口是4線:TMS、TCK、TDI、TDO,分別為模式選擇、時鐘、數據輸入和數據輸出線。 相關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大致分兩類,一類用於測試晶片的電氣特性,檢測晶片是否有問題;一類用於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的中斷控制暫存器完成。
現今就我知道的,針對ARM,只有FlashPGM這個軟體提供寫FLASH功能,但使用也非常麻煩。AXD,ADW都不提供寫FLASH功能。寫Flash的方法可以是,自己寫一個簡單的程式,專門用於寫目標板的FLASH,利用JTAG接口,下載到目標板,再把要燒寫的目標碼裝成BIN格式,也下到目標板(地址和燒FLASH的程式的地址不同),然後運行已經下載的燒FLASH的程式。使用這種方式,比起FlashPGM的寫Flash,速度似乎要快一些。
掃描技術
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電纜
關於簡單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顯得很繁忙。
JTAG鏈
因為只有一條數據線,通信協定有必要像其他串列設備接口,如SPI一樣為串列傳輸。時鐘由TCK引腳輸入。配置是通過TMS引腳採用狀態機的形式一次操作一位來實現的。每一位數據在每個TCK時鐘脈衝下分別由TDI和TDO引腳傳入或傳出。可以通過載入不同的命令模式來讀取晶片的標識,對輸入引腳採樣,驅動(或懸空)輸出引腳,操控晶片功能,或者旁路(將TDI與TDO連通以在邏輯上短接多個晶片的鏈路)。TCK的工作頻率依晶片的不同而不同,但其通常工作在10-100MHz(每位10-100ns)。
當在積體電路中進行邊界掃描時,被處理的信號是在同一塊IC的不同功能模組間的,而不是不同IC之間的。
TRST引腳是一個可選的相對待測邏輯低電平有效的復位開關——通常是異步的,但有時也是同步的,依晶片而定。如果該引腳沒有定義,則待測邏輯可由同步時鐘輸入復位指令而復位。
儘管如此,極少消費類產品提供外部的JTAG連線埠接口,但作為開發樣品的殘留,這些接口在印刷電路板上十分常見。在研發後,這些接口常常為反向工程提供了非常良好的途徑。
當在積體電路中進行邊界掃描時,被處理的信號是在同一塊IC的不同功能模組間的,而不是不同IC之間的。
TRST引腳是一個可選的相對待測邏輯低電平有效的復位開關——通常是異步的,但有時也是同步的,依晶片而定。如果該引腳沒有定義,則待測邏輯可由同步時鐘輸入復位指令而復位。
儘管如此,極少消費類產品提供外部的JTAG連線埠接口,但作為開發樣品的殘留,這些接口在印刷電路板上十分常見。在研發後,這些接口常常為反向工程提供了非常良好的途徑。
JTAG引腳
JTAG發展到現在已經有腳了,通常四個腳:TDI,TDO,TMS,TCK,當然還有個復位腳TRST。對於晶片上的JTAG的腳實際上是專用的。
TDI:測試數據輸入,數據通過TDI輸入JTAG口;
TDO:測試數據輸出,數據通過TDO從JTAG口輸出;
TMS:測試模式選擇,用來設定JTAG口處於某種特定的測試模式;
TCK:測試時鐘輸入;
TRST:測試復位;
經典用法
CPU和FPGA製造商允許JTAG用來連線埠debug;FPGA廠商允許通過JTAG配置FPGA,使用JTAG信號通入FPGA核。