MSP430F 系列单片机 bootloader 原理及实现方法
严桢雨
lbl-1925@163.com
2013.01.25
目录
一、
二、
三、
四、
MSP430F247 存储空间基础知识 ........................................................................................................... 3
FLASH ROM .............................................................................................................................................. 3
1.
2. 中断向量 ................................................................................................................................................. 4
FLASH ROM 空间划分 ............................................................................................................................ 5
1. 无 bootloader 类 FLASH ROM 存储空间划分 ........................................................................................ 6
1) 主程序运行 ................................................................................................................................. 6
2) 中断服务程序运行 ..................................................................................................................... 7
2. 带 bootloader 类 FLASH ROM 存储空间划分 ........................................................................................ 8
FALSH ROM 中分区的方法 ................................................................................................................... 12
Bootloader 代码书写方法 ..................................................................................... 错误!未定义书签。
1. 项目设置 ................................................................................................................. 错误!未定义书签。
1) 文件复制 ......................................................................................................... 错误!未定义书签。
2) 链接设置 ......................................................................................................... 错误!未定义书签。
3) 链接文件修改 ................................................................................................. 错误!未定义书签。
4) 代码 ................................................................................................................. 错误!未定义书签。
五、 应用程序代码书写方法 ......................................................................................... 错误!未定义书签。
Bootloader 实验 ................................................................................................................................... 13
六、
1. 下载 bootloader .................................................................................................................................... 13
2. 下载应用程序 ....................................................................................................................................... 13
MSP430F 系列单片机除了通过 JTAG、BSL 接口下载程序外还有其他方法吗?如果我们发现异地设备传
回来的数据异常,急需更新其内部的代码时,现在我们该怎么办?哈哈,万能的 bootloader 出现了,犹
如一个拖着尾巴的下载器使我们可以对物联网上的任何一个 MCU 进行远程代码更新而不受地域的限制。
本文档以 MSP430F247 为例详细的阐述了 bootloader 的原理及实现方法。理论上讲任何一个以 FLASH
ROM 为程序载体,本身提供在线擦写 FLASH ROM 功能而又不需要外加编程电压的 MCU,都可以自行嵌
入 bootloader。
一、 MSP430F247 存储空间基础知识
MSP430F MCU FLASH ROM 空间分为 main memory 和 Information memory,因只有 main memory 才
用于存放代码,所以在此我们只讨论 main memory,以下简称 FLASH ROM.
1. FLASH ROM
1. 如下图所示,FLASH ROM 为 32K 字节,分为 64 个段,每个段为 512 字节又细分为 8 个块,每块
64 字节。
2. MSP430F247 每次最小可擦除 1 个段的空间,擦除操作是向该段写满 0XFF。
3. 32K 字节的 FLASH ROM 起始地址为 0X0FFFF – 0X080000,对应 Segment0 – Segment63.
4. RST 复位中断向量地址为 0x0FFFE,其由编译器自动写入跳转到 main()函数的指令。
2. 中断向量
1. 当有外部复位、软件复位等等,都会触发一个名为 Reset 的不可屏蔽中断,并且 MCU 会自动将此
中断向量 0x0FFFE 装入 PC,从而引导程序的运行。
2. 中断向量表
中 断 源
中断地址(字) 中断优先级
备 注
RESERVED0_VECTOR
RESERVED1_VECTOR
RESERVED2_VECTOR
RESERVED3_VECTOR
RESERVED4_VECTOR
RESERVED5_VECTOR
RESERVED6_VECTOR
RESERVED7_VECTOR
RESERVED8_VECTOR
0xFFC0
0xFFC2
0xFFC4
0xFFC6
0xFFC8
0xFFCA
0xFFCC
0xFFCE
0xFFD0
0 最低 暂未用
1
2
3
4
5
6
7
8
暂未用
暂未用
暂未用
暂未用
暂未用
暂未用
暂未用
暂未用
RESERVED9_VECTOR
RESERVED10_VECTOR
RESERVED11_VECTOR
RESERVED12_VECTOR
RESERVED13_VECTOR
RESERVED14_VECTOR
RESERVED15_VECTOR
USCIAB1TX_VECTOR
USCIAB1RX_VECTOR
PORT1_VECTOR
PORT2_VECTOR
RESERVED20_VECTOR
ADC12_VECTOR
USCIAB0TX_VECTOR
USCIAB0RX_VECTOR
TIMERA1_VECTOR
TIMERA0_VECTOR
WDT_VECTOR
COMPARATORA_VECTOR
TIMERB1_VECTOR
TIMERB0_VECTOR
NMI_VECTOR
RESET_VECTOR
0xFFD2
0xFFD4
0xFFD6
0xFFD8
0xFFDA
0xFFDC
0xFFDE
0xFFE0
0xFFE2
0xFFE4
0xFFE6
0xFFE8
0xFFEA
0xFFEC
0xFFEE
0xFFF0
0xFFF2
0xFFF4
0xFFF6
0xFFF8
0xFFFA
0XFFFC
0xFFFE
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 最高
暂未用
暂未用
暂未用
暂未用
暂未用
暂未用
暂未用
暂未用
二、 FLASH ROM 空间划分
MSP430F 内部有多个中断向量,位于 FLASH ROM 的末端,这些中断向量内必须填写正确的跳转指
令以便中断影响后,可以准确的加载相应的中断服务程序。当 MCU 上电后,首先会触发复位中断,紧接
着 PC 装入复位中断向量,然后由中断向量处的跳转指令引导用户 main()程序的运行。
1. 无 bootloader 类 FLASH ROM 存储空间划分
如下图所示,类似 51 单片机,MSP430F FLASH ROM 内部也是分为两个区域,分别为用户代码区和
中断向量跳转区。如果用户用 C 语言书写程序时,可以不必关心这两段区域的具体划分,在项目编译时
由链接器通过调用 lnk430f247.xcl 文件自动完成定位工作;
MSP430F247 FLASH ROM
地址:0x8000 – 0xFFFF 共32K字节
包含2部分:静态代码、中断向量表
程序代码区
地址:0x0800 – 0xFFBF
包含:主程序
[ 子程序 ]
[ 中断服务程序 ]
1) 主程序运行
中断向量区
地址:0xFFC0 – 0xFFFF
包含:共32个中断向量的跳转地址
系统上电后,首先触发 RESET 复位事件,PC 自动加载复位向量 0xFFFE,由于编译器在项目编译链接
时自动在该单元内写入“跳转到 main()”的跳转指令,所以主程序被加载开始正常运行。如下图所示:
2) 中断服务程序运行
当系统出现中断请并开中断后,便开始中断响应,在保存现场后,PC 被自动加载相应的中断向量值,
由于在该中断向量处存放有“跳转到相应中断服务程序”的指令,从而加载中断服务程序并执行,当中
断返回执行 RETI 指令后,PC 值又被恢复到断点处,继续执行之前被打断的代码。如下图所示
2. 带 bootloader 类 FLASH ROM 存储空间划分
带 bootloader 类的用户程序也不是很复杂,其 FLASH ROM 程序空间被划分为 2 部分:系统引导区、
应用程序区。如果想通过 bootloader 来更新代码,首先要先将 bootloader 代码下载到“系统引导区”,然
后就可以通过 bootloader 引导系统启用并将串口接收到的数据依次写入“应用程序区”完成应用程序更
新的功能。
因为“系统引导区”和“应用程序区”的代码空间不重叠,所以当通过“JTAG”或“BSL”将 bootloader
下载到引导区后,以后再通过 bootloader 下载应用程序时“引导区的代码不会被更新或丢失”。
FLASH ROM 空间划分如下图所示,因应用程序中的中断服务程序数量不定,中断服务程序的入口地
址也不一定,所以没有办法在下载 bootloader 的时候向系统中断向量表中写入固定的跳转指令,这个时
候只能在“应用程序区”中临时开辟一块经映射后的“虚拟中断向量表”,利用“二次”跳转来找到中断
服务程序的入口,如下文所述。