文献标识码: 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 引言
据统计,2013年全球可穿戴设备出货量在700万件以上[1],2014年则达到了2 890万件,国内市场规模更是达到了22亿人民币,年增长率在144%[2], 2015年全球可穿戴设备出货量已达到7 610万件,与2014年相比增长了163.6%,预计2016年年底,可穿戴设备的出货量将达到1.1亿。如此庞大数量的产品想要长期保持市场的占有量与使用性能,就要对产品进行周期性的优化与升级,使产品在使用过程中修正BUG,优化、增加新的功能。对产品进行固件升级有多种方式,如JTAG、BSL等,这些方式只适用于产品未出厂时使用,对于已经售出的产品,就需要通过互联网、无线传输等方法,随时控制更新产品中的固件,以发挥可穿戴设备的性能。这些对于固件的更新,将对用户的体验度产生很大的影响。本文以基于MSP430F1611为处理器的可穿戴设备为例,通过模拟BIOS程序,对Flash分块操作来实现设备的固件升级。
1 在线升级总体架构
可穿戴设备进行固件在线升级时,首先要接收服务器推送的最新固件包。图1为升级包从服务器到达设备中的过程图,对于能够连接互联网的设备,可以直接内嵌一个到服务器的接口,直接下载升级包,如图中虚线所示;对于许多体积小无法连接网络的设备,如常见的智能手环,可以如图中实线所示,通过手机从网络中接收升级包,然后通过蓝牙等无线方式下载到设备中。
2 固件升级原理
2.1 系统从Flash启动过程
MSP430F1611单片机[3]是德州仪器公司推出的一款具有10 KB片内RAM和48 KB+256 B片内Flash的16 bit超低功耗处理器,拥有丰富的外设资源,常被用在智能可穿戴设备中,以达到低功耗的目的。
从MSP430F1611数据手册上可以查找到内部资源空间地址表。其中0x4000~0xFFFF为Flash地址空间,共48 KB,这其中从0xFFE0~0xFFFF为中断向量地址,其他空间都可以由用户进行操作。当向芯片中烧写程序时,程序代码被写入到Flash中,写入的起始位置即程序的入口地址。系统上电后,PC指针指到中断向量表的复位向量,从中读取程序起始地址入口,然后跳转到这个入口处执行程序。这个地址在代码编译过程中会自动生成,用户可以修改,指定将固件烧写到Flash中其他地址。
2.2 自动更新原理
图2为计算机中BIOS程序引导操作系统过程的简化框图。在计算机上电时,会启用固化在主板空间内的一段BIOS引导程序进入POST阶段,该阶段主要工作为初始化和检测相关的硬件资源。然后进入操作系统引导阶段,首先根据BIOS设置来检测光驱或U盘中有无引导系统,如果有则将引导系统加入到内存0000:7C00H中,执行引导系统;如果没有,则搜索硬盘第一个扇区,将内容加载到内存0000:7C00H中,运行系统。
基于这种思想,本文模拟设计了一段BIOS引导程序,将Flash划分区域,一块相当于光驱,起始地址记为A,一块相当于C盘,起始地址记为C。在系统上电时,检测Flash上A地址后有无新版固件,如果有,则将该固件复制到Flash上地址C后的空间,完成从光驱安装系统到C盘。复制完成后删除A空间内容,相当于光驱弹出的动作,重启系统;如果检测到起始地址为A的空间内无文件存在,则通过汇编指令,将PC指针指到C地址,系统将从C盘启动。总体架构流程图如图3所示,其中用虚线围起来的部分不属于BIOS引导程序中的内容,而是操作系统,即用户程序。这样,单片机中相当于有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会将固件包通过蓝牙下发到设备中。用户程序在接收固件包的同时,将固件包保存在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频段上,可以连接多个设备,方便数据共享传输。蓝牙通信无需取得执照许可,因此被广泛用于工业、医疗、手机、平板等电子设备中。
3.2 蓝牙模块
设计中采用了BLK-MD-HC-05蓝牙模块,该模块采用了英国CSR公司的BlueCore4-Ext芯片,遵循V2.0+EDR蓝牙规范[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] 耿怡,安晖,李扬,等.可穿戴设备发展现状和前景探析[J].电子科学与技术,2014(2):238-245.
[2] 邓俊杰,刘红.可穿戴智能设备的现状及未来发展趋势展望[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].单片机与嵌入式系统应用,2011(10):23-24.
[6] 张群,杨絮.蓝牙模块串口通信的设计与实现[J].实验室研究与探索,2012,319(3):79-82.
[7] 练杰,聂俊飞.基于MSP430单片机的多功能蓝牙温度检测系统[J].仪表技术,2015(8):36-38.
作者信息:
何国锋,李月婷,刘宇红
(贵州大学 大数据与信息工程学院,贵州 贵阳550025)