新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 嵌入式系統中的JTAG接口編程技術

        嵌入式系統中的JTAG接口編程技術

        作者: 時間:2006-05-07 來源:網絡 收藏

        摘要:分析發系統開發中常用的三種芯片編程方法,介紹了JTAG接口的標準,工作原理及在芯片中的實現,根據JTAG接口所提供的邊界掃描功能 ,通過PC機并行接口模擬JTAG接口的時序,實現了使用目標系統中微處理器的JTAG接口對系統程序存儲器FLASH的編程。

        本文引用地址:http://www.104case.com/article/241592.htm

        關鍵詞:系統JTAG(Joint test action Group)聯合測試行為組織 編程器StrongARM手持設備

        隨著手持式電子設備的迅猛發展,手機,PDA、掌上電腦,電子書和數碼相機等正在快步走進人們的日常生活,這一類電子產品同屬于系統的范疇,都是以高性能的微機處理器為核心擴展相應的應用程序,實現電子設備的各種功能。由于是手持設備,因而要求體積小、重量輕,耗電少,這些特點決定了設備內部的印刷板的尺寸比常規的電子設備小的多,而且元器件密度大,雙面貼裝。這給設計人員帶來了若干問題,如操作系統代碼和應用程序的寫入,板上芯片的測試等。本文作者結合實際工作,就嵌入式系統中如何通過JTAG接口進行FLASH芯片編程作了探討。

        1 幾種常用字芯片編程方法

        在嵌入式系統開發和產品生產過程中,對系統程序存儲器編程主要使用三種編程方法,通過編程器編程、使用板上編程器編程和在系統編程。

        1.1 通過編程器編程

        這是在PROM、EPROM、PQL等芯片游行時常用的編程方法。即在可編程芯片焊裝到電路板之前,使用專門的編程器對芯片進行代碼或數據的寫入,然后將已編程的芯片安裝到電路板上。

        使用編程器編程特別適用于DIP封裝的芯片。如是是其它類型的封裝,則必須使用相應的適配器。這種方法的缺點滴是零要手工進行待編程芯片的插入,鎖定等工作,容易造成芯片的方向錯誤、引腳錯位等,導致編程效率降低。

        1.2 使用板上編程器編程 (OBP)

        這種方法是在電路板上所有的芯片都已經焊接完畢后,再對電路板上的可編程芯片進行編程。通過專用電纜將電路板與外部計算機連接,由于計算機的應用程序進行板上可編程芯片的代碼或數據寫入。芯片擦除編程所需用的電源、控制信號、地址、數據和相關的命令都由板外的編程控制器提供,在進行板上編程時,需要通過專門的輔助電路關斷目標板上CPU的電源或將其外部接口信號設置為高阻狀態,以免與編程時的地址、數據和控制信號發生沖突。

        在板上編程可以克服芯片引腳錯位,方向插反等問題,避免燒毀芯片,編程錯誤,保證了芯片編程的高成功率和可靠性。另一個優點就是及時軟件升級,可以做到在產品出廠之時系統使用最新版本的固化軟件。這對于日新月異的手持電子設備而言是必須的。

        這種方法的缺點是需要在電路板上設計編程用的接口、隔離等輔助電路,在編程時通過跳線或FET開關時進編程與正常工作的狀態轉換。這樣會增加每個電路板芯片的數量,造成產品成本的增加。

        1.3 在系統編程(ISP、ISW)

        這種方法直接利用系統中帶有JTAG接口的器件,如CPU、CPLD、FPGA等,執行對系統程序存儲芯片的內容和擦除和編程操作。一般而言,高檔的微處理器都帶有JTAG接口,系統程存儲器的數據總線,地址總線和控制接口直接接在微處理器上。編程時,使用PC機內插卡或并行的接口通過專用電纜將系統電路板與PC機聯系起來,在PC機上運行相關的程序,將編程數據及控制信號傳送到JTAG接口的芯片上,利用相應的指令從微處理器的引腳按照FLASH芯片的編程時序輸出到FLASH存儲器。

        這種編程方法的條件是系統中必須存在帶有JTAG接口或與之兼容的芯片如微處理器。優點是系統板上不需要增加其它于編程有關的輔助電路。減小了電路板的尺寸,避免了對微小封裝芯片的手工處理,特別適用于電路板尺寸有嚴格限制的手持設備。

        2 JGAG接口介紹

        面對復雜電路的設計、整版測試的難度及表面的貼裝技術帶來的有限測試引腳下等問題,業界不得不尋找一個標準加以解決。JTAG邊界掃描即IEEE1149。1標準,該測試標準定義了用于解決上述問題的硬件結構和工作機制。其優點在于將極其復雜的電路板測試轉彎成具有良好的結構性、可以通過軟件簡單而靈活處理。它雖然是一個主要用于片上電路的測試標準,但卻打開了各種相關應用的大門。這個標準定義了可用于完成功能和互連測試以及內建自測過程的各種指令。芯片生產廠商如ALTERA、XILINX、ATMEL、AMD、TI等對標準進行了擴充,使用專用的擴展指令執行維護和診斷應用及對可配置器件的可編程算法,使JTAG接口廣泛用于FLASH系列芯片的編程。概括起來,JTAG接口主要應用于:電路的邊界掃描測試和可編程芯片的在系統編程。

        2.1 JTAG的結構

        在硬件結構上,JTAG的接口包括兩個部分,JTAG端口和控制器。與JTAG接口兼容的器件可以是微處理器(MPU)微控制器(MCU)PLD CPL FPGA ASIC或其它符合IEEE1149。1規范的芯片。IEEE1149。1標準中規定對應數字集成電路的每個引腳都設有一個移動存寄單元。稱為邊界掃描單元BSC。它將JTAG電路與內核邏輯電路聯系起來,同時隔離內核電路和芯片引腳。由集成電路的所有邊界掃描構成單元掃描寄存器BSR。邊界掃描寄存器僅在進行JTAG測試時有效,在集成電路工作正常無效,不影響集成電路的功能 。具有JTAG接口的芯片內部結構如圖1所示:

        測試邏輯的最高電路包括3個主要內容

        ·測試訪問端口(TAP)控制器

        TAP控制器提供在嵌入在JTAG兼容器件內部的測試功能電路的訪問控制,是一個同步狀態機。每個JTAG兼容的器件都有自己的TAP控制器。通過測試模式選擇TMS和時鐘信號TCK控制其狀態轉移,實現由IEEE149。1標準確定的測試邏輯電路的工作時序。

        ·指令寄存器

        指令寄存器是基于電路的移動寄存器,通過它可以串行輸入執行各種操作的指令。

        ·數據寄存組。

        數據寄存器組是一組基于電路的移位寄存器。操作指令被串行裝入由當前的指令所選擇的數據寄存器。隨著操作的執行,測試結果被移出。

        2.2 JTAG引腳定義

        JTAG接口主要包括四個引腳下:TMS TCK TDI 和TCO及一個可選配的引腳TRST,用于驅動電路模塊和控制執行規定的操作。各引腳的功能如下:

        ·TCK:JTAG測試時鐘,為TAP控制器和寄存器提供測試參考。在TCK的同步作用下通過TDI和TDO引腳下串行移入或移出數據及指令。同時,TCK為TAP控制器狀態機提供時鐘。

        TMS:TAP控制器的三項式輸入信號。TCK的上升沿時刻TMS的狀態確定TAP控制器即將進入的工作狀態。通常TMS引腳具有內部上拉電阻 ,以保證該引腳在沒有驅動時處于邏輯1狀態。

        TDI:JTAG指令和數據寄存器的串行數據輸入端。TAP控制器的當前狀態以及保持在指令寄存器中的具體指令決定對于一個特定的操作由TDI裝入哪個寄存器。在TCK的上升沿時刻,TDI引腳狀態被除數采樣,結果送到JTAG寄存器組。

        TDO:JTAG指令和數據寄存器的串行輸出端。TAP控制器的當前狀態以及保持在指令寄存器中的具體指令決定對于一個特定的操作哪個寄存器的內容送到TDO輸出。對于任何已知的操作,在TDI和TDO之間只能有一個寄存器(指令或數據)處于有效連接狀態。TDO在TCKR的下降沿改變狀態,并且只在數據通過器件移動過程中有效。該引腳在其它的時間處于三狀態下。

        TRST:測試復位輸入信號,低電平有效,為TAP控制器提供異步初始化信號。

        2.3 JTAG測試訪問端口(TAP)控制器

        TAP控制器是一個16狀態的有限狀態機,為JTAG提供控制邏輯,控制進入到JTAG結構中各種寄存器內數據通信的掃描與操作。TAP狀態轉移圖如圖2所示,由TCK同步時鐘上升沿時刻TMS引腳的邏輯電平決定狀態轉移的過程,(高電平TMS=1,低電平TMS=0)。對于由TDI端輸入到器件的掃描信號共有兩個狀態變化路徑:一個用于移入指令到指令寄存器;另一個用于移入數據到有效的數據寄存器,該寄存器由當前指令確定。

        狀態圖中的每個狀態都是通過學習TAP控制器進行數據處理所需要的。這些處理包括給引腳施加激勵信號,捕獲輸入的數據,裝載指令,邊界掃描寄存器中數(此地有圖)

        據的移入或移出。圖2表示了TAP狀態機的基本流程,描述了從一個狀態到另一個狀態TMS信號的變化,在芯片JTAG接口的TRST引腳上加一個低脈沖信號可以使TAP控制器復位到測試邏輯復位(Test-Logic-Reset)主狀態。

        2.4 JTAG接口控制指令

        控制指令用于控制JTAG接口進行各種操作,控制指令包括基本指令和擴展指令。JTAG接口標準要求芯片支持的基本指令有:EXTEST INTEST SAMPLE/PRELOAD BYPASS IDCODE HIGHZ。芯片廠商可以根據實際需要選擇或添加擴展指令。

        3 JTAG接口的使用

        通過JTAG接口可以進行電路板及芯片的測試,也可以實現對目擊者標電路板上的程序存儲器編程。本文僅僅討論使用JTAG接口對板上FLASH存儲器的編程。一般,可以利用專用的PC機內插卡式硬件控制器或獨立的編程器訪問JTAG器件。也可以直接由PC機的并行接口模擬JTAG時序,硬件控制器或編程器通過專用電纜連接到目標電路板上,被編程的FLASH存儲器芯片的地址線,數據線和控制信號線接到JTAG兼容芯片的相應引腳上。值得注意的是采用這種編程方法,不要求FLASH器件具有JTAG接口,只要與其相連接的芯片具有JTAG接口即可。在編程FLASH芯片時,需要做的工作主要有:①PC機發送指令或數據到JTAG兼容芯片的邊界掃描寄存器(BSR);②將保存在BSR中的指令或數據通過JTAG存儲器。這個過程是由運行在PC機上的軟件進行控制的。

        3.1 硬件配置

        在某個設計項目中,使用了intel公司的StrongARM芯片SA-100和該公司的Strata系列FLASH存儲器芯片/SA-100芯片是種高性能、低功耗、集成有多種常用接口的SOC微處理器芯片 。特別嚴重適合于持設備。而strata FLASH是intel公司使用獨創的1 個存儲單元記錄2比特數據技術制造的閃速存儲芯片 ,其特點是體積小,容量大,成本低,特別適合于程序代碼與數據的存儲。選擇的型號為:E28F128J3A,可以配置成8位或16位數據線方式,SA-1110為32位的芯片,其外擴的程序存儲器和數據存儲器也為32位,因此程序存儲器需要2片28F128J3A配置為32位形式,如圖3所示。

        在本例中,JTAG菊花鏈中包含兩個IEEE1149。1兼容芯片。即SA-1110微處理器和CPLD。由于FLASH的地址總線,數據總線和控制信號線接在SA-1110上,在利用JTAG接口編程FLASH存儲器時,與JTAG鏈上的CPLD芯片無關,需要通過指令將CPLD芯片設為旁通模式,FLASH芯片的控制信號系統如讀信號(OE)寫信號(WR)和片選信號(CE)等直接由SA-1110產生。

        從圖3中可以看出,使用PC機并行接口的幾個數據線入信號線來構成JTAG接口引腳信號,對應關系如表1所示,采用信號線直接連接的方法簡便易行,只需要一條專用的電纜即可操作JTAG接口。

        表1 PC機并行接口與JTAG接口信號對應表

        PC機并行接口 對應JTAG接口
        引 腳 功 能 引 腳 功 能
        2 D0 TCK 時鐘
        3 D1 TDI 數據輸入
        4 D2 TMS 模式選擇
        11 Busy TDO 數據輸出

        3.2 控制軟件

        SA-1110芯片的JTAG接口實現了IEEE1149。1標準的部分功能,不能實現對芯片內部的測試及芯片仿真,但提供對芯片外的測試功能,可以用于對芯片外(此處有圖)

        部電路的測試及編程。芯片提供的JTAG指令包括:BYPASS(11111)旁通片上系統邏輯指令,用于未被測試的芯片:

        EXTEST(00000)片外電路測試指令,用于測試電路板芯片之間的互連;

        SAMPLE/PRELOAD(OOOO1)采樣引腳/預加載數據指令,用于采樣芯片引腳信號或通過加載數據 控制引腳輸出信號;

        IDCODE(00110)讀芯片識別碼指令,用于識別電路板上的芯片;

        HIGHZ(00101)設置高阻狀態指令,用于將芯片的引腳設為無效狀態。

        括號中的內容是指令的操作碼,它們通過TDI引腳串行移入到指令寄存器。BYPASS和EXTEST指令的操作碼是IEEE1149.1中規定的,因此對于所有的JTAG接口兼容芯片,這兩個指令的操作碼都是相同的,其它指令的操作碼可以由芯片廠商根據實際定義。

        結合待編程的FLASH存儲器特征,利用上面提供的JTAG指令編寫一個編程FLASH存儲器的PC機應用程序,借助SA-1110芯片的JTAG接口將目標系統使用的操作系統和應用軟件寫入到FLASH存儲器中。對目標板上的FLASH存儲器進行編程時,在PC機上運行該程序來控制并行接口模擬JTAG時序并將編程代碼運送到SA-1110的JTAG控制器,利用JTAG的邊界掃描單元(BSC),把編程數據先移入到邊界掃描寄存器(BSR),然后通過JTAG指令EXTEST按照FLASH芯片的編程時序將數據 通過地址總線和數據總線寫入FLASH存儲器,實現芯片編程操作,在FLASH內容的寫入過程中,程序對2片FLASH同時執行寫操作,完成32位編程,在PC機上運行的編程操作程序框圖如圖4所示,其中利用PC機并行接口實現JTAG接口信號的數為:

        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

        -outp(lpt_address,tms*4+tdi*2+1); //TCK high

        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機并行接口實現SA-1110的JTAG指令EXTEST的函數為:

        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);//Run-Test/Idle

        Putp(1,1,IP);//select DR scan

        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(0,0,IP);

         

        putp(1,0,IP);//CPLD Bypass,指令長度為4位

        putp(1,0,IP);

        putp(1,0,IP);

        putp(1,1,IP);//Exit-IR,操作碼的最后一位必須通過時鐘與下一狀態EXIT1_IR

        有效處于同一時刻,由時鐘控制TMS保持高電平時入EXIT1_IR狀態。

        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狀態機于何種狀態,經過這四條指令后,必將返回到Run-Test/Idle狀態,保證下面的操作從這一狀態開始進入正常的操作狀態。

        編程FLASH存儲器使用的其它指令的實現方法與此似。實際表明,使用PC機并接口實現JTAG時序方法是行的,對FLASH存儲器進行編程無需其它板卡設備支持,是一種較為簡單的方法。

        使用JTAG接口對FLASH程序存儲進行編程的方法適合于系統中帶有兼容JTAG接口的芯片。隨著具有JTAG接口芯生應用普及,需要對JTAG接深入的了解,以便更好地利用芯片的資源,設計出容易測試、便于維護與升級的高可靠性,延長產品的生命周期。同時,根據FALSH芯片及JTAG接口芯片的規范對使用JTAG接口進行編程的控制程序的優化,可以實現存儲芯片的高速編程操作,對減少產品的研發和生產周期,保證產品的上市時間非常有利。

        linux操作系統文章專題:linux操作系統詳解(linux不再難懂)


        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 潞西市| 盐源县| 平武县| 酒泉市| 都安| 勃利县| 张家界市| 兴文县| 离岛区| 武功县| 涿鹿县| 桃园市| 两当县| 鹤山市| 田东县| 调兵山市| 福清市| 龙游县| 北宁市| 玉树县| 惠州市| 鹿泉市| 南昌县| 平安县| 阿城市| 六枝特区| 宁阳县| 炉霍县| 浦东新区| 涪陵区| 永和县| 建湖县| 驻马店市| 长武县| 错那县| 威信县| 南溪县| 枣阳市| 新蔡县| 巴彦县| 新晃|