DAB接收机USB固件升级的实现

2013-04-16 10:44
电子世界 2013年2期
关键词:PC机固件指针

1.引言

固件(Firmware)我们通常理解为软件,由于集成电路的发展,目前的固件多以FLASH为载体,它与我们通常所说的程序的区别已经越来越小。固件升级实际上就是用新的固件程序重写FLASH的过程,升级固件变得越来越简单。

在用户使用过程中,一旦系统提供产品固件更高的版本,就要求产品能够通过固件升级程序对原有固件进行升级,而设备固件升级(Device Firmware Upgrade,DFU)正是能够完成这种任务的一种机制。随着USB技术的发展,USB设备的更新速度越来越快,通过USB接口来升级产品的固件是一种实用高效的方法[1]。本文的主要研究内容就是在自主开发的DAB接收机的基础上[2],通过USB接口实现接收机的DFU。

2.固件升级

本文提出的固件升级方法利用PC机通过USB接口与DAB接收机进行通信,并在此基础上完成DFU的各种操作[3],基本结构如图1所示。

随着科技的不断进步,生产厂商很难满足用户多元化的需求,更多的厂商把升级固件以提供更多更新的功能作为附加值来提供给用户。

在产品上市后,生产厂商对产品程序做了进一步的优化和改进,这时候需要升级产品的固件以提升产品的性能。对于已经开发出的软件,有可能存在一些BUG,生产厂商也可以通过固件升级来修正以前版本中存在的错误。

3.DFU实现流程

接收机DFU的实现参照USB固件升级的标准流程[4],接收机通过USB线缆与PC机相连,在PC机上执行固件更新的相关操作,完成接收机的固件升级,整个过程遵循枚举,重配置,传输,显示四个阶段,具体的实现过程如图2所示。

第一阶段为枚举阶段,接收机正常运行过程包括两套不同的描述符:DFU模式描述符和正常运行描述符。接收机正常运行时,列举出DFU模式描述符并向主机表明其具备可实现DFU的能力。

第二阶段为重配置阶段,接收机和主机达成一致发起固件升级。主机给接收机发送一个USB重置请求,接收机接收到后,切换到固件升级模式,屏蔽正常工作模式,并为下一阶段做好准备。

第三阶段为传输阶段,主机通过特定的软件将固件升级的文件传送给接收机,在功能描述符中定义的参数可以正确的保证块的大小以及在内存中重新编译的时间。

第四阶段为显示阶段,接收机通知主机已完成重新编译,主机发送一个USB复位请求给接收机,接收机重启后,重新执行枚举阶段,并执行已经更新的固件程序。

4.接收机USB固件升级

4.1 接收机DFU实现

接收机DFU的设计方案是通过USB接口的数据传输功能接收来自PC机的固件升级文件,利用MCU的在应用编程(In Application Programming,IAP)功能来实现接收机的固件升级。

IAP就是MCU通过对外接口(如USART,USB,以太网,无线信道等)接收升级固件,并在程序运行过程中重新对内部FLASH进行编程的技术。如图3所示为接收机IAP功能实现的示意图。

IAP的实现需要两部分程序:引导程序、用户程序。引导程序需要通过仿真器或通过在系统中编程(In System Programming,ISP)的方式烧写。用户程序可以和引导程序一起烧写,也可通过引导程序的IAP功能烧写。

实现IAP功能的核心是引导程序,这部分程序主要负责与PC机同步,通过USB接收升级固件,并写入MCU指定的内存地址,MCU复位后程序指针跳转并执行新用户程序,从而完成接收机的固件升级。

4.2 DFU模式进入机制

接收机有两种工作模式:DFU升级模式和正常工作模式。两种工作模式不能同时运行,由于接收机在DFU升级模式下,就不再是能收听DAB节目的接收机,而是相当于EEPROM(电可擦可编程只读存储器)存在,所以接收机从正常工作模式进入到DFU升级模式,需要外部提供一个中断信号。

在本文设计方案中,采用MCU的PC8端口对应的按键作为同步按键,接收机进行固件升级时,MCU通过识别同步按键产生的中断信号与PC机进行同步,从而使接收机进入DFU升级模式。

4.3 接收机IAP程序设计

接收机上电复位,MCU首先从地址0x80 00004处取出复位中断向量地址,程序指针跳转执行复位中断服务程序。正常情况下,程序指针跳转至用户程序的main函数处执行用户程序,但接收机处于DFU升级模式下,程序指针将跳转至引导程序的main函数处执行IAP功能相关操作。如图4所示为接收机实现DFU的程序流程图。

执行IAP功能操作时,MCU首先对USB接口进行初始化,然后接收来自PC机的升级固件,并从内部FLASH的0x8004000地址处开始写入。

写入过程完毕,MCU执行复位操作,随后接收机工作在正常运行模式下,程序指针将跳转至新写入用户程序的复位中断向量表处,取出复位中断向量地址,执行复位中断响应操作,并跳转至新用户程序的main函数处开始执行。

接收机再次上电,工作在正常运行模式下,MCU的程序指针会直接跳转至FLASH的0x8004000地址处即新用户程序的main函数处,执行新写入的用户程序。

4.4 程序存储空间分配

图1 DAB接收机固件升级

图2 设备固件升级过程

图3 接收机IAP功能实现示意图

图4 接收机IAP程序流程图

接收机是以STM32系列微控制器作为核心处理器,采用ARM公司专为要求高性能、低成本、低功耗的嵌入式应用设计的Cortex-M3内核。STM32系列存储器在Cortex-M3内核的基础上加入了FLASH、SRAM等,使其成为可以工作的处理芯片。

STM32的存储器地址空间总共划分为8块区域,每块区域大小为512M。如图5所示为STM32系列MCU存储器第一块区域的结构示意图。

引导程序和用户程序都存放在第一块Flash区域内,引导程序存放在0x8000000-0x8003FFF区域,用户程序存放在0x800 4000-0x801FFFF区域[5]。为了使FLASH区域内存放的引导程序和用户程序代码之间不发生冲突,新用户程序的中断向量表需要做重映射。

固件升级完成后,在新用户程序执行过程中,FLASH区域的不同地址处存在两个中断向量表。当有中断请求来临时,程序指针仍然会跳转至引导程序的中断向量表处,而不是新用户程序的中断向量表处,这是由MCU内部硬件工作机制决定的。

5.接收机DFU测试

PC端升级软件使用ST意法半导体公司官方提供的软件,在ST官方网站上可下载到该软件,安装后执行。

图5 存储器第一块区域结构示意图

图6 接收机DFU升级演示

接收机上电,首先按住同步按键,并将接收机通过USB线缆与PC机相连,然后松开按键。当程序左上角识别出STM Device时,说明接收机与PC机已成功建立连接,点击Choose…选择本地的升级固件,然后点击Upgrade执行升级操作。

如图6所示为接收机固件升级成功的程序界面。

6.结论

本文提出的设计方法实现了便携式DAB接收机的DFU,经多次测试表明,该方法能够可靠的对接收机进行固件升级。

用户需要对便携式DAB接收机进行固件升级时,只需在说明书内指定的网址下载升级软件和固件,就可将产品的固件升级至最新版本。DFU的实现,给用户升级产品带来很大方便,具有一定的现实意义和应用价值。

[1]Compaq,Intel,Microsoft,NEC.Universal Serial Bus Speci fi cation,Revision 1.1,September 23,1998.

[2]陆明莹,张贤斌,王国裕,等.基于ID200的便携式DAB接收机的设计和实现[J].电声技术,2010(12):81-83.

[3]施文灶,王平,黄晞,陈伟.基于USB的便携式设备固件升级程序的设计[J].电子设计工程,2009(11):4-6.

[4]Universal Serial Bus Device Class Specification for Device Firmware Upgrade.Version 1.1 Aug 5,2004 http://www.usb.org/developers/devclass_docs#approved.

[5]STM32F10xxx Flash memory microcontrollers.August 2012.http://www.st.com/cn/mcu/product/164486.jsp.

猜你喜欢
PC机固件指针
基于三菱FXPLC的感应淬火机床与PC机的串行通信实现
为什么表的指针都按照顺时针方向转动
VC.NET下实现dsPIC单片机与PC机的通信
排除OLT设备登录故障
基于固件的远程身份认证
基于改进Hough变换和BP网络的指针仪表识别
提取ROM固件中的APP
VIVID3彩色超声仪结构原理及维修
多路手机固件升级工具设计