logo资料库

msp430f系列单片机bootloader原理与实现.pdf

第1页 / 共15页
第2页 / 共15页
第3页 / 共15页
第4页 / 共15页
第5页 / 共15页
第6页 / 共15页
第7页 / 共15页
第8页 / 共15页
资料共15页,剩余部分请下载后查看
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 的时候向系统中断向量表中写入固定的跳转指令,这个时 候只能在“应用程序区”中临时开辟一块经映射后的“虚拟中断向量表”,利用“二次”跳转来找到中断 服务程序的入口,如下文所述。
分享到:
收藏