找回密码
 注册会员
更新自动建库工具PCB Footprint Expert 2024.04 Pro / Library Expert 破解版

[嵌入式/ARM] 基于C8051F34x单片机的USB Bootloader设计

[复制链接]
admin 发表于 2013-3-24 13:45:18 | 显示全部楼层 |阅读模式

本文包含原理图、PCB、源代码、封装库、中英文PDF等资源

您需要 登录 才可以下载或查看,没有账号?注册会员

×
摘  要: 介绍了一种在Silicon Labs公司的C8051F34x系列单片机上实现USB Bootloader的设计方法,使应用程序可以通过USB或COM通信实现远程在线升级。首先,简述了USB Bootloader;然后,详细阐述了USB Bootloader程序的设计和APP固件程序的设计,以及设计中需要注意的问题;最后,用VC++开发上位机软件来完成该Bootloader的远程在线下载功能。该Bootloader可以很方便地在其他类似单片机上移植,通用性强。
关键词: C8051F34x;USB Bootloader;远程升级
    Bootloader(以下简称BL)是一段引导程序,在单片机上电或复位后在应用程序(以下简称APP)之前先运行,来判断当前是否需要进入升级状态。如果不需要升级,就直接跳转到APP运行;如果需要升级,首先擦除旧的APP,然后通过某种通信接收APP固件程序,同时写入Flash中。
 BL固件程序能以多种方式获取数据,包括串口、并口、I2C、SPI、USB等,但是从实际使用和成熟度来看,使用串口无疑是最方便的。如今,USB总线凭借其方便、快速、灵活、稳定、应用范围广等优点被广泛地应用、发展和普及,使用USB进行数据传输是一种趋势。本文设计的BL主要基于USB通信,同时考虑到模块兼容,保留了串口通信。
 一般来说,一个BL应该能够完成以下功能:(1)通过某种通信收发数据;(2)擦除并升级APP应用固件程序;(3)判断APP固件的完整性;(4)APP与BL的中断跳转问题。而基于USB通信的BL,除了要完成一般BL的功能,还需要考虑BL与APP共用除USB中断外的USB一般处理函数等问题。下面对BL固件程序设计、APP固件程序设计以及上层软件设计进行详细介绍。
1 USB Bootloader设计
1.1 硬件平台

 本文设计的USB BL是基于Silicon Labs公司C8051F34x系列单片机实现的;C8051F34x器件是完全集成的混合信号片上系统型MCU,具有片内上电复位、VDD监视器、电压调整器、看门狗定时器、时钟丢失检测器、时钟振荡器、USB、SMBus/I2C、UART、SPI、定时器、I/O、多达4 352 B片内RAM和64 KB的片内Flash存储器,Flash存储器还具有在系统重新编程的能力,可用于非易失性数据存储,并允许现场更新8051固件。
 C8051F34x器件集成了一个完整的全速/低速USB功能控制器,刚开始设计时采用C8051F34x自带的USB,但是静电测试不符合要求,最终选用了C8051F34x和PDIUSBD12组合,解决了静电问题。
 PDIUSBD12是一款性价比很高的USB器件,它符合USB1.1版规范,可与任何外部微控制器实现高速并行接口(2 Mb/s),具有良好的EMI特性,高于8 kV的在片静电防护电路等,详细资料请查询参考文献[3]。
1.2 BL和APP固件的地址分配
 USB BL预计将占用8 KB的地址空间,从0x0000h到0x1FFFh,包括USB BL固件程序本身和用来判断程序是运行APP还是BL的一段签名程序。BL与APP地址空间分配如图1所示,APP固件程序存放的地址空间从0x2000h开始。
    20121107050817455824404.gif
   1.3 BL和APP的自动跳转
 在程序中,设置一个设备模式标志位,用来判断程序是应该运行在BL中还是在APP中,此标志位存储在RAM的一个固定地址2F7h处。本文设计的BL,DEVICE_MODE为设备模式标志位,其值等于1时为BL_MODE(BL模式),其值等于0为APP_MODE(APP模式)。
 有两种情况设备模式为BL模式,可以下载更新APP固件程序:一是在指定的签名地址处没有指定的两字节的签名;二是Flash写错误,在C8051F34x单片机中, Flash读地址超出了用户代码空间,即MOVC操作的地址大于0xFBFF,发生Flash错误复位后,FERROR位(RSTSRC.6)被置位。
 上电后是否运行APP固件程序通过第一种情况判断。当需要更新APP固件程序时,造成Flash写错误,通过第二种情况进入BL模式,开始更新程序,如图2所示。
    20121107050817502704405.gif
   1.4 中断重定位
 一般情况下,MCU中断向量分布在复位(0x0000)以后,位于低地址空间。由于BL程序占据了此段空间,因此,除了USB0中断(中断序列表第8号中断)和串口中断(中断序列表第5号中断),其他所有的中断(C8051F34x共有16个通用中断)都需要做中断二次映射。也就是说,需要在原中断向量入口地址处手动添加二次跳转函数,使新的中断向量指向用户的中断程序,这样才能保证正常运行APP固件程序的中断程序。具体的跳转地址由APP固件程序起始地址决定,这一部分在START51.A51中通过编写函数来完成。假设固件的起始地址设置为0x2000H,则中断跳转的实现过程如下。
 首先定义几个常量:
HW_INTVEC_TABLE EQU 0003h
HW_INTVEC_SEPARATION EQU 8
INTVEC_TABLE EQU START_APPLICATION+3
INTVEC_SEPARATION EQU8
START_APPLICATION EQU2000h
 中断向量重映射:
CSEG AT HW_INTVEC_TABLE +
(HW_INTVEC_SEPARATION*INT_NUM)LJMP
INTVEC_TABLE+(INTVEC_SEPARATION
*INT_NUM)
//以定时器2中断为例(第5号中断)
CSEG AT0003h+8h*5h=002Bh
LJMP 2000h+0003h+8h*5h=202Bh
1.5 中断处理函数
 8号USB中断由于同时要被BL固件和APP固件调用,因此不能对其进行二次跳转,而通过共享的USB库文件中的USB_ISR主中断处理函数进行处理,通过DEVICE_MODE判断当前设备处于BL模式或APP模式来自动地二次跳转到BL固件或APP固件的USB中断处理函数处,如图3所示。
    20121107050817565204406.gif
*滑块验证:
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

QQ|手机版|MCU资讯论坛 ( 京ICP备18035221号-2 )|网站地图

GMT+8, 2024-12-26 00:48 , Processed in 0.061447 second(s), 10 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表