在遙控編程系統(tǒng)中應(yīng)用微控制器實(shí)現(xiàn)嵌入式ISP的軟硬件設(shè)計(jì)
測(cè)溫結(jié)果數(shù)據(jù)比較
1 XC9500系列CPLD器件及其ISP性能
XC9500系列CPLD器件是由多個(gè)功能塊(FB)和IO塊(IOB)組成,可用開(kāi)關(guān)矩陣Fast CONNECT完全互連的子系統(tǒng),IOB提供輸入和輸出的緩沖,每個(gè)FB提供具有36個(gè)輸入和18個(gè)輸出的可編程邏輯容量。Fast CONNECT開(kāi)關(guān)矩陣連接所有的FB的輸出和FB的輸入,對(duì)于每個(gè)FB,12至18個(gè)(取決于封裝的引腳數(shù))輸出和有關(guān)的輸出使能信號(hào)直接驅(qū)動(dòng)IOB。
所有XC9500系列CPLD器件都是系統(tǒng)內(nèi)編程的,最小達(dá)一萬(wàn)次編程/擦除次數(shù),支持?jǐn)U充的IEEE 1149.1邊界掃描標(biāo)準(zhǔn),XC9500的結(jié)構(gòu)特性著重滿(mǎn)足系統(tǒng)內(nèi)編程的要求,增強(qiáng)的引腳鎖定能力可以避免重做昂貴的印制板,擴(kuò)充的JTAG指令集允許編程模式和系統(tǒng)內(nèi)診斷的各種控制。由于JTAG在其權(quán)限內(nèi)把ISP的性能擴(kuò)充到1149.1的測(cè)試標(biāo)準(zhǔn)中,XC9500系列CPLD器件可以通過(guò)JTAG接口實(shí)現(xiàn)ISP性能。XC9500系列的系統(tǒng)內(nèi)編程性能,不僅為現(xiàn)場(chǎng)編程和調(diào)試提供了方便,允許用戶(hù)編程和再編程已經(jīng)安裝在系統(tǒng)印制板上的XC9500系列器件來(lái)改進(jìn)樣機(jī)、更新制造流程;而且正是由于系統(tǒng)內(nèi)編程性能使得搖控編程成為可能。下面對(duì)XC9500系列CPLD器件搖控編程的實(shí)現(xiàn)方法做一介紹。
2 XC9500系列CPLD器件遙控編程的實(shí)現(xiàn)方法
對(duì)CPLD器件的編程,傳統(tǒng)的方法都是現(xiàn)場(chǎng)工程師通過(guò)PC機(jī)來(lái)實(shí)現(xiàn)的,PC機(jī)上必須有EZTag或者JTAG編程器軟件,并且PC機(jī)必須通過(guò)Xchecker或JTAG電纜和目標(biāo)板相連,然后將JEDEC編程數(shù)據(jù)下載到目標(biāo)板的CPLD器件中去。這種傳統(tǒng)的編程方法要求工程師必須親臨現(xiàn)場(chǎng),這就帶來(lái)一個(gè)問(wèn)題,那就是當(dāng)產(chǎn)品銷(xiāo)售以后,如果要對(duì)它升級(jí)(主要是指升級(jí)CPLD器件的功能)就十分麻煩。本文所要介紹的遙控編程不同于傳統(tǒng)的編程方法,它不需要工程師親臨現(xiàn)場(chǎng),只需在系統(tǒng)設(shè)計(jì)時(shí)將編程控制電路加入到嵌入式系統(tǒng)中去即可實(shí)現(xiàn)。
遙控編程的方框圖如圖1所示。要實(shí)現(xiàn)遙控編程,關(guān)鍵在于通信和嵌入式下載技術(shù)。通信部分包括通信接口和通信信道,它完成遠(yuǎn)程數(shù)據(jù)傳輸,即將本地PC機(jī)生成的CPLD器件編程數(shù)據(jù)傳輸?shù)竭h(yuǎn)程的目標(biāo)系統(tǒng)的嵌入式下載模塊(即圖中所示的“微控制器及嵌入式編程控制”部分);嵌入式下載技術(shù)是指用微控制器通過(guò)JTAG接口實(shí)現(xiàn)對(duì)XC9500系列CPLD器件編程。通信可采用現(xiàn)有的各種通信技術(shù),例如通過(guò)電話線用調(diào)制解調(diào)器實(shí)現(xiàn)通信以及通過(guò)電纜、激光和無(wú)線電等實(shí)現(xiàn)通信,在本文對(duì)通信的實(shí)現(xiàn)不做過(guò)多的介紹,下面只以簡(jiǎn)單的紅外收發(fā)器為例加以說(shuō)明,重點(diǎn)介紹微控制器及嵌入式編程控制的軟硬件實(shí)現(xiàn)。
3 微控制器及嵌入式編程控制的實(shí)現(xiàn)
3.1 硬件設(shè)計(jì)
微控制器及嵌入式編程控制硬件電路如圖2所示,由微控制器lntel 8031、時(shí)鐘、地址鎖存器74ls373、程序存儲(chǔ)器27512、數(shù)據(jù)存儲(chǔ)器RAM(包括XSVF格式數(shù)據(jù)存儲(chǔ)器)、XC95108及數(shù)據(jù)輸入接口等幾部分組成。圖中8031不僅可用來(lái)對(duì)CPLD進(jìn)行編程控制,而且還可實(shí)現(xiàn)其它控制和處理,因?yàn)樵O(shè)計(jì)中使用了一片XSVF(Xilinx Serial Vector Format格式數(shù)據(jù)存儲(chǔ)器,在XC95108的控制下可以在后臺(tái)實(shí)現(xiàn)數(shù)據(jù)通信,并將XSVF格式數(shù)據(jù)存儲(chǔ)到XSVM RAM中,當(dāng)數(shù)據(jù)接收完畢時(shí)再中斷微控制器,在微控制器的中斷服務(wù)子程序中通過(guò)JTAG接口實(shí)現(xiàn)對(duì)目標(biāo)CPLD器件編程。從圖中可見(jiàn),除了XC95108、數(shù)據(jù)輸入和XSVF RAM部分外,其它部分和常見(jiàn)的8031應(yīng)用系統(tǒng)一樣,這里不再贅述,下面主要講述數(shù)據(jù)輸入和XC95108的內(nèi)部功能。
數(shù)據(jù)輸入由紅外收發(fā)器實(shí)現(xiàn)(如可用Siemens公司的IRM3105),它所接收到的數(shù)據(jù)是由PC機(jī)生成的按RS232格式打包的XSVF格式編程數(shù)據(jù)文件,收發(fā)器通過(guò)UART(Universal Asynchronous Receiver Transmitter) 接口和XC95108相連。
XC95108包含URAT接收器、時(shí)序控制狀態(tài)機(jī)及總線控制器等。URAT接收器對(duì)接收到的數(shù)據(jù)進(jìn)行校驗(yàn),并且去掉起始位和結(jié)束位,如果接收正確則通知時(shí)序控制狀態(tài)機(jī)數(shù)據(jù)接收就緒,如果接收不正確則給出錯(cuò)誤指示。
時(shí)序控制狀態(tài)機(jī)是遙控編程的核心,包括四種狀態(tài),即HIGH、LOW、DOWNLOAD和ISP。XSVF文件的第一、二個(gè)字節(jié)為傳輸?shù)淖止?jié)總數(shù),在狀態(tài)HIGH和LOW時(shí)字節(jié)總數(shù)的高低字節(jié)被保存到一個(gè)變量中,當(dāng)在DOWNLOAD狀態(tài)時(shí),每當(dāng)往XSVF RAM寫(xiě)入一個(gè)字節(jié),該變量的值減1,同時(shí)XSVF RAM的地址增1。一旦全部XSVF文件都寫(xiě)入XSVF RAM中,狀態(tài)機(jī)便進(jìn)入ISP狀態(tài),此時(shí)中斷微控制器,微控制器響應(yīng)中斷并進(jìn)入中斷服務(wù)子程序。中斷服務(wù)子程序根據(jù)XSVF RAM中的信息通過(guò)JTAG對(duì)XC9500 CPLD器件進(jìn)行編程。
總線控制器根據(jù)時(shí)序控制狀態(tài)機(jī)控制XSVF格式數(shù)據(jù)存儲(chǔ)器的數(shù)據(jù)總線的切換,當(dāng)在DOWNLOAD狀態(tài)時(shí),總線控制權(quán)交由XC95108;當(dāng)在ISP狀態(tài)時(shí),總線控制權(quán)交由8031;當(dāng)在HIGH和LOW狀態(tài)時(shí),總線為高阻狀態(tài)。
3.2 XSVF文件的生成
上面提到過(guò)遠(yuǎn)程端接收到的數(shù)據(jù)為XSVF文件,XSVF文件是由本地PC機(jī)生成的,它是如何生成的呢?首先將設(shè)計(jì)數(shù)據(jù)輸入,開(kāi)發(fā)系統(tǒng)進(jìn)行設(shè)計(jì)轉(zhuǎn)換生成JEDEC器件編程文件;然后,由Xilinx公司提供的軟件EZTagTM自動(dòng)讀取JEDEC文件并轉(zhuǎn)換成SVF文件,SVF格式是專(zhuān)門(mén)用來(lái)描述IEEE 1149.1(JTAG)總線操作的格式,SVF文件中不僅包含CPLD的編程數(shù)據(jù),也包含有編程命令,但由于SVF格式為ASXII碼,因要求較大內(nèi)存,不適合嵌入式應(yīng)用;最后,由軟件svf2xsvf將SVF格式轉(zhuǎn)換成XSVF格式,XSVF格式為壓縮的二進(jìn)制格式,占用存儲(chǔ)空間小,因而更適合嵌入式應(yīng)用。
3.3 嵌入式ISP編程流程
XC9500通過(guò)四線測(cè)試存取端口TAP(Yest ACCess Port 和TAP控制器來(lái)執(zhí)行系統(tǒng)內(nèi)編程和IEEE 1149.1邊界掃描測(cè)試(JTAG)。TAP包括TCK、TMS、TDI和TDO四個(gè)引腳,TAP控制器是16狀態(tài)的狀態(tài)機(jī),控制邊界掃描電路按照TMS運(yùn)行,執(zhí)行由IEEE規(guī)定的狀態(tài)圖(詳細(xì)內(nèi)容參見(jiàn)參考文獻(xiàn)1,下面所提到的狀態(tài),如Shift-1R、Shift-DR等包含在16個(gè)狀態(tài)之中)。微控制器根據(jù)XSVF文件提供的指令和數(shù)據(jù)激勵(lì)TAP端口,在TAP控制器的控制下實(shí)現(xiàn)XC9500 CPLD的ISP編程。流程圖如圖3所示。
XSVF格式的編程文件包含編程指令和數(shù)據(jù),編程指令主要有三條,即XRUNTEST、XSIR和XSDR。微控制器讀取指令后進(jìn)行解釋?zhuān)⒏鶕?jù)指令執(zhí)行相應(yīng)的操作。
XRUNTEST指令指定在執(zhí)行下一條XSIR和XSDR指令之前在Run-Test/ldle狀態(tài)停留的時(shí)間,指令之后緊接的4個(gè)字節(jié)為時(shí)間數(shù)值(毫秒數(shù));當(dāng)微控制器讀取的指令為XSIR時(shí),便為T(mén)MS和TCK提供激勵(lì)直至進(jìn)入Shift-IR狀態(tài),然后讀取指定的數(shù)據(jù)長(zhǎng)度值和數(shù)據(jù),并將數(shù)據(jù)送到TDI口;微控制器讀取XSDR指令時(shí),首先讀取將要在Shift-IR狀態(tài)輸出的數(shù)據(jù),再觸發(fā)TMS和TCK直接進(jìn)入Shift-IR狀態(tài),并保持TMS為低,停留在Shift-IR狀態(tài),將XSVF文件數(shù)據(jù)輸出到TDI口,并存儲(chǔ)從TDO口接收到的數(shù)據(jù),在所有數(shù)據(jù)都輸出到TDI口之后,TMS變高進(jìn)入Exit-1-DR狀態(tài),然后將從TD0輸入的值和TDO預(yù)期值相比較,如果不匹配則轉(zhuǎn)出錯(cuò)處理,如匹配則重新進(jìn)入Run-Test/ldle狀態(tài)。微控制器循環(huán)地從XSVF RAM中讀取指令和數(shù)據(jù)并執(zhí)行,直到編程結(jié)束。