QQ 9482145
2013 年 1 月 10 日
关于 8051 的 bootloader 实现方式
一, 基本硬件需求
要实现 IAP 功能,需要 51 单片机可以在程序里修改代码空间的 Flash,或者至少可
以修改用户程序区的 Flash,新出的 51 大部分都能满足这个要求
二, 空间划分
一般 bootloader 位于单片机代码空间的起始地址,用户程序在后面。这个需要根
据实际的需求来决定,bootloader 功能简单,就少占用一些,bootloader 功能复杂
的就多占用一些。除此之外,一般还要根据 Flash 的页为界线划分。附带的工程模
板里,bootloader 使用 0x0000-0x0f 区间,用户程序使用 0x1000 以后的空间。
三, 中断的处理
51 单片机的中断入口一般位于 0 地址开始的区间,无法修改,但是根据上面的空
间划分方式,这个区间位于 bootloader 的范围,是不能随意更改的。所以代码里
用了一个软件的方式对中断入口做了重映射处理,后面将结合具体的代码介绍实
现方式。
四, Bootloader 的处理
1, 建立工程的时候,选择把 Startup.a51 添加到工程
2, 在 Startup.a51 里添加如下代码:
ORG 0003H
LJMP 2003H
ORG 000BH
LJMP 200BH
ORG 0013H
LJMP 2013H
ORG 001BH
LJMP 201BH
ORG 0023H
LJMP 2023H
………………………….
根据具体型号的中断数量和地址,添加中断跳转代码,格式为 ORG XXH
LJMP 2000+XXH,这样做,是为了将中断映射到用户程序区的 0x2000 开始的空
间,在用户程序里,还要做一些对应的设置,后面将介绍。
3, Bootloader 的处理流程。Bootloader 的主要作用一般是开机初始化,自检和升
级用户程序,以及引导用户程序。因为上面已经把中断映射到用户程序空间,
所以 bootloader 里最好就不要用中断了。
五, 用户程序的处理。
1, 用户程序的 Startup.a51 无特殊需求,可以根据需要选择添加到工程,然后自
- 1
- 2
- 3
- 4
前往页