注解目录
1、烧录方式的更新迭代
1.1 古老的烧录方式
(怀旧一下,单片机高压烧录器。)
1.2 ISP 与ICP 烧录方式
(还记得当年我们玩过的 AT89S51?)
1.3 更方便的 ISP 烧录方式
1.3.1串口 ISP
(是 STC 单片机成就了我们,还是我们成就了 STC?)
1.3.2 各种 USB ISP
1)AVR
2) C8051F
3) 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 界面