胡小玉,劉國輝
(武漢郵電科學(xué)研究院研究生院光纖通信技術(shù)和網(wǎng)絡(luò)國家重點(diǎn)實(shí)驗(yàn)室,湖北 武漢 430074)
在MSAP(多業(yè)務(wù)接入平臺(tái))系統(tǒng)中,要對(duì)位于基站中的設(shè)備進(jìn)行升級(jí),就必須安排工程人員去現(xiàn)場(chǎng),這種升級(jí)方式浪費(fèi)了大量的人力和物力,增加了后期的設(shè)備維護(hù)成本。
單片機(jī)(In Application Programming,IAP)技術(shù)的出現(xiàn),有效地簡化了應(yīng)用程序的升級(jí)過程,降低了后期維護(hù)的成本。本文根據(jù)IAP原理,研究并給出了該方案在嵌入式微控制器SST89E516RD2中的詳細(xì)實(shí)現(xiàn)技術(shù)和程序流程。該實(shí)現(xiàn)技術(shù)在SSDX公司的MSAP系統(tǒng)嵌入式程序的修改和升級(jí)中得到了應(yīng)用和驗(yàn)證,具有簡單、便捷、可靠、成本低等優(yōu)點(diǎn)。
SST89E516RD2芯片是基于51內(nèi)核的8位單片機(jī),它包含1 kbyte的片內(nèi)RAM和72 kbyte的片內(nèi)ROM[1]。片內(nèi)ROM分為2個(gè)存儲(chǔ)塊,主存儲(chǔ)塊Block 0占用64 kbyte,次存儲(chǔ)塊Block 1占用8 kbyte。整個(gè)內(nèi)部程序空間被限制為64 kbyte,SFCF[1∶0]用于控制存儲(chǔ)塊的切換,如圖1 所示。
圖1 SST89E516RD2片內(nèi)ROM空間配置圖
SST89E516RD2允許駐留于某一個(gè)存儲(chǔ)塊中的IAP程序?qū)α硪粔K存儲(chǔ)塊進(jìn)行重編程操作,而絕不允許對(duì)同一個(gè)存儲(chǔ)塊中的任意地址進(jìn)行重編程操作。要實(shí)現(xiàn)在線升級(jí)的功能,必須用支持在線升級(jí)的IAP程序替換原來的ISP程序,用來引導(dǎo)在線升級(jí)程序。
升級(jí)系統(tǒng)主要組成部分是網(wǎng)管中心、傳輸網(wǎng)絡(luò)和MSAP設(shè)備。傳輸網(wǎng)絡(luò)可以是PSTN(公共電話交換網(wǎng))、互聯(lián)網(wǎng)等傳輸網(wǎng)絡(luò),用來承載中心機(jī)房到設(shè)備傳輸?shù)臄?shù)據(jù)。MSAP系統(tǒng)由網(wǎng)管設(shè)備和終端設(shè)備構(gòu)成,網(wǎng)管設(shè)備用于接收網(wǎng)管中心發(fā)送來的升級(jí)程序,終端設(shè)備即為要升級(jí)程序的對(duì)象,升級(jí)系統(tǒng)如圖2所示。
圖2 遠(yuǎn)程升級(jí)系統(tǒng)框圖
SST89E516RD2單片機(jī)自帶高速異步串行口,支持IAP下的并行操作,所以本系統(tǒng)硬件組成較簡單。除單片機(jī)之外,只需要擴(kuò)展1片F(xiàn)lash用來存儲(chǔ)升級(jí)的程序文件,單片機(jī)其他外圍電路按照設(shè)備功能需求設(shè)計(jì),單片機(jī)與片外Flash的連接方式如圖3所示。片外Flash采用SST25VF080B芯片[2],它的存儲(chǔ)空間為1 Mbyte,最小擦除塊的容量為4 kbyte。單片機(jī)與片外Flash采用SPI總線進(jìn)行通信,對(duì)片外Flash的讀寫、擦除等操作只需要使用相應(yīng)的命令字即可,SST25VF080B常用功能表如圖4所示。
圖3 連接圖
圖4 SST25VF080B常用功能表
片外Flash首地址00000H~01000H存儲(chǔ)升級(jí)保護(hù)標(biāo)志。地址01000H~5F000H分配給出廠時(shí)的配置和用戶最近一次的配置。隔離區(qū)用于保證存儲(chǔ)文件的獨(dú)立性。地址60000H~80000H分配給應(yīng)用程序文件存儲(chǔ)區(qū),其中程序文件A存儲(chǔ)出廠程序,程序文件B存儲(chǔ)接收到的升級(jí)程序[3-4]。根據(jù)以上分析,將外部Flash做如圖5所示的邏輯劃分。
圖5 SST25VF080B內(nèi)存分配
2.3.1 遠(yuǎn)程升級(jí)流程
PC網(wǎng)管軟件選擇一個(gè)子業(yè)務(wù)卡進(jìn)行遠(yuǎn)程升級(jí),通過FTP協(xié)議發(fā)送升級(jí)數(shù)據(jù)包給網(wǎng)管盤,網(wǎng)管盤將接收到的升級(jí)數(shù)據(jù)包校驗(yàn)OK后存儲(chǔ)至ARM的Flash中。網(wǎng)管盤發(fā)送復(fù)位指令將子業(yè)務(wù)卡的MCU復(fù)位,單片機(jī)復(fù)位啟動(dòng)后進(jìn)入IAP引導(dǎo)程序模式,準(zhǔn)備進(jìn)行升級(jí)。
2.3.2 單片機(jī)IAP程序流程
1)單片機(jī)IAP程序主循環(huán)處理流程
單片機(jī)復(fù)位后,從Block 1中運(yùn)行IAP程序。當(dāng)單片機(jī)運(yùn)行IAP程序時(shí),先判斷保護(hù)標(biāo)志是否有效,如果該標(biāo)志有效,表示上一次升級(jí)過程中遇到故障(斷電等異常情況),則單片機(jī)自動(dòng)將程序恢復(fù)至出廠程序。否則單片機(jī)主程序待機(jī)15 s,等待單片機(jī)處理串口中斷接收到的數(shù)據(jù),判斷是否有升級(jí)任務(wù)。如果有升級(jí)任務(wù),則將單片機(jī)升級(jí)標(biāo)志置為有效,如果該標(biāo)志有效,則單片機(jī)IAP主程序待機(jī)15 min,等待在線升級(jí)完成。升級(jí)完成后,開啟看門狗等待單片機(jī)復(fù)位。單片機(jī)IAP程序主循環(huán)運(yùn)行如圖6所示。
2)單片機(jī)IAP程序中斷處理流程
圖6 單片機(jī)IAP程序流程圖
網(wǎng)管盤收到文件傳輸命令后,發(fā)送一幀文件傳輸開始的指令,將待升級(jí)的應(yīng)用程序包分解成適合本系統(tǒng)私有協(xié)議傳輸?shù)男《?,按照文件塊序號(hào)逐段發(fā)送給子業(yè)務(wù)卡,子業(yè)務(wù)卡收到數(shù)據(jù)包,CRC校驗(yàn)無誤后將單片機(jī)升級(jí)標(biāo)志置為有效,并開始擦除片外Flash文件B部分的塊。程序文件傳輸中,MCU開始接收數(shù)據(jù),此時(shí)單片機(jī)將接收到的程序文件寫入片外Flash從文件B部分的塊;程序傳輸結(jié)束時(shí),MCU將升級(jí)文件的文件名、文件長度和文件CRC16的校驗(yàn)和寫入片外Flash從7FFFFH~80000H部分的扇區(qū),共4 kbyte,單片機(jī)對(duì)接收到的文件整體校驗(yàn),發(fā)送應(yīng)答幀通知網(wǎng)管盤校驗(yàn)結(jié)果。
網(wǎng)管盤收到執(zhí)行升級(jí)命令后,通知子業(yè)務(wù)卡準(zhǔn)備執(zhí)行升級(jí)。單片機(jī)會(huì)先運(yùn)行Block 1的IAP程序,校驗(yàn)升級(jí)的應(yīng)用程序文件,如果校驗(yàn)通過,將保護(hù)標(biāo)志置為有效。然后開始擦除單片機(jī)片內(nèi)ROM整個(gè)Block 0的塊,當(dāng)SFST寄存器的標(biāo)志位置位后,表示擦除完成。接著,單片機(jī)將片外Flash存儲(chǔ)區(qū)B中的升級(jí)文件讀出并寫入到單片機(jī)片內(nèi)ROM的Block 0塊中,開啟看門狗,等待單片機(jī)復(fù)位,整個(gè)升級(jí)程序完成。
當(dāng)開門狗溢出后,單片機(jī)復(fù)位令升級(jí)標(biāo)志也復(fù)位,單片機(jī)程序跳轉(zhuǎn)到Block 0起始位置運(yùn)行。單片機(jī)程序正常運(yùn)行后將保護(hù)標(biāo)志復(fù)位。執(zhí)行程序升級(jí)模塊如圖7所示。
圖7 單片機(jī)IAP程序中斷處理流程
2.3.3 網(wǎng)管盤與子業(yè)務(wù)卡的通信設(shè)計(jì)
網(wǎng)管盤與子業(yè)務(wù)卡之間的SPI通信采用SSDX私有協(xié)議,該協(xié)議具有一定的糾錯(cuò)機(jī)制和異常處理機(jī)制。在網(wǎng)管盤ARM與子業(yè)務(wù)卡MCU通信中采用發(fā)送一幀數(shù)據(jù),確認(rèn)一幀數(shù)據(jù),收到錯(cuò)幀,請(qǐng)求重發(fā)的通信形式[5]。SSDX私有協(xié)議設(shè)計(jì)的SPI通信幀最大幀長不超過500 byte,接收程序可以通過文件塊序號(hào)n在終端進(jìn)行文件整理組合,單片機(jī)發(fā)送應(yīng)答幀給網(wǎng)管盤通知文件塊n接收OK,否則網(wǎng)管盤重傳文件塊5次,如果5次以內(nèi)傳送失敗,則標(biāo)志此次升級(jí)失敗。SSDX私有協(xié)議數(shù)據(jù)幀格式如圖8所示。
圖8 SSDX私有協(xié)議幀格式
幀頭:表示數(shù)據(jù)包的開始,固定為0xFE,0xFA 2個(gè)字節(jié)。
子卡地址:表示子卡在1個(gè)MSAP網(wǎng)元中的位置。
命令字:文件傳輸命令還是執(zhí)行升級(jí)命令。
指令值:命令字的子命令。如果命令字是文件傳輸命令,則指令值有傳輸開始、傳輸中、傳輸結(jié)束3個(gè)指令;如果命令字是升級(jí)命令,則指令值就是執(zhí)行在線升級(jí)指令。
文件塊序號(hào):表示升級(jí)程序所分割的報(bào)文所處的序號(hào)。
文件塊內(nèi)容:程序內(nèi)容字節(jié)。
CRC16校驗(yàn)和:一幀數(shù)據(jù)的校驗(yàn)和,采用CRC16校驗(yàn)。
2.3.4 單片機(jī)IAP主要函數(shù)代碼
單片機(jī)在進(jìn)行升級(jí)過程中,對(duì)片內(nèi)ROM主要進(jìn)行塊擦除和字節(jié)編程操作,該操作的程序代碼如下所示:
//單片機(jī)片內(nèi)ROM塊擦除函數(shù)
Void block Erase(void)
{
SFCF|=0x40; //IAP功能使能
SFAH=0x00; //擦除的塊為Block 0
SFDT=0x55;
SFCM=0x0D;
SFCF=SFCF& ~0x40;//IAP功能禁止
}
//單片機(jī)片內(nèi)ROM字節(jié)編程函數(shù)
Void SST_byte_program(unsigned short dataAddr,
unsigned char dataByte)
{
SFCF=SFCF|0x40;//IAP功能使能
SFAH=dataAddr> >8;
SFAL=dataAddr;//裝入地址SFDT=dataByte;//填入數(shù)據(jù)
SFCM=0x0D; //填入字節(jié)編程命令
while(SFST&0x40){;}
SFCF=SFCF& ~0x40;//IAP功能禁止
return;
}
單片機(jī)對(duì)片外Flash的操作主要用到擦除片外Flash塊函數(shù)和讀片外Flash數(shù)據(jù)函數(shù)[6],通過單片機(jī)與片外Flash的SPI讀指令(spi_SendByte)和寫指令(spi_Read-Byte)向SST25VF080B發(fā)送相應(yīng)的命令字,各常用功能命令字如圖3所示。它們的程序源代碼如下所示:
//擦除以Dst為起始地址大小為64 k的塊
void FlashBlock_Erase(unsigned long Dst)
{
spi_SendByte(0xD8);//一次擦除64 k的塊
spi_SendByte(((Dst&0xFFFFFF)>>16));
spi_SendByte(((Dst&0xFFFF)>>8));
spi_SendByte(Dst&0xFF);
Wait_Busy();
}
//讀取地址Dst的數(shù)據(jù)
unsigned char FlashRead(unsigned long Dst)
{
spi_SendByte(0x03);//讀命令
spi_SendByte(((Dst&0xFFFFFF)>>16));
spi_SendByte(((Dst&0xFFFF)>>8));
spi_SendByte(Dst&0xFF);
return(Spi_ReadByte());//返回值
}
按照上述的升級(jí)系統(tǒng)搭建好測(cè)試環(huán)境后,將MCU的IAP程序下載到Block 1中,通過PC網(wǎng)管對(duì)終端設(shè)備進(jìn)行遠(yuǎn)程升級(jí)。測(cè)試結(jié)果證明子業(yè)務(wù)卡的軟件版本能夠成功地進(jìn)行更新,如圖9所示。在遇到異常情況時(shí),如升級(jí)的過程中出現(xiàn)斷電故障,子業(yè)務(wù)卡能自動(dòng)恢復(fù)到出廠程序運(yùn)行,等待再次響應(yīng)網(wǎng)管中心下達(dá)升級(jí)命令,直至升級(jí)成功。
圖9 升級(jí)前后版本對(duì)比圖(截圖)
本方案以SST89E516RD2芯片的IAP功能為基礎(chǔ),利用擴(kuò)展的Flash存儲(chǔ)分區(qū),提供了一種MSAP系統(tǒng)遠(yuǎn)程在線升級(jí)的方法,有效地降低了后期設(shè)備的維護(hù)成本。本方案在SSDX的MSAP系統(tǒng)中已得到廣泛應(yīng)用,在實(shí)際應(yīng)用中得到了用戶很高的評(píng)價(jià),大大增加了產(chǎn)品的競(jìng)爭(zhēng)力。
[1]SST89E516RD2[EB/OL].[2012-05-25].http://wenku.baidu.com/view/d542fc0cf12d 2af90242e6ba.html.
[2]SST25VF080B[EB/OL].[2012-05-25].http://wenku.baidu.com/view/e5b7a579168884868762d6aa.html.
[3]趙炯,賈培源,李中山,等.嵌入式設(shè)備遠(yuǎn)程在線升級(jí)技術(shù)[J].計(jì)算機(jī)工程,2010,36(12):262-264.
[4]曾浩,呂華,王銘偉.IPTV機(jī)頂盒升級(jí)方案的設(shè)計(jì)與實(shí)現(xiàn)[J].電視技術(shù),2010,34(5):54-56.
[5]鄧中亮,孫靜.嵌入式設(shè)備在線系統(tǒng)升級(jí)的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)工程與設(shè)計(jì),2009,30(13):3085-3087.
[6]邵貝貝.單片機(jī)嵌入式應(yīng)用的在線開發(fā)方法[M].北京:機(jī)械工業(yè)出版社,2004.