嵌入式系統(tǒng)中JTAG接口編程技術(shù)探討
出處:電子技術(shù)應(yīng)用 發(fā)布于:2011-09-05 11:16:40
嵌入式系統(tǒng)(Embedded system),是一種“完全嵌入受控器件內(nèi)部,為特定應(yīng)用而設(shè)計(jì)的專用計(jì)算機(jī)系統(tǒng)”,根據(jù)英國電器工程師協(xié)會( U.K. Institution of Electrical Engineer)的定義,嵌入式系統(tǒng)為控制、監(jiān)視或輔助設(shè)備、機(jī)器或用于工廠運(yùn)作的設(shè)備。與個(gè)人計(jì)算機(jī)這樣的通用計(jì)算機(jī)系統(tǒng)不同,嵌入式系統(tǒng)通常執(zhí)行的是帶有特定要求的預(yù)先定義的任務(wù)。由于嵌入式系統(tǒng)只針對一項(xiàng)特殊的任務(wù),設(shè)計(jì)人員能夠?qū)λM(jìn)行優(yōu)化,減小尺寸降低成本。由于個(gè)人數(shù)碼助理(PDA,Personal Digital Assistant)及手持設(shè)備在硬件上設(shè)計(jì)的特性,嵌入式設(shè)備在軟件上的擴(kuò)充性比其他設(shè)備更好。
隨著手持式電子設(shè)備的迅猛發(fā)展,因?yàn)槭鞘殖衷O(shè)備,所以要求體積小、重量輕,耗電少,這些特點(diǎn)決定了設(shè)備內(nèi)部的印刷板的尺寸比常規(guī)的電子設(shè)備小的多,而且元器件密度大,雙面貼裝。這給設(shè)計(jì)人員帶來了若干問題,如操作系統(tǒng)代碼和應(yīng)用程序的寫入,板上芯片的測試等。本文作者結(jié)合實(shí)際工作,就嵌入式系統(tǒng)中如何通過JTAG接口進(jìn)行FLASH芯片編程作了探討。
1 幾種常用芯片編程方法
在嵌入式系統(tǒng)開發(fā)和產(chǎn)品生產(chǎn)過程中,對系統(tǒng)程序存儲器編程主要使用三種編程方法,通過編程器編程、使用板上編程器編程和在系統(tǒng)編程。
1.1 通過編程器編程
這是在PROM、EPROM、PQL等芯片游行時(shí)常用的編程方法。即在可編程芯片焊裝到電路板之前,使用專門的編程器對芯片進(jìn)行代碼或數(shù)據(jù)的寫入,然后將已編程的芯片安裝到電路板上。
使用編程器編程特別適用于DIP封裝的芯片。如是是其它類型的封裝,則必須使用相應(yīng)的適配器。這種方法的缺點(diǎn)滴是零要手工進(jìn)行待編程芯片的插入,鎖定等工作,容易造成芯片的方向錯(cuò)誤、引腳錯(cuò)位等,導(dǎo)致編程效率降低。
1.2 使用板上編程器編程 (OBP)
這種方法是在電路板上所有的芯片都已經(jīng)焊接完畢后,再對電路板上的可編程芯片進(jìn)行編程。通過專用電纜將電路板與外部計(jì)算機(jī)連接,由于計(jì)算機(jī)的應(yīng)用程序進(jìn)行板上可編程芯片的代碼或數(shù)據(jù)寫入。芯片擦除編程所需用的電源、控制信號、地址、數(shù)據(jù)和相關(guān)的命令都由板外的編程控制器提供,在進(jìn)行板上編程時(shí),需要通過專門的輔助電路關(guān)斷目標(biāo)板上CPU的電源或?qū)⑵渫獠拷涌谛盘栐O(shè)置為高阻狀態(tài),以免與編程時(shí)的地址、數(shù)據(jù)和控制信號發(fā)生沖突。
在板上編程可以克服芯片引腳錯(cuò)位,方向插反等問題,避免燒毀芯片,編程錯(cuò)誤,保證了芯片編程的高成功率和可靠性。另一個(gè)優(yōu)點(diǎn)就是及時(shí)軟件升級,可以做到在產(chǎn)品出廠之時(shí)系統(tǒng)使用版本的固化軟件。這對于日新月異的手持電子設(shè)備而言是必須的。
1.3 在系統(tǒng)編程(ISP、ISW)
這種方法直接利用系統(tǒng)中帶有JTAG接口的器件,如CPU、CPLD、FPGA等,執(zhí)行對系統(tǒng)程序存儲芯片的內(nèi)容和擦除和編程操作。一般而言,的微處理器都帶有JTAG接口,系統(tǒng)程存儲器的數(shù)據(jù)總線,地址總線和控制接口直接接在微處理器上。編程時(shí),使用PC機(jī)內(nèi)插卡或并行的接口通過專用電纜將系統(tǒng)電路板與PC機(jī)聯(lián)系起來,在PC機(jī)上運(yùn)行相關(guān)的程序,將編程數(shù)據(jù)及控制信號傳送到JTAG接口的芯片上,利用相應(yīng)的指令從微處理器的引腳按照FLASH芯片的編程時(shí)序輸出到FLASH存儲器。
2 JGAG接口介紹
JTAG(Joint Test Action Group)聯(lián)合測試行動小組)是一種國際標(biāo)準(zhǔn)測試協(xié)議(IEEE 1149.1兼容),主要用于芯片內(nèi)部測試。現(xiàn)在多數(shù)的器件都支持JTAG協(xié)議,如DSP、FPGA器件等。標(biāo)準(zhǔn)的JTAG接口是4線:TMS、 TCK、TDI、TDO,分別為模式選擇、時(shí)鐘、數(shù)據(jù)輸入和數(shù)據(jù)輸出線。
JTAG初是用來對芯片進(jìn)行測試的,基本原理是在器件內(nèi)部定義一個(gè)TAP(Test Access Port�測試訪問口)通過專用的JTAG測試工具對進(jìn)行內(nèi)部節(jié)點(diǎn)進(jìn)行測試。JTAG測試允許多個(gè)器件通過JTAG接口串聯(lián)在一起,形成一個(gè)JTAG鏈,能實(shí)現(xiàn)對各個(gè)器件分別測試?,F(xiàn)在,JTAG接口還常用于實(shí)現(xiàn)ISP(In-System rogrammable�在線編程),對FLASH等器件進(jìn)行編程。
JTAG編程方式是在線編程,傳統(tǒng)生產(chǎn)流程中先對芯片進(jìn)行預(yù)編程現(xiàn)再裝到板上因此而改變,簡化的流程為先固定器件到電路板上,再用JTAG編程,從而大大加快工程進(jìn)度。JTAG接口可對PSD芯片內(nèi)部的所有部件進(jìn)行編程。
通常所說的JTAG大致分兩類,一類用于測試芯片的電氣特性,檢測芯片是否有問題;一類用于Debug;一般支持JTAG的CPU內(nèi)都包含了這兩個(gè)模塊。
一個(gè)含有JTAG Debug接口模塊的CPU,只要時(shí)鐘正常,就可以通過JTAG接口訪問CPU的內(nèi)部寄存器和掛在CPU總線上的設(shè)備,如FLASH,RAM,SOC(比如4510B,44Box,AT91M系列)內(nèi)置模塊的寄存器,象UART,Timers,GPIO等等的寄存器。
2.1 JTAG的結(jié)構(gòu)
在硬件結(jié)構(gòu)上,JTAG的接口包括兩個(gè)部分,JTAG端口和控制器。與JTAG接口兼容的器件可以是微處理器(MPU)微控制器(MCU)PLD CPL FPGA ASIC或其它符合IEEE1149。1規(guī)范的芯片。IEEE1149。1標(biāo)準(zhǔn)中規(guī)定對應(yīng)數(shù)字集成電路的每個(gè)引腳都設(shè)有一個(gè)移動存寄單元。稱為邊界掃描單元BSC。它將JTAG電路與內(nèi)核邏輯電路聯(lián)系起來,同時(shí)隔離內(nèi)核電路和芯片引腳。由集成電路的所有邊界掃描構(gòu)成單元掃描寄存器BSR。邊界掃描寄存器僅在進(jìn)行JTAG測試時(shí)有效,在集成電路工作正常無效,不影響集成電路的功能 。具有JTAG接口的芯片內(nèi)部結(jié)構(gòu)如圖1所示:

測試邏輯的電路包括3個(gè)主要內(nèi)容
·測試訪問端口(TAP)控制器
TAP控制器提供在嵌入在JTAG兼容器件內(nèi)部的測試功能電路的訪問控制,是一個(gè)同步狀態(tài)機(jī)。每個(gè)JTAG兼容的器件都有自己的TAP控制器。通過測試模式選擇TMS和時(shí)鐘信號TCK控制其狀態(tài)轉(zhuǎn)移,實(shí)現(xiàn)由IEEE149。1標(biāo)準(zhǔn)確定的測試邏輯電路的工作時(shí)序。
·指令寄存器
指令寄存器是基于電路的移動寄存器,通過它可以串行輸入執(zhí)行各種操作的指令。
·數(shù)據(jù)寄存組。
數(shù)據(jù)寄存器組是一組基于電路的移位寄存器。操作指令被串行裝入由當(dāng)前的指令所選擇的數(shù)據(jù)寄存器。隨著操作的執(zhí)行,測試結(jié)果被移出。
2.2 JTAG引腳定義
JTAG接口主要包括四個(gè)引腳下:TMS TCK TDI 和TCO及一個(gè)可選配的引腳TRST,用于驅(qū)動電路模塊和控制執(zhí)行規(guī)定的操作。各引腳的功能如下:
·TCK:JTAG測試時(shí)鐘,為TAP控制器和寄存器提供測試參考。在TCK的同步作用下通過TDI和TDO引腳下串行移入或移出數(shù)據(jù)及指令。同時(shí),TCK為TAP控制器狀態(tài)機(jī)提供時(shí)鐘。
TMS:TAP控制器的三項(xiàng)式輸入信號。TCK的上升沿時(shí)刻TMS的狀態(tài)確定TAP控制器即將進(jìn)入的工作狀態(tài)。通常TMS引腳具有內(nèi)部上拉電阻 ,以保證該引腳在沒有驅(qū)動時(shí)處于邏輯1狀態(tài)。
TDI:JTAG指令和數(shù)據(jù)寄存器的串行數(shù)據(jù)輸入端。TAP控制器的當(dāng)前狀態(tài)以及保持在指令寄存器中的具體指令決定對于一個(gè)特定的操作由TDI裝入哪個(gè)寄存器。在TCK的上升沿時(shí)刻,TDI引腳狀態(tài)被除數(shù)采樣,結(jié)果送到JTAG寄存器組。
TRST:測試復(fù)位輸入信號,低電平有效,為TAP控制器提供異步初始化信號。
2.3 JTAG測試訪問端口(TAP)控制器
TAP控制器是一個(gè)16狀態(tài)的有限狀態(tài)機(jī),為JTAG提供控制邏輯,控制進(jìn)入到JTAG結(jié)構(gòu)中各種寄存器內(nèi)數(shù)據(jù)通信的掃描與操作。TAP狀態(tài)轉(zhuǎn)移圖如圖2所示,由TCK同步時(shí)鐘上升沿時(shí)刻TMS引腳的邏輯電平?jīng)Q定狀態(tài)轉(zhuǎn)移的過程,(高電平TMS=1,低電平TMS=0)。對于由TDI端輸入到器件的掃描信號共有兩個(gè)狀態(tài)變化路徑:一個(gè)用于移入指令到指令寄存器;另一個(gè)用于移入數(shù)據(jù)到有效的數(shù)據(jù)寄存器,該寄存器由當(dāng)前指令確定。

據(jù)的移入或移出。圖2表示了TAP狀態(tài)機(jī)的基本流程,描述了從一個(gè)狀態(tài)到另一個(gè)狀態(tài)TMS信號的變化,在芯片JTAG接口的TRST引腳上加一個(gè)低脈沖信號可以使TAP控制器復(fù)位到測試邏輯復(fù)位(Test-Logic-Reset)主狀態(tài)。
2.4 JTAG接口控制指令
控制指令用于控制JTAG接口進(jìn)行各種操作,控制指令包括基本指令和擴(kuò)展指令。JTAG接口標(biāo)準(zhǔn)要求芯片支持的基本指令有:EXTEST INTEST SAMPLE/PRELOAD BYPASS IDCODE HIGHZ。芯片廠商可以根據(jù)實(shí)際需要選擇或添加擴(kuò)展指令。
3 JTAG接口的使用
通過JTAG接口可以進(jìn)行電路板及芯片的測試,也可以實(shí)現(xiàn)對目擊者標(biāo)電路板上的程序存儲器編程。本文僅僅討論使用JTAG接口對板上FLASH存儲器的編程。一般,可以利用專用的PC機(jī)內(nèi)插卡式硬件控制器或獨(dú)立的編程器訪問JTAG器件。也可以直接由PC機(jī)的并行接口模擬JTAG時(shí)序,硬件控制器或編程器通過專用電纜連接到目標(biāo)電路板上,被編程的FLASH存儲器芯片的地址線,數(shù)據(jù)線和控制信號線接到JTAG兼容芯片的相應(yīng)引腳上。在編程FLASH芯片時(shí),需要做的工作主要有:①PC機(jī)發(fā)送指令或數(shù)據(jù)到JTAG兼容芯片的邊界掃描寄存器(BSR);②將保存在BSR中的指令或數(shù)據(jù)通過JTAG存儲器。這個(gè)過程是由運(yùn)行在PC機(jī)上的軟件進(jìn)行控制的。
3.1 硬件配置
在某個(gè)設(shè)計(jì)項(xiàng)目中,使用了intel公司的StrongARM芯片SA-100和該公司的Strata系列FLASH存儲器芯片/SA-100芯片是種高性能、低功耗、集成有多種常用接口的SOC微處理器芯片 。strata FLASH是intel公司使用獨(dú)創(chuàng)的1 個(gè)存儲單元記錄2比特?cái)?shù)據(jù)技術(shù)制造的閃速存儲芯片 ,其特點(diǎn)是體積小,容量大,成本低,非常適用于程序代碼與數(shù)據(jù)的存儲。選擇的型號為:E28F128J3A,可以配置成8位或16位數(shù)據(jù)線方式,SA-1110為32位的芯片,其外擴(kuò)的程序存儲器和數(shù)據(jù)存儲器也為32位,因此程序存儲器需要2片28F128J3A配置為32位形式,如圖3所示。

從圖3中可看出,使用PC機(jī)并行接口的幾個(gè)數(shù)據(jù)線入信號線來構(gòu)成JTAG接口引腳信號,對應(yīng)關(guān)系如表1所示,采用信號線直接連接的方法簡便易行,只需要一條專用的電纜即可操作JTAG接口。PC機(jī)并行接口與JTAG接口信號對應(yīng)表:

3.2 控制軟件
SA-1110芯片的JTAG接口實(shí)現(xiàn)了IEEE1149。1標(biāo)準(zhǔn)的部分功能,不能實(shí)現(xiàn)對芯片內(nèi)部的測試及芯片仿真,但提供對芯片外的測試功能,可以用于對芯片外。
部電路的測試及編程。芯片提供的JTAG指令包括:BYPASS(11111)旁通片上系統(tǒng)邏輯指令,用于未被測試的芯片:
EXTEST(00000)片外電路測試指令,用于測試電路板芯片之間的互連;
SAMPLE/PRELOAD(OOOO1)采樣引腳/預(yù)加載數(shù)據(jù)指令,用于采樣芯片引腳信號或通過加載數(shù)據(jù),控制引腳輸出信號;
IDCODE(00110)讀芯片識別碼指令,用于識別電路板上的芯片;
HIGHZ(00101)設(shè)置高阻狀態(tài)指令,用于將芯片的引腳設(shè)置為無效狀態(tài)。
括號中的內(nèi)容是指令的操作碼,它們通過TDI引腳串行移入到指令寄存器。BYPASS和EXTEST指令的操作碼是IEEE1149.1中規(guī)定的;所以對于所有的JTAG接口兼容芯片,這兩個(gè)指令的操作碼都是相同的,其它的指令的操作碼可以由芯片廠商根據(jù)實(shí)際定義。
結(jié)合待編程的FLASH存儲器特征,利用上面提供的JTAG指令編寫一個(gè)編程FLASH存儲器的PC機(jī)應(yīng)用程序,借助SA-1110芯片的JTAG接口將目標(biāo)系統(tǒng)使用的操作系統(tǒng)和應(yīng)用軟件寫入到FLASH存儲器中。對目標(biāo)板上的FLASH存儲器進(jìn)行編程時(shí),在PC機(jī)上運(yùn)行該程序來控制并行接口模擬JTAG時(shí)序并將編程代碼運(yùn)送到SA-1110的JTAG控制器,把編程數(shù)據(jù)先移入到邊界掃描寄存器(BSR),再通過JTAG指令EXTEST按照FLASH芯片的編程時(shí)序?qū)?shù)據(jù),實(shí)現(xiàn)芯片編程操作,在FLASH內(nèi)容的寫入過程中,程序?qū)?片F(xiàn)LASH同時(shí)執(zhí)行寫操作,完成32位編程,在PC機(jī)上運(yùn)行的編程操作程序框圖如圖4所示。

其中利用PC機(jī)并行接口實(shí)現(xiàn)JTAG接口信號的數(shù)為:
int putp(int tdi,int tms,int rp)
{ //Qutput pins (LPT driving),LPT D0 Pin 2 and TCK,
//LPT D1 Pin 3 and TDI,LPT D2 Pin 4 and TMS
//Input pin (SA-1110 board drives),LPT Busy Pin 11 and TDO
int tdo = -1;
_outp(lpt_address,tms*+tdi*2); //TCK low
if(rp=RP)-outp(lpt_address,tms*4+tdi*2);//TCK low
if(rp=RP)tdo=!((int)_inp(lpt_address+1)》7); //get TDO data
return tdo;
}
通過PC機(jī)并行接口實(shí)現(xiàn)SA-1110的JTAG指令EXTEST的函數(shù)為:
void extest(void)
{ putp(1,0,IP);//Run-Test/Idle
putp(1,0,IP);//Run-Test/Idle
putp(1,0,IP);//Run-Test/Idle
putp(1,0,IP);//capture IR
putp(1,0,IP);//shift IR
putp(0,0,IP);//SA1110 Extest,指令長度為5位
putp(0,0,IP);
putp(0,0,IP);
putp(0,0,IP);
putp(1,0,IP);//CPLD Bypass,指令長度為4位
putp(1,0,IP);
putp(1,0,IP);
putp(1,1,IP);//Exit-IR,操作碼的一位必須通過時(shí)鐘與下一狀態(tài)EXIT1_IR
有效處于同一時(shí)刻,由時(shí)鐘控制TMS保持高電平時(shí)入EXIT1_IR狀態(tài)。
putp(1,1,IP);//Update-IR
putp(1,0,IP);//Run-Test/Idle
putp(1,0,IP);//Run-Test/Idle
putp(1,0,IP);//Run-Test/Idle
}
程序開始有條語句:putp(1,0,IP)。其意義在于無論JTAG狀態(tài)機(jī)于何種狀態(tài),經(jīng)過這四條指令后,必將返回到Run-Test/Idle狀態(tài),保證下面的操作從這一狀態(tài)開始進(jìn)入正常的操作狀態(tài)。
使用JTAG接口對FLASH程序存儲進(jìn)行編程的方法適合于系統(tǒng)中帶有兼容JTAG接口的芯片。隨著具有JTAG接口芯片應(yīng)用普及,需要對JTAG接口深入的了解,設(shè)計(jì)出容易測試、便于維護(hù)以及升級的高可靠性,可以延長產(chǎn)品的生命周期。根據(jù)FALSH芯片及JTAG接口芯片的規(guī)范對使用JTAG接口進(jìn)行編程的控制程序的優(yōu)化,可以實(shí)現(xiàn)存儲芯片的高速編程操作,對減少產(chǎn)品的研發(fā)和生產(chǎn)周期,保證產(chǎn)品的上市時(shí)間非常有利。
版權(quán)與免責(zé)聲明
凡本網(wǎng)注明“出處:維庫電子市場網(wǎng)”的所有作品,版權(quán)均屬于維庫電子市場網(wǎng),轉(zhuǎn)載請必須注明維庫電子市場網(wǎng),http://m.58mhw.cn,違反者本網(wǎng)將追究相關(guān)法律責(zé)任。
本網(wǎng)轉(zhuǎn)載并注明自其它出處的作品,目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點(diǎn)或證實(shí)其內(nèi)容的真實(shí)性,不承擔(dān)此類作品侵權(quán)行為的直接責(zé)任及連帶責(zé)任。其他媒體、網(wǎng)站或個(gè)人從本網(wǎng)轉(zhuǎn)載時(shí),必須保留本網(wǎng)注明的作品出處,并自負(fù)版權(quán)等法律責(zé)任。
如涉及作品內(nèi)容、版權(quán)等問題,請?jiān)谧髌钒l(fā)表之日起一周內(nèi)與本網(wǎng)聯(lián)系,否則視為放棄相關(guān)權(quán)利。
- ARM技術(shù)架構(gòu)與應(yīng)用開發(fā)實(shí)踐指南2026/1/6 10:40:19
- 嵌入式實(shí)時(shí)操作系統(tǒng)(RTOS)選型與移植技術(shù)指南2025/12/31 10:42:31
- 工業(yè)嵌入式系統(tǒng):通信接口技術(shù)選型與抗干擾設(shè)計(jì)實(shí)踐2025/12/15 14:36:53
- 深入解析嵌入式 OPENAMP 框架:開啟異核通信新時(shí)代2025/7/22 16:27:29
- 一文快速了解OPENWRT基礎(chǔ)知識2025/7/14 16:59:04









