注解目录
1、烧录方式的更新迭代
1.1 古老的烧录方式
(怀旧一下,单片机高压烧录器。)
1.2 ISP 与ICP 烧录方式
(还记得当年我们玩过的 AT89S51?)
1.3 更方便的 ISP 烧录方式
1.3.1串口 ISP
(是 STC 单片机成就了我们,还是我们成就了 STC?)
1.3.2 各种 USB ISP
1)AVR
-
C8051F
-
MSP430
(在当前 STM32 一统天下的时代,上面这些单片机你还在用吗? )
2、关于 Bootloader
2.1 Bootloader 的基本形态
(Bootloader 先行,APP 在后。)
2.2 Bootloader 的两个设计实例
1)带 Shell 命行的口 BL
2)插 SD 卡即烧录的 BL
(上面这两种 BL 在实际应用中最常见,还讲了一下 Linux 的 Uboot。)
2.3 BL实现的要点
3、花百出的 BL
3.1 BL(串口传输)的现与延伸
(告诉你一个秘密: STM32F103C8T6 的后64K ROM 也能用,不信你试。)
3.2 10 米之内隔空烧录的实现
(一部安卓手机在手,空中升级调试全有。)
3.3 BL的分散烧录
(你以为 BL 只能给自己烧序? )
4、不走寻常路的BL
4.1 Bootpatcher
(反其道而行之,APP 先行,BL 在后。)
4.2 APP 反烧 BL
(你以为只能 BL 烧录 APP? )
2
关于 Bootloader
2.1 Bootloader的基本形态
直接看图7.9。
图7.9 Bootloader的基本形态
可以看到 BL就是一段存储在 ROM 中的程序,它主要实现 4 个功能:
(1) 通过某种途径获取要烧录的固件数据;
(2)将固件数据写入到 ROM的 APP区中;
(3)跳转到 APP 区运行,将烧录进去用户程序引导起来;
(4) 在此过程中,提供必要而友好的人机交互界面。
这么说可能不好理解,我们还是通过实例来进行讲解
2.2 Bootloader的两个设计实例
下面的两个实例,用于说明 BL 的实际应用形态,不涉及具体的实现细节,旨在让大家了解 BL 实际是如何运行的。
1.带Shell命令行的串口BL
基本的操作逻辑如下:
(1) 通过超级终端、SecureCRT 或 Xshell 之类的串口终端输人命令 program;
(2) BL 接收到命令后,开始等待接收固件文件数据;
(3) 串口终端通过某种文件数据传输协议(大家可以参见本书相应章节对 X/Y/Zmodem协议的介绍)将固件数据传给 BL;
(4) BL将固件数据写人到 ROM的 APP 区中;
(5) BL将 APP 区中的程序引导运行起来。
更具体的示意如图 7.10 所示
这里把操作逻辑说得很简单,实际实现起来却并不容易。我们放在后面去细究其具体实现。
图7.10 带Shell命令行的串口 BL逻辑示意
2.插 SD 卡即烧录的 BL
基本的操作逻辑如下:
(1) 将待烧录的固件拷贝到 SD 卡中;
(2) 将 SD 卡插人到卡槽中;
(3) BL 检测到 SD 卡插人,搜索卡中 BIN 文件:
(4)将 BIN 文件数据读出写人到 ROM的 APP 区中:
(5) BL将 APP 区中的程序引导运行起来。
如图 7.11 所示。
通过这两个设计实例,大家应该已经了解 BL 是什么了吧。有没有感受到 BL 是比ISP 烧录器更通用、更灵活、更友好、功能更强大的固件烧录和管理手段呢?
有人可能知道 Linux 下的 Uboot,它就是一个强大的 BL,它提供非常强大的刷机(烧录操作系统镜像)的功能以及完备而灵活的 Shell界面,如图 7.12 所示。其实我们电脑的 BIOS 也是一种广义的 BL。
那如何实现一个 BL 呢?别急,要实现 BL 是需要满足一些基本要求的。
图 7.11 插 SD卡即烧录的 BL 逻辑示意
图 7.12 Uboot Shell 界面