胡小玉,劉國輝
(武漢郵電科學研究院研究生院光纖通信技術和網絡國家重點實驗室,湖北 武漢 430074)
在MSAP(多業務接入平臺)系統中,要對位于基站中的設備進行升級,就必須安排工程人員去現場,這種升級方式浪費了大量的人力和物力,增加了后期的設備維護成本。
單片機(In Application Programming,IAP)技術的出現,有效地簡化了應用程序的升級過程,降低了后期維護的成本。本文根據IAP原理,研究并給出了該方案在嵌入式微控制器SST89E516RD2中的詳細實現技術和程序流程。該實現技術在SSDX公司的MSAP系統嵌入式程序的修改和升級中得到了應用和驗證,具有簡單、便捷、可靠、成本低等優點。
SST89E516RD2芯片是基于51內核的8位單片機,它包含1 kbyte的片內RAM和72 kbyte的片內ROM[1]。片內ROM分為2個存儲塊,主存儲塊Block 0占用64 kbyte,次存儲塊Block 1占用8 kbyte。整個內部程序空間被限制為64 kbyte,SFCF[1∶0]用于控制存儲塊的切換,如圖1 所示。

圖1 SST89E516RD2片內ROM空間配置圖
SST89E516RD2允許駐留于某一個存儲塊中的IAP程序對另一塊存儲塊進行重編程操作,而絕不允許對同一個存儲塊中的任意地址進行重編程操作。要實現在線升級的功能,必須用支持在線升級的IAP程序替換原來的ISP程序,用來引導在線升級程序。
升級系統主要組成部分是網管中心、傳輸網絡和MSAP設備。傳輸網絡可以是PSTN(公共電話交換網)、互聯網等傳輸網絡,用來承載中心機房到設備傳輸的數據。MSAP系統由網管設備和終端設備構成,網管設備用于接收網管中心發送來的升級程序,終端設備即為要升級程序的對象,升級系統如圖2所示。

圖2 遠程升級系統框圖
SST89E516RD2單片機自帶高速異步串行口,支持IAP下的并行操作,所以本系統硬件組成較簡單。除單片機之外,只需要擴展1片Flash用來存儲升級的程序文件,單片機其他外圍電路按照設備功能需求設計,單片機與片外Flash的連接方式如圖3所示。片外Flash采用SST25VF080B芯片[2],它的存儲空間為1 Mbyte,最小擦除塊的容量為4 kbyte。單片機與片外Flash采用SPI總線進行通信,對片外Flash的讀寫、擦除等操作只需要使用相應的命令字即可,SST25VF080B常用功能表如圖4所示。

圖3 連接圖

圖4 SST25VF080B常用功能表
片外Flash首地址00000H~01000H存儲升級保護標志。地址01000H~5F000H分配給出廠時的配置和用戶最近一次的配置。隔離區用于保證存儲文件的獨立性。地址60000H~80000H分配給應用程序文件存儲區,其中程序文件A存儲出廠程序,程序文件B存儲接收到的升級程序[3-4]。根據以上分析,將外部Flash做如圖5所示的邏輯劃分。

圖5 SST25VF080B內存分配
2.3.1 遠程升級流程
PC網管軟件選擇一個子業務卡進行遠程升級,通過FTP協議發送升級數據包給網管盤,網管盤將接收到的升級數據包校驗OK后存儲至ARM的Flash中。網管盤發送復位指令將子業務卡的MCU復位,單片機復位啟動后進入IAP引導程序模式,準備進行升級。
2.3.2 單片機IAP程序流程
1)單片機IAP程序主循環處理流程
單片機復位后,從Block 1中運行IAP程序。當單片機運行IAP程序時,先判斷保護標志是否有效,如果該標志有效,表示上一次升級過程中遇到故障(斷電等異常情況),則單片機自動將程序恢復至出廠程序。否則單片機主程序待機15 s,等待單片機處理串口中斷接收到的數據,判斷是否有升級任務。如果有升級任務,則將單片機升級標志置為有效,如果該標志有效,則單片機IAP主程序待機15 min,等待在線升級完成。升級完成后,開啟看門狗等待單片機復位。單片機IAP程序主循環運行如圖6所示。
2)單片機IAP程序中斷處理流程

圖6 單片機IAP程序流程圖
網管盤收到文件傳輸命令后,發送一幀文件傳輸開始的指令,將待升級的應用程序包分解成適合本系統私有協議傳輸的小段,按照文件塊序號逐段發送給子業務卡,子業務卡收到數據包,CRC校驗無誤后將單片機升級標志置為有效,并開始擦除片外Flash文件B部分的塊。程序文件傳輸中,MCU開始接收數據,此時單片機將接收到的程序文件寫入片外Flash從文件B部分的塊;程序傳輸結束時,MCU將升級文件的文件名、文件長度和文件CRC16的校驗和寫入片外Flash從7FFFFH~80000H部分的扇區,共4 kbyte,單片機對接收到的文件整體校驗,發送應答幀通知網管盤校驗結果。
網管盤收到執行升級命令后,通知子業務卡準備執行升級。單片機會先運行Block 1的IAP程序,校驗升級的應用程序文件,如果校驗通過,將保護標志置為有效。然后開始擦除單片機片內ROM整個Block 0的塊,當SFST寄存器的標志位置位后,表示擦除完成。接著,單片機將片外Flash存儲區B中的升級文件讀出并寫入到單片機片內ROM的Block 0塊中,開啟看門狗,等待單片機復位,整個升級程序完成。
當開門狗溢出后,單片機復位令升級標志也復位,單片機程序跳轉到Block 0起始位置運行。單片機程序正常運行后將保護標志復位。執行程序升級模塊如圖7所示。

圖7 單片機IAP程序中斷處理流程
2.3.3 網管盤與子業務卡的通信設計
網管盤與子業務卡之間的SPI通信采用SSDX私有協議,該協議具有一定的糾錯機制和異常處理機制。在網管盤ARM與子業務卡MCU通信中采用發送一幀數據,確認一幀數據,收到錯幀,請求重發的通信形式[5]。SSDX私有協議設計的SPI通信幀最大幀長不超過500 byte,接收程序可以通過文件塊序號n在終端進行文件整理組合,單片機發送應答幀給網管盤通知文件塊n接收OK,否則網管盤重傳文件塊5次,如果5次以內傳送失敗,則標志此次升級失敗。SSDX私有協議數據幀格式如圖8所示。

圖8 SSDX私有協議幀格式
幀頭:表示數據包的開始,固定為0xFE,0xFA 2個字節。
子卡地址:表示子卡在1個MSAP網元中的位置。
命令字:文件傳輸命令還是執行升級命令。
指令值:命令字的子命令。如果命令字是文件傳輸命令,則指令值有傳輸開始、傳輸中、傳輸結束3個指令;如果命令字是升級命令,則指令值就是執行在線升級指令。
文件塊序號:表示升級程序所分割的報文所處的序號。
文件塊內容:程序內容字節。
CRC16校驗和:一幀數據的校驗和,采用CRC16校驗。
2.3.4 單片機IAP主要函數代碼
單片機在進行升級過程中,對片內ROM主要進行塊擦除和字節編程操作,該操作的程序代碼如下所示:
//單片機片內ROM塊擦除函數
Void block Erase(void)
{
SFCF|=0x40; //IAP功能使能
SFAH=0x00; //擦除的塊為Block 0
SFDT=0x55;
SFCM=0x0D;
SFCF=SFCF& ~0x40;//IAP功能禁止
}
//單片機片內ROM字節編程函數
Void SST_byte_program(unsigned short dataAddr,
unsigned char dataByte)
{
SFCF=SFCF|0x40;//IAP功能使能
SFAH=dataAddr> >8;
SFAL=dataAddr;//裝入地址SFDT=dataByte;//填入數據
SFCM=0x0D; //填入字節編程命令
while(SFST&0x40){;}
SFCF=SFCF& ~0x40;//IAP功能禁止
return;
}
單片機對片外Flash的操作主要用到擦除片外Flash塊函數和讀片外Flash數據函數[6],通過單片機與片外Flash的SPI讀指令(spi_SendByte)和寫指令(spi_Read-Byte)向SST25VF080B發送相應的命令字,各常用功能命令字如圖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的數據
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());//返回值
}
按照上述的升級系統搭建好測試環境后,將MCU的IAP程序下載到Block 1中,通過PC網管對終端設備進行遠程升級。測試結果證明子業務卡的軟件版本能夠成功地進行更新,如圖9所示。在遇到異常情況時,如升級的過程中出現斷電故障,子業務卡能自動恢復到出廠程序運行,等待再次響應網管中心下達升級命令,直至升級成功。

圖9 升級前后版本對比圖(截圖)
本方案以SST89E516RD2芯片的IAP功能為基礎,利用擴展的Flash存儲分區,提供了一種MSAP系統遠程在線升級的方法,有效地降低了后期設備的維護成本。本方案在SSDX的MSAP系統中已得到廣泛應用,在實際應用中得到了用戶很高的評價,大大增加了產品的競爭力。
[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]趙炯,賈培源,李中山,等.嵌入式設備遠程在線升級技術[J].計算機工程,2010,36(12):262-264.
[4]曾浩,呂華,王銘偉.IPTV機頂盒升級方案的設計與實現[J].電視技術,2010,34(5):54-56.
[5]鄧中亮,孫靜.嵌入式設備在線系統升級的設計與實現[J].計算機工程與設計,2009,30(13):3085-3087.
[6]邵貝貝.單片機嵌入式應用的在線開發方法[M].北京:機械工業出版社,2004.