基于ARMCortexM3的BootLoader技术

(武昌理工学院信息工程学院,湖北武汉430223)

摘 要 :本文主要介绍了基于ARM Cortex-M3内核的BootLoader技术的源代码组成、结构和设计思路,通过掌握其启动原理,以便于更好地应用BootLoader.

关 键 词 :ARM Cortex-M3 ; 源代码;启动原理;BootLoader技术

中图分类号:TP273文献标识码:A

1.引言

现今嵌入式系统越来越受到人们的重视.随着系统复杂程度的提高,小型化和网络化也成为嵌入式系统发展的必然趋势.如何利用现成的通信网络,安全、快捷的对各个节点控制器进行在线软件升级(ISP),成为了嵌入式系统发展的一项重要课题,对工业控制、航空航天、通信等领域意义重大.而实现这一功能,需要一段核心代码的支持,这段代码就是BootLoader.

2. BootLoader 简介

2.1 功能介绍

BootLoader 是位于 Flash 起始地址处的一小段代码,占据空间默认为 2K.如果没有BootLoader,硬件启动成功后,将直接运行用户应用程序(Application).反之,BootLoader的启动代码(Start-up Code)将先被执行,进行一系列的初始化操作后,根据预先设定的条件,选择执行用户应用程序(Application)或升级控制程序(Updater).

Updater在升级Flash的过程中,需要与上位机通信,通信的端口可选用UART,SSI,I2C或以太网端口.为了保证数据的无差错传输,BootLoader采用了控制传输的通信协议:UART,SSI,I2C端口均采用了自定义的串行加载协议;而以太网采用了UDP协议.对接收到的格式正确且校验成功的数据包,Updater能够将其解包,并将得到的加载命令转化为对Flash底层寄存器的操作.

2.2 源代码组成

BootLoader的源代码由多个文件组成,如表1所示.

表1:BootLoader 源代码组成

文件分类 文件名 文件说明

启动代码 bl_startup_ewarm.S BootLoader 启动代码

配置文件 bl_config.h 定义 BootLoader 配置选项

bl_config.c

数据包收发 bl_packet.h 定义 Updater 命令及响应代码

bl_packet.h 串行数据包收发控制

bl_packet.c

数据传输 bl_e.c 以太网端口数据传输

UART bl_uart.h UART 端口数据传输

bl_uart.c

bl_autobaud.h

SSI bl_ssi.h SSI 端口数据传输

bl_ssi.c

I2C bl_i2c.h I2C端口数据传输

bl_i2c.c

升级控制 bl_check.h 检测 Updater 运行条件

bl_check.c

bl_main.c 升级控制主程序及升级端口配置

其它 bl_decrypt.h Application 代码加密控制

bl_decrypt.c

bl_link.xcl IAR EWARM 链接器脚本文件

3.BootLoader 技术

3.1BootLoader 的启动原理

3.1.1 Cortex-M3 存储及启动机制

Cortex-M3 内核具有固定的存储器映射,这使得相同内核的芯片具有了更好的兼容性.


特定厂商

专用外设总线

外部总线

外部RAM

片内外设

SRAM(保留区)

SRAM

代码(保留区)

Flash

图1:Cortex-M3 存储器系统示意图

如图1所示,Cortex-M3 的地址空间中,0~0.5G被映射为Flash空间,0.5G~1G被映射为SRAM空间.由于SRAM是易失性存储器,故系统上电时,SRAM中并没有内容,系统必须从Flash开始启动.

Flash 空间起始地址处必须存放向量表.向量表是异常产生时获取异常处理函数入口的一块连续内存,每一个异常都在向量表固定的偏移地址处(偏移地址以字对齐),通过该偏移地址可以获取异常处理函数的入口指针.向量表中前4个字分别为:栈顶地址、复位处理函数地址、NMI ISR 地址、硬故障 ISR 地址.一张向量表至少由这四项组成.

在程序代码开始运行后,向量表的基地址也可以改变.通过软件设置 NVIC 中的向量表偏移寄存器(NVIC_VTABLE,0xE000ED08),可以在任意 32 字对齐处建立向量表.

启动原理如下:硬件复位时,NVIC_VTABLE 复位为 0,向量表默认位于 Flash 空间起始地址处(0x00000000).内核读取向量表第 1 个字设置主堆栈(SP_main),读取第 2 个字设置 PC 指针,之后跳转到复位处理函数中运行.自此,系统的控制权交由软件接管.

3.1.2 BootLoader 启动代码原理

BootLoader 启动需先执行以下一系列操作:

, 配置向量表

, 初始化存储器

, 复制 BootLoader 代码到 SRAM

, 从 SRAM 中执行代码

BootLoader 的作用之一,是提供运行时修改 Flash 的功能.这样,如果内核直接从 Flash 中加载修改其自身的指令,则既容易造成时序上的混乱,又有可能因 Flash 中某些关键指令被自修改而导致整个系统崩溃.

针对这个问题,采取的方案为:在SRAM中建立BootLoader的映像,即把BootLoader复制到SRAM中,然后从SRAM中加载指令.如图2所示.这样,指令的加载源(SRAM)与修改操作的目标(Flash)相分离,一定程度上保证了软件升级的可靠性和安全性.这样的存储器映射允许修改Flash的全部代码.此外,BootLoader也提供了保护机制,用于保护Flash中的BootLoader代码本身,以及Flash空间顶部的一段存储区(保存即使Flash升级也不需要擦除的代码).除非相应的配置选项使能,否则,这两段代码不可随意修改.

图2: BootLoader 内存示意图

在IAR集成开发环境的BootLoader版本中,启动代码包含在bl_startup_ewarm.S文件中.BootLoader复位处理函数ResetISR将首先调用ProcessInit子函数,来实现BootLoader的复制,见程序清单1.

程序清单1ProcessInit 子函数

ProcessorInit

movsr0, #0x00000000

ldrr1, 等于0x20000000

ldrr2, 等于B(DATA_Z)

copy_loop

ldrr3, [r0], #4

strr3, [r1], #4

cmpr1, r2

bltcopy_loop,复制 BootLoader 到 SRAM

movsr0, #0x00000000

类似论文

整合新技术数学教学妙趣生

摘 要 :网络技术辅助教学,大幅提升了小学数学教学效率,为学生提供了广阔的发展空间 但不可否认的是,它也存在着诸多局。
更新日期:2024-12-4 浏览量:20738 点赞量:5729

怎样提高基层医院检验技术水平

关 键 词基层医院检验技术水平由于我国基层医院的局限性,检验人员很多没有经过专业技术培训,尤其是基层医院的注঴。
更新日期:2024-4-27 浏览量:58763 点赞量:13682

关于农田水利工程施工技术的

【摘 要 】农田水利工程的建设,对农村建设有着重要的意义,水利工程不仅对农田的生产有利,同时也具有一。
更新日期:2024-10-15 浏览量:130778 点赞量:28226

建筑装饰工程技术专业认识实习的

摘 要:在高职院校的建筑装饰工程技术专业教学中,认识实习的教学面临一些新问题 本文结合笔者多年的教学经验,从。
更新日期:2024-6-10 浏览量:81742 点赞量:18490

电力通信网中下一代光传送技术的应用

【摘 要】当前电力通信业务的需求量非常大,原先的基础光传送技术已经满足不了这一需求,所以一些新型的光传。
更新日期:2024-5-21 浏览量:71574 点赞量:16654

RFID技术在交通信息化中的应用

摘 要:首先介绍了物联网RFID的技术内涵,然后论述了RFID技术的应用现状以及面临的问题,最后对RFID技。
更新日期:2024-2-10 浏览量:31981 点赞量:8208