《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 嵌入式技術(shù) > 業(yè)界動(dòng)態(tài) > 一種通用的嵌入式系統(tǒng)ISP方法

一種通用的嵌入式系統(tǒng)ISP方法

2008-08-25
作者:鄭小軍,胡道徐

  摘 要: 針對(duì)沒(méi)有集成ISP功能的MCU系統(tǒng),提出了一種通用的嵌入式系統(tǒng)" title="嵌入式系統(tǒng)">嵌入式系統(tǒng)Flash在線編程(ISP)方案,。該方案借用RAM作為ISP的程序存儲(chǔ)器" title="程序存儲(chǔ)器">程序存儲(chǔ)器,可降低系統(tǒng)成本并具有較大的靈活性,。以MC68332平臺(tái)為例,詳細(xì)介紹了這種ISP方案的具體實(shí)現(xiàn)過(guò)程,。
  關(guān)鍵詞: 嵌入式系統(tǒng) ? Flash? ISP?? MC68332


  隨著嵌入式系統(tǒng)技術(shù)的發(fā)展,,電可擦除的Flash芯片以容量大、價(jià)格低,、編程方便等優(yōu)勢(shì)得到了廣泛的應(yīng)用,。由于同一片F(xiàn)lash在寫(xiě)操作時(shí)一般不能讀,因而很多采用Flash作為程序存儲(chǔ)器的系統(tǒng)無(wú)法直接實(shí)現(xiàn)在系統(tǒng)編程(ISP),。為了方便現(xiàn)場(chǎng)調(diào)試和程序升級(jí),,可以采用集成ISP功能較新的MCU(如AVR、部分ARM芯片等),,或者采用雙Flash設(shè)計(jì)等方法實(shí)現(xiàn)ISP功能,。但有不少系統(tǒng)仍然使用不具備直接ISP功能的MCU(如M68K、N80C196等),,出于印制版面積,、成本等原因的考慮也沒(méi)有采用雙Flash芯片,,此類系統(tǒng)在程序升級(jí)時(shí)通常需要如編程器、仿真器等特定工具,,在現(xiàn)場(chǎng)應(yīng)用時(shí)不很方便,。為解決這些系統(tǒng)的ISP問(wèn)題,本文以MC68332平臺(tái)為例提出了一種通用的ISP方案,。
1 方法分析
  對(duì)于使用M68K這類不具備ISP功能的MCU系統(tǒng),,進(jìn)行ISP設(shè)計(jì)必須滿足以下幾個(gè)條件:
  (1) 程序空間和數(shù)據(jù)空間統(tǒng)一編址,程序可以在RAM中運(yùn)行,;
  (2) Flash芯片正確連接了寫(xiě)信號(hào),;
  (3) 擁有能放下update程序并讓其正常工作的額外程序/數(shù)據(jù)空間;
  (4) 具備某種通信能力(如以太網(wǎng),、串口,、CAN、MODEM等),;
  滿足了這四個(gè)條件,,就可以按照本文的方法進(jìn)行ISP設(shè)計(jì)。針對(duì)自編程" title="自編程">自編程過(guò)程中文件出錯(cuò),、 斷電等特殊情況的容錯(cuò)程度不同,,可以有如下兩種方案。
1.1 方案1——自編程過(guò)程是安全可靠的,不會(huì)出現(xiàn)異常情況
  這種情況相對(duì)簡(jiǎn)單一些,,整個(gè)程序可以分為兩個(gè)獨(dú)立的部分完成,一是升級(jí)程序(稱為update程序),,它通過(guò)通信接口從主機(jī)接收程序數(shù)據(jù)到RAM空間,,并對(duì)數(shù)據(jù)進(jìn)行CRC校驗(yàn)以保證數(shù)據(jù)的正確性, 在校驗(yàn)正確后將數(shù)據(jù)寫(xiě)到程序存儲(chǔ)器的指定地址空間。如果RAM空間較小,,可以接收一頁(yè),、校驗(yàn)一頁(yè)、寫(xiě)入一頁(yè),,分次完成,。由于程序存儲(chǔ)器寫(xiě)操作過(guò)程必須連續(xù),不能被打斷,,所以u(píng)pdate程序必須在鏈接時(shí)指定在RAM地址空間運(yùn)行,。
  另一部分是正常的程序(稱為normal程序),這是正常編譯的在程序存儲(chǔ)器空間運(yùn)行的程序,,除了正常的工作之外它還需判斷(通過(guò)通信命令或者查詢一個(gè)輸入狀態(tài)等)是否應(yīng)該轉(zhuǎn)到升級(jí)模式,,如果是,則將update程序復(fù)制到指定的RAM空間并轉(zhuǎn)去執(zhí)行update程序,。
  程序完成后需要將update和normal通過(guò)編程工具" title="編程工具">編程工具分別固化到程序存儲(chǔ)器上的指定地址(注意:在固化第二個(gè)程序時(shí)不可損壞第一個(gè)程序內(nèi)容),也可將兩個(gè)文件合并,,一次固化到程序存儲(chǔ)器,,update程序作為normal程序的數(shù)據(jù)信息而存在,如圖1所示,。這樣正常運(yùn)行時(shí)程序運(yùn)行在normal部分,,update程序得不到運(yùn)行;在升級(jí)模式時(shí)normal程序把程序存儲(chǔ)器中的update部分復(fù)制到其運(yùn)行空間(RAM)并執(zhí)行,。如果在自編程過(guò)程中出現(xiàn)災(zāi)難性故障,,那么程序存儲(chǔ)器上舊的normal程序已經(jīng)擦除而新的normal程序還未寫(xiě)入或者未完全寫(xiě)入,這都將導(dǎo)致程序存儲(chǔ)器中的程序數(shù)據(jù)不再完整,,此時(shí)必須用專用工具重寫(xiě)normal程序,,才能讓系統(tǒng)可再次自編程。


1.2 方案2——考慮自編程過(guò)程中的異常狀況,做到故障保護(hù)
  這種情況下需要把整個(gè)工作分為三部分完成,,第一是引導(dǎo)程序(稱為BOOT程序),;第二是升級(jí)程序(update程序);第三是正常程序(normal程序),。BOOT程序負(fù)責(zé)控制程序的運(yùn)行模式:升級(jí)模式,、正常模式。如果進(jìn)入升級(jí)模式,,BOOT程序需要將update程序復(fù)制到指定的運(yùn)行空間,,并轉(zhuǎn)入執(zhí)行update程序;如果進(jìn)入正常模式,,BOOT需要做的工作就十分簡(jiǎn)單,,可以直接把控制權(quán)交給正常程序。為了使各個(gè)程序可以單獨(dú)調(diào)試,,不相互依賴,,建議各個(gè)程序單獨(dú)初始化所需的硬件資源,不要依賴其它程序來(lái)初始化硬件,。update程序所要完成的功能與方案1中的相同,,此時(shí)要注意update在自編程時(shí)不能破壞BOOT程序。此時(shí)normal程序不再負(fù)有復(fù)制update程序到指定運(yùn)行空間的任務(wù),,完全按照正常的模式運(yùn)行,。
  按照這種方案,BOOT程序和update程序是自編程設(shè)計(jì)的核心內(nèi)容,,只要保證這部分?jǐn)?shù)據(jù)的完整性,,就能擁有在線編程的能力,要在軟件對(duì)這部分?jǐn)?shù)據(jù)區(qū)進(jìn)行保護(hù),,保證在第一次寫(xiě)入程序存儲(chǔ)器后就不會(huì)再被擦除,。這樣即使在自編程時(shí)發(fā)生災(zāi)難性故障,BOOT程序和update程序是不會(huì)被破壞的,,仍然可以繼續(xù)運(yùn)行,,保證下次仍然可以進(jìn)行自編程,。
  同樣,程序完成后也必須分別固化到程序存儲(chǔ)器的指定空間,,以保證程序的正常運(yùn)行,,程序分布如圖2所示。


2? 在MC68332目標(biāo)平臺(tái)上的實(shí)現(xiàn)(采用方案2)
  目標(biāo)平臺(tái)的基本配置如下:
  CPU為MC68332,,F(xiàn)lash為512KB(Am29F400B),,RAM為1MB,通信口為10Mbps以太網(wǎng),。
  在編寫(xiě)程序之前首先應(yīng)該設(shè)計(jì)好程序在Flash和RAM空間的分布,,按照方案2的思路考慮平臺(tái)的硬件配置,具體設(shè)計(jì)如下:
  (1) BOOT程序通過(guò)MC68332的一個(gè)I/O" title="I/O">I/O狀態(tài)判定程序的走向,;
  (2) update程序通過(guò)以太網(wǎng)口采用TFTP協(xié)議從主機(jī)接收程序并進(jìn)行CRC校驗(yàn),;
  (3) Flash具體分配如表1所示。


  按照方案2,,BOOT程序在系統(tǒng)復(fù)位后初始化Flash,、RAM片選,把Flash,、RAM映射到對(duì)應(yīng)的地址空間,,并通過(guò)MC68322的一個(gè)I/O狀態(tài)判斷應(yīng)該進(jìn)入何種運(yùn)行模式。如果進(jìn)入正常模式,,BOOT程序通過(guò)從nornal復(fù)位向量處取得PC值,,轉(zhuǎn)入相應(yīng)的地址執(zhí)行;進(jìn)入升級(jí)模式,,BOOT程序把update程序從Flash地址0x00400~0x10000復(fù)制到RAM地址0x700000~0x710000中,,然后把控制權(quán)轉(zhuǎn)移給update程序。程序流程如圖3,。
  update程序主要分為三大部分:(1)從網(wǎng)絡(luò)接口接收主機(jī)中的normal程序,為了盡量減小程序的復(fù)雜性,,采用TFTP協(xié)議(TFTP Version 2,RFC 1350)從網(wǎng)絡(luò)接收程序(這部分也可以通過(guò)其他方式,,如串口、MODEM等實(shí)現(xiàn)),; (2)解析出程序數(shù)據(jù)并進(jìn)行校驗(yàn),,接收到的程序是Motorola格式的S-Record文件,必須按照S-Record格式進(jìn)行解析,,得到程序數(shù)據(jù)并進(jìn)行CRC校驗(yàn),,保證程序的正確性;(3)寫(xiě)到Flash中地址0x10000~0x80000,,驗(yàn)證工作完成后把數(shù)據(jù)固化到Flash中指定地址,,重啟并進(jìn)入正常模式就可運(yùn)行升級(jí)后的程序,。程序流程見(jiàn)圖4。


  normal程序按照正常需要進(jìn)行編寫(xiě),,必須鏈接到0x10000~0x80000空間運(yùn)行,。
  這三個(gè)程序完成后,編寫(xiě)一個(gè)工具軟件把三個(gè)程序合并到一個(gè)文件(注意地址空間的分配),,然后利用編程工具燒寫(xiě)到Flash片上,,這樣這個(gè)具備ISP功能的系統(tǒng)就完成了。
  該設(shè)計(jì)的實(shí)現(xiàn)方法簡(jiǎn)單,,可以避免生產(chǎn)時(shí)不必要的物質(zhì)和時(shí)間上的開(kāi)銷,,同時(shí)也可以幫助提供更為簡(jiǎn)易、靈活,、經(jīng)濟(jì)的現(xiàn)場(chǎng)服務(wù),,值得在嵌入式系統(tǒng)中推廣使用。
參考文獻(xiàn)
1 AMD. Am29F400B Data Sheet. June 2004
2 齊秋群,,剛寒冰.M68300系列原理與應(yīng)用.北京:北京理工大學(xué)出版社,,1993
3 Software Development Systems, Inc. CrossCode User Guide. 1998

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,,并不代表本網(wǎng)站贊同其觀點(diǎn),。轉(zhuǎn)載的所有的文章、圖片,、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有,。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無(wú)法一一聯(lián)系確認(rèn)版權(quán)者。如涉及作品內(nèi)容,、版權(quán)和其它問(wèn)題,,請(qǐng)及時(shí)通過(guò)電子郵件或電話通知我們,以便迅速采取適當(dāng)措施,,避免給雙方造成不必要的經(jīng)濟(jì)損失,。聯(lián)系電話:010-82306118;郵箱:[email protected],。