文獻(xiàn)標(biāo)識碼: A
DOI:10.16157/j.issn.0258-7998.2017.03.015
中文引用格式: 何國鋒,李月婷,劉宇紅. 基于模擬BIOS的可穿戴設(shè)備固件在線升級實現(xiàn)[J].電子技術(shù)應(yīng)用,2017,43(3):63-65,69.
英文引用格式: He Guofeng,Li Yueting,Liu Yuhong. Firmware online upgrade implementation for wearable devices based on simulating BIOS[J].Application of Electronic Technique,2017,43(3):63-65,69.
0 引言
據(jù)統(tǒng)計,2013年全球可穿戴設(shè)備出貨量在700萬件以上[1],2014年則達(dá)到了2 890萬件,國內(nèi)市場規(guī)模更是達(dá)到了22億人民幣,年增長率在144%[2], 2015年全球可穿戴設(shè)備出貨量已達(dá)到7 610萬件,與2014年相比增長了163.6%,預(yù)計2016年年底,可穿戴設(shè)備的出貨量將達(dá)到1.1億。如此龐大數(shù)量的產(chǎn)品想要長期保持市場的占有量與使用性能,就要對產(chǎn)品進(jìn)行周期性的優(yōu)化與升級,使產(chǎn)品在使用過程中修正BUG,優(yōu)化、增加新的功能。對產(chǎn)品進(jìn)行固件升級有多種方式,如JTAG、BSL等,這些方式只適用于產(chǎn)品未出廠時使用,對于已經(jīng)售出的產(chǎn)品,就需要通過互聯(lián)網(wǎng)、無線傳輸?shù)确椒?,隨時控制更新產(chǎn)品中的固件,以發(fā)揮可穿戴設(shè)備的性能。這些對于固件的更新,將對用戶的體驗度產(chǎn)生很大的影響。本文以基于MSP430F1611為處理器的可穿戴設(shè)備為例,通過模擬BIOS程序,對Flash分塊操作來實現(xiàn)設(shè)備的固件升級。
1 在線升級總體架構(gòu)
可穿戴設(shè)備進(jìn)行固件在線升級時,首先要接收服務(wù)器推送的最新固件包。圖1為升級包從服務(wù)器到達(dá)設(shè)備中的過程圖,對于能夠連接互聯(lián)網(wǎng)的設(shè)備,可以直接內(nèi)嵌一個到服務(wù)器的接口,直接下載升級包,如圖中虛線所示;對于許多體積小無法連接網(wǎng)絡(luò)的設(shè)備,如常見的智能手環(huán),可以如圖中實線所示,通過手機(jī)從網(wǎng)絡(luò)中接收升級包,然后通過藍(lán)牙等無線方式下載到設(shè)備中。
2 固件升級原理
2.1 系統(tǒng)從Flash啟動過程
MSP430F1611單片機(jī)[3]是德州儀器公司推出的一款具有10 KB片內(nèi)RAM和48 KB+256 B片內(nèi)Flash的16 bit超低功耗處理器,擁有豐富的外設(shè)資源,常被用在智能可穿戴設(shè)備中,以達(dá)到低功耗的目的。
從MSP430F1611數(shù)據(jù)手冊上可以查找到內(nèi)部資源空間地址表。其中0x4000~0xFFFF為Flash地址空間,共48 KB,這其中從0xFFE0~0xFFFF為中斷向量地址,其他空間都可以由用戶進(jìn)行操作。當(dāng)向芯片中燒寫程序時,程序代碼被寫入到Flash中,寫入的起始位置即程序的入口地址。系統(tǒng)上電后,PC指針指到中斷向量表的復(fù)位向量,從中讀取程序起始地址入口,然后跳轉(zhuǎn)到這個入口處執(zhí)行程序。這個地址在代碼編譯過程中會自動生成,用戶可以修改,指定將固件燒寫到Flash中其他地址。
2.2 自動更新原理
圖2為計算機(jī)中BIOS程序引導(dǎo)操作系統(tǒng)過程的簡化框圖。在計算機(jī)上電時,會啟用固化在主板空間內(nèi)的一段BIOS引導(dǎo)程序進(jìn)入POST階段,該階段主要工作為初始化和檢測相關(guān)的硬件資源。然后進(jìn)入操作系統(tǒng)引導(dǎo)階段,首先根據(jù)BIOS設(shè)置來檢測光驅(qū)或U盤中有無引導(dǎo)系統(tǒng),如果有則將引導(dǎo)系統(tǒng)加入到內(nèi)存0000:7C00H中,執(zhí)行引導(dǎo)系統(tǒng);如果沒有,則搜索硬盤第一個扇區(qū),將內(nèi)容加載到內(nèi)存0000:7C00H中,運(yùn)行系統(tǒng)。
基于這種思想,本文模擬設(shè)計了一段BIOS引導(dǎo)程序,將Flash劃分區(qū)域,一塊相當(dāng)于光驅(qū),起始地址記為A,一塊相當(dāng)于C盤,起始地址記為C。在系統(tǒng)上電時,檢測Flash上A地址后有無新版固件,如果有,則將該固件復(fù)制到Flash上地址C后的空間,完成從光驅(qū)安裝系統(tǒng)到C盤。復(fù)制完成后刪除A空間內(nèi)容,相當(dāng)于光驅(qū)彈出的動作,重啟系統(tǒng);如果檢測到起始地址為A的空間內(nèi)無文件存在,則通過匯編指令,將PC指針指到C地址,系統(tǒng)將從C盤啟動??傮w架構(gòu)流程圖如圖3所示,其中用虛線圍起來的部分不屬于BIOS引導(dǎo)程序中的內(nèi)容,而是操作系統(tǒng),即用戶程序。這樣,單片機(jī)中相當(dāng)于有2個程序:1個BIOS程序,1個用戶程序。在開機(jī)時進(jìn)入BIOS,由BIOS決定是否將程序入口指針切換到用戶程序。切換到用戶程序需使用匯編指令將PC指針移到用戶程序的復(fù)位向量地址0xFFDE中指向的地址[4],即C盤起始地址:
asm(“mov &0xFFDE”);
因為在Flash中重新為用戶程序分配了中斷向量表,需要使用匯編指令對15個中斷向量表進(jìn)行映射[6]。如對第一個中斷向量映射的代碼如下:
#pragma vector=0
__interrupt void intec_0(void)
{
asm(“br &0xFFC0”);
}
2.3 BIOS引導(dǎo)程序固化
BIOS引導(dǎo)程序編寫完成后,需要修改工程中的xcl文件,將BIOS引導(dǎo)程序固化到指定位置,芯片的主Flash地址范圍為0x4000~0xFFFF,其中0xFFE0~0xFFF為中斷向量表,其余的為用戶空間。將用戶空間分成4部分,如圖4所示,整個灰色部分為原來的用戶空間。其中0x4000~0x5FFF為BIOS程序空間;0x6000~0xAFFF為用戶程序空間,類似電腦上的C盤; 0xB000~0xFFBF為存儲空間,類似電腦上的光驅(qū),用來存儲接收到的新固件;0xFFC0~0xFFDF為用戶中斷向量表。修改xcl文件[4,5],將BIOS程序代碼段、常量的地址范圍改為0x6000~0xAFFF后編譯工程,將生成的BIOS文件通過下載器燒寫到單片機(jī)中,完成BIOS引導(dǎo)程序的固化。
2.4 用戶程序?qū)崿F(xiàn)
用戶程序的實現(xiàn)需要通過藍(lán)牙連接手機(jī)或電腦App,當(dāng)有新版本的固件包時,App會將固件包通過藍(lán)牙下發(fā)到設(shè)備中。用戶程序在接收固件包的同時,將固件包保存在0xB000~0xFFBF范圍內(nèi)的Flash空間中,本設(shè)計因為用戶程序代碼量少,將程序保存在0xB000地址后,如果用戶程序過大,可以考慮通過擴(kuò)展片外Flash解決。用戶程序流程圖如圖5所示。
用戶程序需要放在0x6000~0xAFFF范圍內(nèi),因此同樣需要修改工程文件中的xcl文件,修改代碼段、常量的地址范圍為0x6000~0xAFFF。另外因為原中斷向量地址被BIOS程序所占據(jù),需要修改xcl文件中的中斷向量地址為0xFFC0~0xFFDF,重啟向量地址為0xFFDE。要將應(yīng)用程序作為固件更新包推送到設(shè)備終端,因此要選擇生成txt格式的16進(jìn)制Hex文件。圖6所示是一簡單的文件生成的txt文件內(nèi)容,傳輸過程中可以考慮加密及錯誤驗證。
圖6中@6000代表程序的起始地址為6000,這段代碼會被放在以0x6000為起始地址的Flash內(nèi);@FFDE表示程序的復(fù)位向量地址為0xFFDE,其中保存子程序入口地址,即0x6000;q表示程序結(jié)束。
3 藍(lán)牙通信
3.1 藍(lán)牙技術(shù)簡介
為了實現(xiàn)無線接收,本文在設(shè)備上使用了藍(lán)牙技術(shù)來進(jìn)行數(shù)據(jù)傳送。藍(lán)牙技術(shù)[6]最初是在1994年時由電信巨頭愛立信公司推出,用來替代RS232標(biāo)準(zhǔn)的一種短距離(10 m~100 m)無線通信技術(shù)。藍(lán)牙通信工作在2.4 GHz ISM頻段上,可以連接多個設(shè)備,方便數(shù)據(jù)共享傳輸。藍(lán)牙通信無需取得執(zhí)照許可,因此被廣泛用于工業(yè)、醫(yī)療、手機(jī)、平板等電子設(shè)備中。
3.2 藍(lán)牙模塊
設(shè)計中采用了BLK-MD-HC-05藍(lán)牙模塊,該模塊采用了英國CSR公司的BlueCore4-Ext芯片,遵循V2.0+EDR藍(lán)牙規(guī)范[7],支持UART、USB、SPI、PCM、SPDIF等豐富的接口,支持AT指令集,簡化了操作。圖7為藍(lán)牙模塊架構(gòu)與MCU之間通過UART口連接圖。
3.3 AT指令配置藍(lán)牙模塊
在使用藍(lán)牙模塊前需要通過串口通信對藍(lán)牙模塊初始化,BLK-MD-HC-05支持AT指令,藍(lán)牙模塊默認(rèn)的波特率為9 600,因此串口需要調(diào)整到9 600后方能與藍(lán)牙模塊進(jìn)行數(shù)據(jù)交互。表1為藍(lán)牙模塊初始化需要用到的AT指令。
4 結(jié)語
本文通過模擬BIOS來實現(xiàn)固件更新,經(jīng)過不同大小的固件包反復(fù)推送測試,可以順利地完成在線升級。升級過程安全可靠,具有較好的可行性,在應(yīng)用中,將推送的升級包進(jìn)行加密和解密過程,會更加完善。同時,本文將Flash進(jìn)行分割,其中一部分作為BIOS和光驅(qū)空間,雖然犧牲了Flash空間,但通常情況下Flash空間都會有剩余,不會造成對可靠性的影響。
參考文獻(xiàn)
[1] 耿怡,安暉,李揚(yáng),等.可穿戴設(shè)備發(fā)展現(xiàn)狀和前景探析[J].電子科學(xué)與技術(shù),2014(2):238-245.
[2] 鄧俊杰,劉紅.可穿戴智能設(shè)備的現(xiàn)狀及未來發(fā)展趨勢展望[J].黑龍江科技信息,2015(28):135.
[3] Texas Instruments.MSP430x1xx family user's guide[EB/OL].[2006-02-28].http://www.ti.com.cn/cn/lit/ug/slau049f/slau049f.pdf.
[4] 喬海坤.微控論壇特約,DC,微控論壇版主.MSP430程序自升級的實現(xiàn)原理及過程[EB/OL][2008-12-08].http:www.microcontrol.cn.
[5] 張園,萬眾.MSP430單片機(jī)串口的程序升級方法[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2011(10):23-24.
[6] 張群,楊絮.藍(lán)牙模塊串口通信的設(shè)計與實現(xiàn)[J].實驗室研究與探索,2012,319(3):79-82.
[7] 練杰,聶俊飛.基于MSP430單片機(jī)的多功能藍(lán)牙溫度檢測系統(tǒng)[J].儀表技術(shù),2015(8):36-38.
作者信息:
何國鋒,李月婷,劉宇紅
(貴州大學(xué) 大數(shù)據(jù)與信息工程學(xué)院,貴州 貴陽550025)