嵌入式掃盲--什麼是JTAG

1  JTAG(Joint Test Action Group;聯合測試行動小組)是一種國際標準測試協議(IEEE 1149.1兼容),主要用於芯片內部測試。如今多數的高級器件都支持JTAG協議,如DSP、FPGA器件等。標準的JTAG接口是4線:TMS、TCK、TDI、TDO,分別爲模式選擇、時鐘、數據輸入和數據輸出線。   JTAG最初是用來對芯片進行測試的,JTAG的基本原理是在器件內部定義一個TAP(Test Access Port;測試訪問口)經過專用的JTAG測試工具對進行內部節點進行測試。JTAG測試容許多個器件經過JTAG接口串聯在一塊兒,造成一個JTAG鏈,能實現對各個器件分別測試。如今,JTAG接口還經常使用於實現ISP(In-System Programmable�在線編程),對FLASH等器件進行編程。   JTAG編程方式是在線編程,傳統生產流程中先對芯片進行預編程現再裝到板上所以而改變,簡化的流程爲先固定器件到電路板上,再用JTAG編程,從而大大加快工程進度。JTAG接口可對PSD芯片內部的全部部件進行編程具備JTAG口的芯片都有以下JTAG引腳定義: TCK——測試時鐘輸入;TDI——測試數據輸入,數據經過TDI輸入JTAG口;TDO——測試數據輸出,數據經過TDO從JTAG口輸出;TMS——測試模式選擇,TMS用來設置JTAG口處於某種特定的測試模式。可選引腳TRST——測試復位,輸入引腳,低電平有效。含有JTAG口的芯片種類較多,如CPU、DSP、CPLD等。JTAG內部有一個狀態機,稱爲TAP控制器。TAP控制器的狀態機經過TCK和TMS進行狀態的改變,實現數據和指令的輸入。圖1爲TAP控制器的狀態機框圖。2 JTAG芯片的邊界掃描寄存器JTAG標準定義了一個串行的移位寄存器。寄存器的每個單元分配給IC芯片的相應引腳,每個獨立的單元稱爲BSC(Boundary-Scan Cell)邊界掃描單元。這個串聯的BSC在IC內部構成JTAG迴路,全部的BSR(Boundary-Scan Register)邊界掃描寄存器經過JTAG測試激活,平時這些引腳保持正常的IC功能。圖2爲具備JTAG口的IC內部BSR單元與引腳的關係。3 JTAG在線寫Flash的硬件電路設計和與PC的鏈接方式以含JTAG接口的StrongARM SA1110爲例,Flash爲Intel 28F128J32 16MB容量。SA1110的JTAG的TCK、TDI、TMS、TDO分別接PC並口的二、三、四、11線上,經過程序將對JTAG口的控制指令和目標代碼從PC的並口寫入JTAG的BSR中。在設計PCB時,必須將SA1110的數據線和地址線及控制線與Flash的地線線、數據線和控制線相連。因SA1110的數據線、地址線及控制線的引腳上都有其相應BSC,只要用JTAG指令將數據、地址及控制信號送到其BSC中,就可經過BSC對應的引腳將信號送給Flash,實現對Flash的操做。JTAG的系統板設計和連線關係如圖3所示。4 經過使用TAP狀態機的指令實行對Flash的操做經過TCK、TMS的設置,可將JTAG設置爲接收指令或數據狀態。JTAG經常使用指令以下:SAMPLE/PRELOAD——用此指令採樣BSC內容或將數據寫入BSC單元;EXTEST——當執行此指令時,BSC的內容經過引腳送到其鏈接的相應芯片的引腳,咱們就是經過這種指令實如今線寫Flash的;BYPASS——此指令將一個一位寄存器軒於BSC的移位迴路中,即僅有一個一位寄存器處於TDI和TDO之間。在PCB電路設計好後,便可用程序先將對JTAG的控制指令,經過TDI送入JTAG控制器的指令寄存器中。再經過TDI將要寫Flash的地址、數據及控制線信號入BSR中,並將數據鎖存到BSC中,用EXTEST指令經過BSC將寫入Flash。5 軟件編程在線寫Flash的程序用Turbo C編寫。程序使用PC的並行口,將程序經過含有JTAG的芯片寫入Flash芯片。程序先對PC的並口初始化,對JTAG口復位和測試,並讀Flash,判斷是否加鎖。如加鎖,必須先解鎖,方可進行操做。寫Flash以前,必須對其先擦除。將JTAG芯片設置在EXTEST模式,經過PC的並口,將目標文件經過JTAG寫入Flash,並在燒寫完成後進行校驗。程序主流程如圖4所示。經過JTAG的讀芯片ID子程序以下:void id_command(void){putp(1,0,IP); //Run-Test/Idle;使JTAG復位putp(1,0,IP); //Run-Test/Idleputp(1,0,IP); //Run-Test/Idleputp(1,0,IP); //Run-Test/Idleputp(1,1,IP);putp(1,1,IP); //選擇指令寄存器putp(1,0,IP); //捕獲指令寄存器putp(1,0,IP); /移位指令寄存器putp(0,0,IP); //SA1110JTAG口指令長度5位,IDCODE爲01100putp(1,0,IP);putp(1,0,IP);putp(0,0,IP);putp(0,0,IP);putp(0,1,IP); //退出指令寄存器putp(1,1,IP); //更新指令寄存器,執行指令寄存器中的指令putp(1,0,IP); //Run-Test/Idleputp(1,0,IP); //Run-Test/Idleputp(1,0,IP); //Run-Test/Idleputp(1,1,IP);putp(1,0,IP);if(check_id(SA1110ID))error_out("failed to read device ID for the SA-1110");putp(1,1,IP); //退出數據寄存器putp(1,1,IP); //更新數據寄存器putp(1,0,IP); //Run-Test/Idle,使JTAG復位putp(1,0,IP); //Run-Test/Idleputp(1,0,IP); //Run-Test/Idle}6 電路設計和編程中的注意事項①Flash芯片的WE、CE、OE等控制線必須與SA1110的BSR相連。只有這樣,才能經過BSR控制Flash的相應引腳。②JTAG口與PC並口的鏈接線要儘可能短,原則上不大於15cm。③Flash在擦寫和編程時所需的工做電流較大,在選用系統的供電芯片時,必須加以考慮。④爲提升對Flash的編程速度,儘可能使TCK不低於6MHz,可編寫燒寫Flash程序時實現
相關文章
相關標籤/搜索