文獻(xiàn)標(biāo)識碼: A
DOI:10.16157/j.issn.0258-7998.2017.03.015
中文引用格式: 何國鋒,,李月婷,劉宇紅. 基于模擬BIOS的可穿戴設(shè)備固件在線升級實(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)計(jì),,2013年全球可穿戴設(shè)備出貨量在700萬件以上[1],,2014年則達(dá)到了2 890萬件,國內(nèi)市場規(guī)模更是達(dá)到了22億人民幣,,年增長率在144%[2],, 2015年全球可穿戴設(shè)備出貨量已達(dá)到7 610萬件,與2014年相比增長了163.6%,,預(yù)計(jì)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)品未出廠時(shí)使用,,對于已經(jīng)售出的產(chǎn)品,就需要通過互聯(lián)網(wǎng),、無線傳輸?shù)确椒?,隨時(shí)控制更新產(chǎn)品中的固件,以發(fā)揮可穿戴設(shè)備的性能,。這些對于固件的更新,,將對用戶的體驗(yàn)度產(chǎn)生很大的影響。本文以基于MSP430F1611為處理器的可穿戴設(shè)備為例,,通過模擬BIOS程序,,對Flash分塊操作來實(shí)現(xiàn)設(shè)備的固件升級。
1 在線升級總體架構(gòu)
可穿戴設(shè)備進(jìn)行固件在線升級時(shí),,首先要接收服務(wù)器推送的最新固件包,。圖1為升級包從服務(wù)器到達(dá)設(shè)備中的過程圖,對于能夠連接互聯(lián)網(wǎng)的設(shè)備,,可以直接內(nèi)嵌一個(gè)到服務(wù)器的接口,,直接下載升級包,如圖中虛線所示,;對于許多體積小無法連接網(wǎng)絡(luò)的設(shè)備,,如常見的智能手環(huán),可以如圖中實(shí)線所示,,通過手機(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)向芯片中燒寫程序時(shí),,程序代碼被寫入到Flash中,寫入的起始位置即程序的入口地址,。系統(tǒng)上電后,,PC指針指到中斷向量表的復(fù)位向量,從中讀取程序起始地址入口,,然后跳轉(zhuǎn)到這個(gè)入口處執(zhí)行程序,。這個(gè)地址在代碼編譯過程中會自動生成,,用戶可以修改,指定將固件燒寫到Flash中其他地址,。
2.2 自動更新原理
圖2為計(jì)算機(jī)中BIOS程序引導(dǎo)操作系統(tǒng)過程的簡化框圖,。在計(jì)算機(jī)上電時(shí),會啟用固化在主板空間內(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);如果沒有,,則搜索硬盤第一個(gè)扇區(qū),,將內(nèi)容加載到內(nèi)存0000:7C00H中,運(yùn)行系統(tǒng),。
基于這種思想,,本文模擬設(shè)計(jì)了一段BIOS引導(dǎo)程序,將Flash劃分區(qū)域,,一塊相當(dāng)于光驅(qū),,起始地址記為A,一塊相當(dāng)于C盤,,起始地址記為C,。在系統(tǒng)上電時(shí),檢測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盤啟動,。總體架構(gòu)流程圖如圖3所示,,其中用虛線圍起來的部分不屬于BIOS引導(dǎo)程序中的內(nèi)容,,而是操作系統(tǒng),即用戶程序,。這樣,,單片機(jī)中相當(dāng)于有2個(gè)程序:1個(gè)BIOS程序,,1個(gè)用戶程序。在開機(jī)時(shí)進(jìn)入BIOS,,由BIOS決定是否將程序入口指針切換到用戶程序,。切換到用戶程序需使用匯編指令將PC指針移到用戶程序的復(fù)位向量地址0xFFDE中指向的地址[4],即C盤起始地址:
asm(“mov &0xFFDE”);
因?yàn)樵贔lash中重新為用戶程序分配了中斷向量表,,需要使用匯編指令對15個(gè)中斷向量表進(jìn)行映射[6],。如對第一個(gè)中斷向量映射的代碼如下:
#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所示,,整個(gè)灰色部分為原來的用戶空間,。其中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)
用戶程序的實(shí)現(xiàn)需要通過藍(lán)牙連接手機(jī)或電腦App,,當(dāng)有新版本的固件包時(shí),,App會將固件包通過藍(lán)牙下發(fā)到設(shè)備中。用戶程序在接收固件包的同時(shí),,將固件包保存在0xB000~0xFFBF范圍內(nèi)的Flash空間中,,本設(shè)計(jì)因?yàn)橛脩舫绦虼a量少,將程序保存在0xB000地址后,,如果用戶程序過大,,可以考慮通過擴(kuò)展片外Flash解決。用戶程序流程圖如圖5所示,。
用戶程序需要放在0x6000~0xAFFF范圍內(nèi),,因此同樣需要修改工程文件中的xcl文件,修改代碼段,、常量的地址范圍為0x6000~0xAFFF,。另外因?yàn)樵袛嘞蛄康刂繁籅IOS程序所占據(jù),需要修改xcl文件中的中斷向量地址為0xFFC0~0xFFDF,,重啟向量地址為0xFFDE,。要將應(yīng)用程序作為固件更新包推送到設(shè)備終端,因此要選擇生成txt格式的16進(jìn)制Hex文件,。圖6所示是一簡單的文件生成的txt文件內(nèi)容,,傳輸過程中可以考慮加密及錯(cuò)誤驗(yàn)證。
圖6中@6000代表程序的起始地址為6000,,這段代碼會被放在以0x6000為起始地址的Flash內(nèi),;@FFDE表示程序的復(fù)位向量地址為0xFFDE,其中保存子程序入口地址,,即0x6000,;q表示程序結(jié)束。
3 藍(lán)牙通信
3.1 藍(lán)牙技術(shù)簡介
為了實(shí)現(xiàn)無線接收,,本文在設(shè)備上使用了藍(lán)牙技術(shù)來進(jìn)行數(shù)據(jù)傳送,。藍(lán)牙技術(shù)[6]最初是在1994年時(shí)由電信巨頭愛立信公司推出,用來替代RS232標(biāo)準(zhǔn)的一種短距離(10 m~100 m)無線通信技術(shù),。藍(lán)牙通信工作在2.4 GHz ISM頻段上,,可以連接多個(gè)設(shè)備,方便數(shù)據(jù)共享傳輸,。藍(lán)牙通信無需取得執(zhí)照許可,,因此被廣泛用于工業(yè)、醫(yī)療,、手機(jī),、平板等電子設(shè)備中。
3.2 藍(lán)牙模塊
設(shè)計(jì)中采用了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來實(shí)現(xiàn)固件更新,,經(jīng)過不同大小的固件包反復(fù)推送測試,,可以順利地完成在線升級。升級過程安全可靠,,具有較好的可行性,,在應(yīng)用中,將推送的升級包進(jìn)行加密和解密過程,,會更加完善,。同時(shí),本文將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程序自升級的實(shí)現(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è)計(jì)與實(shí)現(xiàn)[J].實(shí)驗(yàn)室研究與探索,,2012,319(3):79-82.
[7] 練杰,,聶俊飛.基于MSP430單片機(jī)的多功能藍(lán)牙溫度檢測系統(tǒng)[J].儀表技術(shù),,2015(8):36-38.
作者信息:
何國鋒,李月婷,,劉宇紅
(貴州大學(xué) 大數(shù)據(jù)與信息工程學(xué)院,,貴州 貴陽550025)