1 系統(tǒng)工作原理
該系統(tǒng)主要有GPRS連接、POP3接收郵件、Base 64解碼和IA P編程4部分組成。GPRS連接通過(guò)SIM300模塊將低壓電力載波抄表終端連接到遠(yuǎn)程升級(jí)服務(wù)器;然后,通過(guò)POP3協(xié)議將郵件服務(wù)器上的新程序下載到低壓電力載波抄表終端上;之后,對(duì)下載的程序進(jìn)行Base 64解碼,*通過(guò)LPC2214的IAP功能將解碼后的程序?qū)懙絃PC2214的FLASH中,完成遠(yuǎn)程升級(jí)的功能。系統(tǒng)框圖如圖1所示。
2 POP3協(xié)議和Base 64編碼原理
2.1 POP3協(xié)議
POP3適用于C/S結(jié)構(gòu)的脫機(jī)模型,是因特網(wǎng)電子郵件的*個(gè)離線(xiàn)協(xié)議標(biāo)準(zhǔn),POP3允許用戶(hù)從服務(wù)器上把郵件存儲(chǔ)到本地主機(jī)(即自己的計(jì)算機(jī))上,同時(shí)刪除保存在郵件服務(wù)器上的郵件,而POP3服務(wù)器則是遵循POP3協(xié)議的接收郵件服務(wù)器,用來(lái)接收電子郵件的。POP3協(xié)議有三種狀態(tài):認(rèn)可狀態(tài)、處理狀態(tài)和更新?tīng)顟B(tài)。當(dāng)客戶(hù)機(jī)與服務(wù)器建立聯(lián)系時(shí),一旦客戶(hù)機(jī)提供了自己身份并成功確認(rèn),即由認(rèn)可狀態(tài)轉(zhuǎn)入處理狀態(tài),在完成相應(yīng)的操作后客戶(hù)機(jī)發(fā)出Quit命令,則進(jìn)入更新?tīng)顟B(tài),更新之后重返認(rèn)可狀態(tài)。
2.2 Base 64編碼原理
Base 64是一種很常見(jiàn)的編碼規(guī)范,被設(shè)計(jì)用來(lái)將任意序列的8字節(jié)描述為一種不易被人直接識(shí)別的形式。它的作用是將二進(jìn)制序列轉(zhuǎn)換為人類(lèi)可讀的ASCII字符序列,常用在需用通過(guò)文本來(lái)傳輸二進(jìn)制數(shù)據(jù)的協(xié)議中,如HTTP和SMTP等。
Base 64編碼規(guī)則為對(duì)于待編碼數(shù)據(jù),以3個(gè)字節(jié)為單位,依次取6位,前兩位補(bǔ)0形成8位編碼,由于3×8=4×6,3個(gè)字節(jié)的輸入會(huì)編碼成4個(gè)字節(jié)的輸出。如果剩下的字符不足3個(gè)字節(jié),則用0填充,輸出字符使用“=”,因此編碼后輸出的文本末尾可能會(huì)出現(xiàn)1個(gè)或2個(gè)“=”。因此,Base 64解碼過(guò)程與編碼過(guò)程正好相反。這里給出解碼的關(guān)鍵程序示例:
3 LPC2214的IAP功能及FLASH Boot裝載程序
LPC2214的FLASH存儲(chǔ)器系統(tǒng)包含256 KBFLASH器件的17個(gè)扇區(qū)。FLASH存儲(chǔ)器從地址0開(kāi)始并向上增加。Boot裝載程序控制復(fù)位后的初始化操作,并提供實(shí)現(xiàn)FLASH編程的方法。Boot裝載器可啟動(dòng)對(duì)空片的編程、已編程器件的擦除和再編程以及在運(yùn)行系統(tǒng)中由應(yīng)用程序?qū)LASH存儲(chǔ)器進(jìn)行編程。
對(duì)于IAP來(lái)說(shuō),應(yīng)當(dāng)通過(guò)寄存器r0中的字指針指向存儲(chǔ)器(RAM)包含的命令代碼和參數(shù),以調(diào)用IAP程序。IAP的命令結(jié)果返回到寄存器r1所指向的返回表。用戶(hù)可通過(guò)傳遞寄存器r0和r1中的相同指針重用命令表來(lái)得到結(jié)果。參數(shù)表應(yīng)當(dāng)大到足夠保存所有的結(jié)果,以防結(jié)果的數(shù)目大于參數(shù)的數(shù)目。參數(shù)和結(jié)果的數(shù)目根據(jù)IAP命令而有所不同。參數(shù)的*數(shù)目為5,由“將RAM內(nèi)容復(fù)制到FLASH”命令傳遞;結(jié)果的*數(shù)目為2,由“扇區(qū)查空”命令返回。命令處理程序在接收到一個(gè)未定義的命令時(shí)發(fā)送狀態(tài)代碼IN-VALID_COMMAND。IAP程序是thumb代碼,位于地址0x7FFFFFF0。
4 遠(yuǎn)程升級(jí)軟件設(shè)計(jì)
首先,系統(tǒng)對(duì)SIM300模塊進(jìn)行初始化,然后連接遠(yuǎn)程升級(jí)服務(wù)器,接著通過(guò)POP3協(xié)議登錄郵件服務(wù)器,并下載新程序,主ARM將下載的程序進(jìn)行Base 64解碼,*通過(guò)IAP將解碼后的程序?qū)懙紸RM的FLASH中,以完成遠(yuǎn)程升級(jí)的目的。詳細(xì)流程圖如圖2所示。由于遠(yuǎn)程升級(jí)需要低壓電力載波抄表終端抄表主程序的配合,因此這里給出了遠(yuǎn)程升級(jí)相關(guān)的部分。在IAP寫(xiě)FLASH的過(guò)程中,需要注意FLASH存儲(chǔ)器在寫(xiě)或擦除操作過(guò)程中不可被訪問(wèn)。執(zhí)行FLASH寫(xiě)/擦除操作的IAP命令使用片內(nèi)RAM頂端的32個(gè)字節(jié)空間。用戶(hù)程序不應(yīng)使用該空間。IAP擦除FLASH的部分源碼如下: