
基于 MC9S12XS128 的 BootLoader 设计
前言
接触飞思卡尔芯片大概有 4 个月的时间了,对这款 16 位寄存器有了一定的了解,但是因为飞思卡尔
单片机的资料特别少,bootloader 相关资料几乎没有,为此写下这篇设计书,方便大家学习参考交流,其
中有不对的地方还请大家批评指正。本设计书主要讲解 bootloader 的实现过程,需对飞思卡尔 16 位单片
机有一定的基础,了解该系列芯片的开发环境 CodeWarrior5.1。
一、BootLoader 的基石 Prm 文件
我们在用 CodeWarrior 创建一个工程后会产生很多文件,其中有一个连接用的 Prm 文件,他的位置如
图 1.1 所示。
图 1.1
Codewarrior 的 Prm 文件是用来划分代码段、数据段的,这类似于 liunx 中的连接脚本文件。程序一开
始是进行初始化,然后跳转到 main 函数执行的,这段代码全部放在了 ROM_C000 处,而 ROM_C000 对应的地
址是 0xC000 到 0xFEFF,具体实现代码如图 1.2 所示。第一部分是指明 ROM_C000 对的地址,第二部分是指
明代码所存放的位置是 ROM_C000。
我们知道 bootloader 和 app 必须在不同的 ROM 区域,bootloader 接收到上位机发送的程序,先将其存
储,后再跳转到 app 位置执行,所以 prm 文件可以帮我们实现 bootloader 与 app 程序的分离。
具体实现方法如下:
1、将原来的 ROM_C000 分成两个部分,ROM_BootLoader 和 ROM_App,因为 bootloader 代码较小需要保护,
所以将其地址设置成 0xf000-0xfeff,App 的地址设置成 0xc000-0xefff,这样这两块的总地址大小正好是
原 ROM_C000 的大小。
评论1