振南技术干货集:深入浅出的Bootloader(2)

注解目录

1、烧录方式的更新迭代

1.1 古老的烧录方式

(怀旧一下,单片机高压烧录器。)

1.2 ISP 与ICP 烧录方式

(还记得当年我们玩过的 AT89S51?)

1.3 更方便的 ISP 烧录方式

1.3.1串口 ISP

(是 STC 单片机成就了我们,还是我们成就了 STC?)

1.3.2 各种 USB ISP

1)AVR

  1. C8051F

  2. 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 界面

相关推荐
Natsume17101 小时前
嵌入式开发:GPIO、UART、SPI、I2C 驱动开发详解与实战案例
c语言·驱动开发·stm32·嵌入式硬件·mcu·架构·github
shaun20011 小时前
华为c编程规范
c语言
MeshddY2 小时前
(超详细)数据库项目初体验:使用C语言连接数据库完成短地址服务(本地运行版)
c语言·数据库·单片机
森焱森2 小时前
无人机三轴稳定化控制(1)____飞机的稳定控制逻辑
c语言·单片机·算法·无人机
凌肖战3 小时前
力扣网C语言编程题:快慢指针来解决 “寻找重复数”
c语言·算法·leetcode
猫猫的小茶馆6 小时前
【STM32】预分频因子(Prescaler)和重装载值(Reload Value)
c语言·stm32·单片机·嵌入式硬件·mcu·51单片机
JeffersonZU6 小时前
Linux/Unix文件IO(文件描述符、原子操作、文件数据结构、open、read、write、fcntl、dup)
linux·c语言·unix·gnu
智者知已应修善业10 小时前
【51单片机用数码管显示流水灯的种类是按钮控制数码管加一和流水灯】2022-6-14
c语言·经验分享·笔记·单片机·嵌入式硬件·51单片机
森焱森19 小时前
无人机三轴稳定控制(2)____根据目标俯仰角,实现俯仰稳定化控制,计算出升降舵输出
c语言·单片机·算法·架构·无人机
楼田莉子20 小时前
数据结构学习之栈
c语言·数据结构·笔记·学习·算法