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