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