基于USB-JTAG接口轉(zhuǎn)換的嵌入式系統(tǒng)Flash編程
1 引言
在嵌入式系統(tǒng)的設(shè)計(jì)中,為了提高執(zhí)行速度和系統(tǒng)的可靠性,操作系統(tǒng)和應(yīng)用程序的軟件代碼一般都固化在非易失性存儲(chǔ)器中,如ROM,EPROM,EEPROM 和Flash。其中,F(xiàn)lash以其可擦寫次數(shù)多、存儲(chǔ)速度快、容量大及價(jià)格便宜等優(yōu)點(diǎn)在嵌入式領(lǐng)域得到廣泛的應(yīng)用。
在嵌入式系統(tǒng)的開(kāi)發(fā)階段,要進(jìn)行大量的程序調(diào)試,這也就意味著這要對(duì)Flash 進(jìn)行反復(fù)的擦寫。因此,如何對(duì)Flash 編程,成為許多嵌入式系統(tǒng)開(kāi)發(fā)中必要的一環(huán)。在這種背景下,利用JTAG 邊界掃描結(jié)構(gòu)訪問(wèn)芯片成為一種對(duì)嵌入式系統(tǒng)Flash 編程的途徑。另一方面,傳統(tǒng)的開(kāi)發(fā)工具中大多支持的是并口或串口,但現(xiàn)在的計(jì)算機(jī)上接口越來(lái)越單一,很多主板都不再支持并口、串口,即插即用的USB 接口卻因?yàn)槠渌俣瓤?,使用方便而得到了廣泛應(yīng)用和關(guān)注。本文介紹了一種符合嵌入式和計(jì)算機(jī)發(fā)展趨勢(shì)的Flash 編程方案,即基于USB 到JTAG 接口轉(zhuǎn)換的嵌入式系統(tǒng)Flash 編程。
2 JTAG 測(cè)試原理
JTAG (Joint Test Action Group)是1985 年制定的檢測(cè)PCB 和IC 芯片的一個(gè)標(biāo)準(zhǔn),1990年被修改后成為IEEE 的一個(gè)標(biāo)準(zhǔn),即IEEE1149.1-1990。通過(guò)這個(gè)標(biāo)準(zhǔn),可對(duì)具有JTAG 口芯片的硬件電路進(jìn)行邊界掃描和故障檢測(cè)。
2.1 管腳定義
JTAG 接口主要包括TCK、TMS、TDI、TDO 和可選的TRST#等管腳。各管腳的功能定義如下:
(1) 測(cè)試時(shí)鐘輸入 TCK。為TAP 控制器和各個(gè)寄存器提供時(shí)鐘基準(zhǔn)。TCK 與系統(tǒng)時(shí)鐘相互獨(dú)立。
(2) 測(cè)試模式選擇 TMS。在TCK 的上升沿時(shí)刻,TMS 的狀態(tài)決定了TAP 控制器的下一個(gè)工作狀態(tài);
(3) 測(cè)試數(shù)據(jù)輸入 TDI。指令和數(shù)據(jù)寄存器的串行數(shù)據(jù)輸入端,在TCK 的上升沿時(shí)刻采樣。
(4) 測(cè)試數(shù)據(jù)輸出 TDO。指令和數(shù)據(jù)寄存器的串行數(shù)據(jù)輸出端,在TCK 的下降沿時(shí)刻移出。
(5) 測(cè)試復(fù)位輸入 TRST#。可選信號(hào),低電平有效,提供TAP 控制器的異步初始化信號(hào)。
2.2 TAP 控制器
TAP 控制器是一個(gè)具有16 種狀態(tài)的有限狀態(tài)機(jī),每一種狀態(tài)的轉(zhuǎn)換都是由TCK 和TMS 來(lái)觸發(fā)的,TCK 上升沿時(shí)刻TMS 的值決定了TAP 的下一個(gè)工作狀態(tài)。測(cè)試數(shù)據(jù)和指令的傳輸、執(zhí)行都必須在TAP 控制器進(jìn)入相應(yīng)的狀態(tài)后才能進(jìn)行。
2.3 邊界掃描寄存器
JTAG 標(biāo)準(zhǔn)定義了一個(gè)串行的移位寄存器。寄存器的每一個(gè)單元分配給芯片的相應(yīng)引腳,每一個(gè)獨(dú)立的單元稱為BSC(Boundary-Scan Cell)邊界掃描單元。這個(gè)串聯(lián)的BSC 在IC內(nèi)部構(gòu)成JTAG 回路,所有的BSR(Boundary-Scan Register)邊界掃描寄存器通過(guò)JTAG 測(cè)試激活,平時(shí)這些引腳保持正常的功能。
2.4 指令系統(tǒng)
JTAG 接口的指令用于控制測(cè)試電路進(jìn)行各種操作。JTAG 接口的指令系統(tǒng)包括基本指令和擴(kuò)展指令,JTAG 兼容的芯片至少要包含下列指令:
(1) BYPASS 指令:選擇旁路寄存器連接TDI 和TDO,在TDI 和TDO 之間提供一條長(zhǎng)度最短的串列路徑,這樣允許測(cè)試資料可以快速的通過(guò)。
(2) SAMPLE/PRELOAD 指令:采樣/預(yù)加載數(shù)據(jù)指令,用于采樣芯片管腳信號(hào)或預(yù)加載數(shù)據(jù)以控制輸出管腳。
(3) EXTEST 指令:片外電路測(cè)試指令,用于測(cè)試芯片間的互連,這是通過(guò)JTAG 口對(duì)Flash 進(jìn)行編程的核心指令。
2.5 BSDL 邊界描述語(yǔ)言
BSDL(boundary scan description language)邊界描述語(yǔ)言是硬件描述語(yǔ)言VHDL 的一個(gè)子集,是對(duì)兼容JTAG 接口的芯片的邊界掃描特性的描述,主要用來(lái)溝通邊界掃描器件廠商、用戶與測(cè)試工具之間的聯(lián)系。它主要描述了芯片的JTAG 指令系統(tǒng)、BSC 與芯片管腳的對(duì)應(yīng)關(guān)系等特性。
3 應(yīng)用實(shí)例
在本設(shè)計(jì)中,采用基于 USB-JTAG 接口轉(zhuǎn)換的嵌入式系統(tǒng)Flash 編程,其系統(tǒng)連接方式如圖1 所示。
圖 1 系統(tǒng)連接方式
JTAG 下載電纜一端連接主機(jī)的USB 接口,另一端連接目標(biāo)板上的JTAG 接口,通過(guò)電纜上的USB-JTAG 接口轉(zhuǎn)換模塊實(shí)現(xiàn)協(xié)議轉(zhuǎn)換。目標(biāo)板上的Flash 由地址、數(shù)據(jù)和控制總線掛接到兼容JTAG 的嵌入式處理器上,在這種連接方式下,只需要控制嵌入式處理器模擬Flash 的編程時(shí)序,便可對(duì)Flash 進(jìn)行在線編程。
3.1 硬件設(shè)計(jì)
(1) 接口轉(zhuǎn)換模塊設(shè)計(jì)
USB 到JTAG 的接口轉(zhuǎn)換采用FTDI 的FT2232 芯片,其工作頻率可達(dá)6M,電路設(shè)計(jì)如圖2 所示。
圖 2 USB-JTAG 接口轉(zhuǎn)換電路
(2) 嵌入式處理器
本設(shè)計(jì)中處理器采用 IBM PowePC405GP。PPC405GP 是一款基于RISC 精簡(jiǎn)指令集的32 位嵌入式處理器,頻率為266 MHz。在數(shù)據(jù)手冊(cè)和BSDL 描述文件中可知其指令寄存器長(zhǎng)度為7 bit,數(shù)據(jù)寄存器邊界掃描鏈長(zhǎng)度為357 位。
(3) Flash
本設(shè)計(jì)中Flash 采用Intel 的28F320J3A110,大小為32 Mbit,有х8 和х16 bit 兩種位寬模式,在系統(tǒng)中配置成х16 bit 模式。該Flash 符合CFI 規(guī)范,只需按一定時(shí)序向特定地址寫入特定的指令序列,即可啟動(dòng)內(nèi)部狀態(tài)及,使其自動(dòng)完成要求的內(nèi)部操作。其部分指令序列如下表所示。
3.2 軟件設(shè)計(jì)
對(duì)Flash 的編程包括讀、寫、擦除等操作,根據(jù)寫入不同的指令序列實(shí)現(xiàn)相應(yīng)的功能。程序首先要初始化USB-JTAG 接口轉(zhuǎn)換模塊,然后使JTAG 進(jìn)入Run-Test-Idle 狀態(tài)。分別讀取并校驗(yàn)JTAG 芯片和Flash 芯片的ID,再將指定的指令序列寫入Flash 完成操作。根據(jù)PowerPC 405GP 的BSDL 描述文件,該處理器有357 個(gè)掃描鏈單元,包括地址單元,數(shù)據(jù)單元和一些控制單元等,應(yīng)分別控制每一個(gè)單元,使其工作在正常的狀態(tài)下,為了操作方便,需要對(duì)這部分函數(shù)進(jìn)行必要的封裝。以進(jìn)行讀操作為例,部分的程序算法如下。
3.3 性能
影響Flash 編程性能的主要因素有邊界掃描鏈的長(zhǎng)度、JTAG 的時(shí)鐘頻率、數(shù)據(jù)寬度,F(xiàn)lash 的操作周期數(shù)等。以本設(shè)計(jì)為例,嵌入式處理器IBM PowerPC 405GP 的邊界掃描長(zhǎng)度為357,Intel 28F320J3A110 Flash 的位寬為16 bit,容量為32 Mbit,采用兩片F(xiàn)lash 進(jìn)行位寬擴(kuò)展,則數(shù)據(jù)寬度為32 bit,容量為64 Mbit,JTAG 時(shí)鐘為6 MHz,對(duì)整片F(xiàn)lash 編程的性能如下表所示:
4 結(jié)論
在嵌入式系統(tǒng)的開(kāi)發(fā)過(guò)程中,使用 JTAG 接口對(duì)Flash 進(jìn)行在線編程不需要其它附加設(shè)備的支持,降低了系統(tǒng)開(kāi)發(fā)的成本,而且簡(jiǎn)單可行,速度較快,程序擴(kuò)展簡(jiǎn)單,符合嵌入式發(fā)展的趨勢(shì)。而且隨著USB 接口越來(lái)越廣泛的應(yīng)用,研究基于USB-JTAG 接口轉(zhuǎn)換的嵌入式系統(tǒng)Flash 編程對(duì)嵌入式產(chǎn)品的開(kāi)發(fā)和調(diào)試具有重要意義。
評(píng)論