振南技术干货集:深入浅出的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 界面

相关推荐
小莞尔2 天前
【51单片机】【protues仿真】基于51单片机的篮球计时计分器系统
c语言·stm32·单片机·嵌入式硬件·51单片机
小莞尔2 天前
【51单片机】【protues仿真】 基于51单片机八路抢答器系统
c语言·开发语言·单片机·嵌入式硬件·51单片机
liujing102329292 天前
Day03_刷题niuke20250915
c语言
第七序章2 天前
【C++STL】list的详细用法和底层实现
c语言·c++·自然语言处理·list
l1t2 天前
利用DeepSeek实现服务器客户端模式的DuckDB原型
服务器·c语言·数据库·人工智能·postgresql·协议·duckdb
l1t2 天前
利用美团龙猫用libxml2编写XML转CSV文件C程序
xml·c语言·libxml2·解析器
Gu_shiwww2 天前
数据结构8——双向链表
c语言·数据结构·python·链表·小白初步
你怎么知道我是队长3 天前
C语言---循环结构
c语言·开发语言·算法
程序猿编码3 天前
基于 Linux 内核模块的字符设备 FIFO 驱动设计与实现解析(C/C++代码实现)
linux·c语言·c++·内核模块·fifo·字符设备
mark-puls3 天前
C语言打印爱心
c语言·开发语言·算法