主要记录Bootloader设计过程中的一些思路,经供参考(以恩智浦S12系列为例)。
ROM地址划分
首先是存储地址的划分,主要是ROM(Flash)地址划分,通过PRM文件实现Flash的分区。主要划分两个部分,Flash靠后的放Bootloader,前面放App。需要注意的是分区地址信息需要保持一致。
中断向量表
按照S12的默认配置,中断向量表和复位向量是安排在Flash的最后,作为bootloader可以使用该默认的配置,而App需要做中断向量表的重定向,通常做法是放在App分区的最前面。
复位向量表
复位向量是程序入口。Bootloader的复位向量表"必须"按照默认的配置(否则上电的时候都没法运行),而App的复位向量有两种方法实现重定向,两种方法实现的结果是一样的:一种是直接指定在App的Flash段内,通常在该段的最后;另一种方式是按照默认的配置不变,但是在Bootloader中对改地址的赋值做特殊处理。当Bootloader检测到需要写复位向量时,将该复位向量写到App的Flash段内,这样做的好处是当单独调试App工程时,照样能够运行,而第一种方法需要先手动调整复位向量为默认向量才能正常运行。
其他问题
1.更新Bootloader本身,这涉及到将Bootloader程序拷贝到RAM中,然后擦除自身的Flash内容,然后通过上位机更新自己。
2.程序烧录的过程可以将Bootloader和App的程序合并成一个文件进行烧录。
3.上位机设计,这个就按照数据格式协议发送就完事,最简单就是用串口调试助手实现更新。
4.在App中预留擦除AppFlash段的接口,通常的做法是擦除App复位向量。
5.App工程转化成内存镜像文件,本例中就elf文件转成S19文件。