摘要:對于內(nèi)含IAP功能的嵌入式微控制器提出基于IAP和USB技術(shù)的系統(tǒng)應(yīng)用程序升級(jí)的新方法。U盤被用作程序代碼的存儲(chǔ)設(shè)備,將微控制器的存儲(chǔ)器Flash和SRAM進(jìn)行有效的區(qū)間分配,經(jīng)外部擴(kuò)展接口USB,微控制器將U盤里面的代碼讀入SRAM里的相應(yīng)區(qū)間,再通過微控制器IAP功能把SRAM代碼寫入相對應(yīng)的Flash分區(qū)里,實(shí)現(xiàn)嵌入式系統(tǒng)應(yīng)用程序在線升級(jí)。該方案受環(huán)境的影響非常小,嵌入式系統(tǒng)采取這種方法,應(yīng)用程序的在線升級(jí)變的非常簡單。本文給出了這種方法詳細(xì)的程序流程圖以及實(shí)現(xiàn)技術(shù)。
關(guān)鍵詞:IAP功能;USB技術(shù);嵌入式系統(tǒng);在線升級(jí)
中圖分類號(hào):TP311.11 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1007-9599 (2012) 22-0000-03
1 IAP、USB技術(shù)及嵌入式系統(tǒng)的含義
IAP(In Application Programming)是指在應(yīng)用編程。就是在程序運(yùn)行過程中的編程,片子提供一系列機(jī)制(軟件或硬件上的)當(dāng)片子運(yùn)行時(shí)候可以提供改變flash里面的數(shù)據(jù)的方法。簡單點(diǎn)講,就是程序本身可向程序的存儲(chǔ)器里修改程序或者寫數(shù)據(jù)。典型使用這種方式的應(yīng)用就是通過一小段的代碼實(shí)現(xiàn)程序下載,單片機(jī)里ISP功能就是IAP技術(shù)實(shí)現(xiàn)的,就是片子在出廠之前就有一段boot程序存在里面,當(dāng)片子上電之后,這段程序就開始運(yùn)行,一經(jīng)檢測到上位機(jī)上面有下載的要求就和上位機(jī)發(fā)生通信,接著就下載數(shù)據(jù)到達(dá)存儲(chǔ)區(qū)。
USB(通用串行總線)是英文Universal Serial BUS的縮寫,中文簡稱是“通串線,是一個(gè)外部總線的標(biāo)準(zhǔn),用來規(guī)范外部設(shè)備和電腦的通訊及連接。是個(gè)接口技術(shù)主要應(yīng)用在PC領(lǐng)域,USB的接口支持設(shè)備熱插拔及即插即用的功能。
嵌入式操作系統(tǒng)(Embedded Operating System,簡稱:EOS),即用在嵌入式系統(tǒng)里的操作系統(tǒng)。它是一個(gè)有著廣泛用途的系統(tǒng)軟件,一般包括和硬件有關(guān)聯(lián)的系統(tǒng)內(nèi)核、底層驅(qū)動(dòng)軟件、通信協(xié)議、標(biāo)準(zhǔn)化的瀏覽器等。此系統(tǒng)負(fù)責(zé)嵌入式系統(tǒng)里所有的軟硬件資源分配、任務(wù)的調(diào)度,協(xié)調(diào)、控制并發(fā)的活動(dòng)。它必須通過模塊的裝卸達(dá)到系統(tǒng)所需的功能。
2 基于USB和IAP嵌入式升級(jí)方法
IAP可經(jīng)通信的接口對PC機(jī)傳送代碼進(jìn)行接收,然后通過IAP功能把代碼寫入對應(yīng)存儲(chǔ)器里,對嵌入式的應(yīng)用程序?qū)崿F(xiàn)在線升級(jí)。USB是廣泛應(yīng)用在生活里的在線接口,用U盤作傳輸媒介把PC機(jī)編譯的嵌入式的應(yīng)用程序的代碼寫入U(xiǎn)盤里,嵌入式的控制器經(jīng)U盤的讀寫模塊把U盤數(shù)據(jù)讀入,應(yīng)用IAP功能對程序?qū)崿F(xiàn)升級(jí),這個(gè)過程就實(shí)現(xiàn)了IAP及USB技術(shù)嵌入式的應(yīng)用程序的在線升級(jí)方法。由于采用的是外部掛接的U盤作現(xiàn)場數(shù)據(jù)采集的海量存儲(chǔ)應(yīng)用,所以不需要增加任何的硬件,是一種低成本、高效、簡潔的嵌入式的在線升級(jí)方法。
以下將依據(jù)IAP原理,對LPC2119-嵌入式的微控制器給出詳細(xì)新方法的實(shí)現(xiàn)程序及技術(shù)的流程,該技術(shù)已經(jīng)在臭氧發(fā)生器嵌入式的控制程序里得到廣泛的應(yīng)用及驗(yàn)證。具有便捷、成本低、可靠、簡單等特點(diǎn)。
2.1 在線升級(jí)系統(tǒng)的結(jié)構(gòu)
現(xiàn)場數(shù)據(jù)采集及嵌入式的應(yīng)用程序傳輸媒介選用的是U盤,由于LPC2119無USB接口,所以采用的是外部擴(kuò)展的USB通信的接口,即USB的讀寫模塊將U盤里面的數(shù)據(jù)進(jìn)行讀寫,模塊的配置是SPI接口模式和LPC2119進(jìn)行連接,這個(gè)模塊往微控制器里供應(yīng)讀寫U盤的文件數(shù)據(jù)接口,它在微控制器里占用的內(nèi)存空間很少。U盤的讀寫支持字體模式、扇區(qū)模式及數(shù)據(jù)流模式,可選用U盤的讀寫模式進(jìn)行模塊配置。
2.2 IAP的功能實(shí)現(xiàn)調(diào)用過程
IAP的功能是通過編寫相對應(yīng)的功能函授,調(diào)用Boot Block 內(nèi)IAP的服務(wù)程序來實(shí)現(xiàn)的,功能函授將不同的參數(shù)及命令碼傳遞給IAP的服務(wù)程序,可把不同的IAP命令進(jìn)行實(shí)現(xiàn)。命令碼是50-56,相應(yīng)的對應(yīng)七個(gè)命令:為寫操作準(zhǔn)備扇區(qū)、拷貝RAM中的數(shù)據(jù)到Flash、擦除掉扇區(qū)、查空的扇區(qū)、讀器件的ID、讀引導(dǎo)程序的版本號(hào)以及數(shù)據(jù)校對。
寄存器及命令碼經(jīng)寄存器RO向若干個(gè)連續(xù)的字RAM進(jìn)行傳遞,結(jié)果及狀態(tài)碼在IAP執(zhí)行之后經(jīng)R1指向下的若干個(gè)連續(xù)字RAM進(jìn)行返回。因此,定義數(shù)組unsigned int result[ ]及un-signed int command[ ]分別用在結(jié)果返回及參數(shù)傳遞。result數(shù)組里的元素最多是兩個(gè),command數(shù)組里面的元素最多是五個(gè),數(shù)組里元素的個(gè)數(shù)應(yīng)該根據(jù)可能會(huì)用到的元素個(gè)數(shù)的最大數(shù)確定。
3 U盤數(shù)據(jù)的讀寫函數(shù)及協(xié)議
通過SPI的接口可實(shí)現(xiàn)U盤的讀寫模塊與LPC2119通信,SPI在模式0或者模式3工作,U盤的讀寫模塊和LPC2119之間能實(shí)現(xiàn)各種參數(shù)及命令的傳遞是通過字節(jié)數(shù)據(jù)直接的交互來實(shí)現(xiàn)的,對U盤讀寫模塊可相應(yīng)的完成各種操作。U盤的讀寫函數(shù)是ReadUdisk(),WriteUdisk();傳遞特定參數(shù)給讀寫函數(shù),對U盤里指定地址指定文件以指定的模式實(shí)現(xiàn)讀寫。在此應(yīng)用過程中,U盤文件里的數(shù)據(jù)應(yīng)該采用“字節(jié)模式對少數(shù)數(shù)據(jù)進(jìn)行讀寫,扇形模式對大量數(shù)據(jù)進(jìn)行讀寫”這個(gè)原則。
4 應(yīng)用程序的在線升級(jí)實(shí)現(xiàn)過程
4.1 運(yùn)行流程:
如圖2所示是LPC2119運(yùn)行流程圖,它分四個(gè)步驟進(jìn)行:(1)上電進(jìn)行復(fù)位之后執(zhí)行Boot Block引導(dǎo)程序,將微控制器進(jìn)行初始化;(2)判斷進(jìn)入ISP的功能與否,若沒有,就要執(zhí)行Flash里的OxO地址應(yīng)用程序;(3)在應(yīng)用程序相關(guān)初始化開始之后,開始調(diào)用Refresh()這個(gè)函數(shù),查詢出U盤是否存在其中或者是否需要對應(yīng)用程序進(jìn)行升級(jí);(4)依據(jù)查詢的結(jié)果,對應(yīng)用程序執(zhí)行升級(jí)或者將Reflesh()應(yīng)用程序予以退出。
LPC2119進(jìn)行復(fù)位之后,僅有一次對Reflesh()進(jìn)行調(diào)用的過程,所以若想實(shí)現(xiàn)升級(jí)就需要調(diào)用這個(gè)函數(shù)之前插進(jìn)去U盤,這種類型的設(shè)計(jì)滿足了控制系統(tǒng)在運(yùn)行的過程里不允許應(yīng)用程序進(jìn)行升級(jí)操作要求。
4.2 存儲(chǔ)空間配置:
LPC2119 Flash 里存有五種屬性程序:U盤的讀寫函數(shù)、應(yīng)用程序、IAP的功能函數(shù)、引導(dǎo)函數(shù)、Refresh()函數(shù)。Refresh()函數(shù)、U盤的讀寫函數(shù)以及IAP的功能函數(shù)組成了升級(jí)函數(shù),升級(jí)的過程不能將其改變,必須固定在存放區(qū)確定的位置處,應(yīng)用程序是指被升級(jí)的對象,引導(dǎo)函數(shù)指出廠時(shí)固化的程序。通過以上分析可以看出,其RAM空間及內(nèi)置Flash合理配置是IAP升級(jí)能否實(shí)現(xiàn)的關(guān)鍵。
依據(jù)程序的屬性及LPC2119運(yùn)行的流程,可把內(nèi)置Flash分三個(gè)區(qū):(1)0-13#扇區(qū)是應(yīng)用程序區(qū),可在線升級(jí)的應(yīng)用程序被放于其中;(2)14#扇區(qū)是升級(jí)程序區(qū),Refresh()函數(shù)、U盤的讀寫函數(shù)以及IAP的功能函數(shù)放置其中,對應(yīng)用程序進(jìn)行更新升級(jí);(4)15#扇區(qū)為Boot Block。相對應(yīng)的把RAM分成四個(gè)區(qū):應(yīng)用程序的使用區(qū)、U盤的數(shù)據(jù)緩沖區(qū)、升級(jí)程序的使用區(qū)、IAP的使用區(qū)。如圖3所示是存儲(chǔ)空間的配置圖。
4.3在線升級(jí)實(shí)現(xiàn)過程
在線升級(jí)實(shí)現(xiàn)過程如圖4所示,用戶需要對控制器進(jìn)行復(fù)位,因?yàn)樯?jí)執(zhí)行之后就不能再退出。由于采用的是絕對的地址對調(diào)用函數(shù)Refresh()函數(shù)進(jìn)行訪問,所以在修改或者升級(jí)應(yīng)用程序的時(shí)候,對這個(gè)調(diào)用的方法或者地址值是不能進(jìn)行改動(dòng)的。
由于在升級(jí)的過程中應(yīng)用程序代碼會(huì)隨著改變,所以在升級(jí)應(yīng)用程序的時(shí)候,不能夠調(diào)用應(yīng)用程序區(qū)函數(shù),可用絕對地址的應(yīng)用程序訪問方式對升級(jí)程序區(qū)函數(shù)進(jìn)行調(diào)用,但是在修改該應(yīng)用程序區(qū)的時(shí)候要一直保持這個(gè)調(diào)用方法及地址值。
5 升級(jí)過程中防意外出現(xiàn)的設(shè)計(jì)
升級(jí)過程,難免會(huì)出現(xiàn)數(shù)據(jù)的傳輸錯(cuò)誤、掉電、數(shù)據(jù)的來源出現(xiàn)中斷等各式各樣的意外導(dǎo)致升級(jí)可能失敗,所以要設(shè)計(jì)出一套合理的方法保護(hù)升級(jí)過程順利進(jìn)行。
對于斷點(diǎn)這種情況,可設(shè)置BOOT的引導(dǎo)區(qū)來確保系統(tǒng)來電之后可以繼續(xù)進(jìn)行升級(jí)程序過程完成升級(jí)。中斷的向量表里存放著32字節(jié)數(shù)據(jù),向量表進(jìn)行中斷之后,存放的就成為啟動(dòng)代碼,程序的設(shè)計(jì)就與啟動(dòng)代碼里完成RAM各種配置。在BOOT區(qū)用戶代碼引導(dǎo)以前檢查出上一次的升級(jí)過程是否順利的完成以及對升級(jí)的命令進(jìn)行檢查;對于數(shù)據(jù)的傳輸錯(cuò)誤以及數(shù)據(jù)的來源出現(xiàn)中斷這些現(xiàn)象,可通過CRC對傳輸?shù)臄?shù)據(jù)進(jìn)行校驗(yàn),把512字節(jié)作為單位對數(shù)據(jù)包進(jìn)行記錄,將正確的被接收的數(shù)據(jù)包存放在Flash里,丟失或者錯(cuò)誤的數(shù)據(jù)包可要求進(jìn)行重新傳送,這樣就大大的降低了數(shù)據(jù)升級(jí)過程中的危險(xiǎn),最大限度的保證升級(jí)過程的順利實(shí)現(xiàn)。
6 結(jié)語
此文提出了基于USB和IAP嵌入式的應(yīng)用程序的在線升級(jí)方法,經(jīng)U盤的讀寫模塊把U盤里應(yīng)用程序代碼進(jìn)行讀入微控制器RAM里,調(diào)用IAP的功能函數(shù)把代碼寫進(jìn)微控制器Flash內(nèi),將應(yīng)用程序的在線升級(jí)過程予以實(shí)現(xiàn)。這樣就省去了拆卸控制板或者到現(xiàn)場帶著專用的編程器這些繁瑣的過程,通信網(wǎng)絡(luò)也不需要使用,受環(huán)境的影響很小,成本很低。這個(gè)方法已經(jīng)被應(yīng)用在某些試驗(yàn)中并已經(jīng)成功,這個(gè)方法便捷、可靠且簡單,值得大大的推廣及應(yīng)用。
參考文獻(xiàn):
[1]孟志強(qiáng),朱良焱,石瑜.基于IAP和USB技術(shù)的嵌入式程序升級(jí)方法[J].湖南大學(xué)學(xué)報(bào)(自然科學(xué)版),2009,36(6).
[2]陳家義.基于IAP功能的USB方式軟件更新方案[J].自動(dòng)化與信息工程,2009,30(4).
[3]王靜,盛雯雯,王宗琛.IAP在C8051F340微控制器上的實(shí)現(xiàn)[J].煤炭技術(shù),2011,30(10).
[4]王黨利,寧生科,馬保吉.基于STM32F10X引導(dǎo)程序?qū)崿F(xiàn)USB在應(yīng)用中編程[J].國外電子測量技術(shù),2010,29(11).