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

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

注解目录

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? )

关于 Bootloader

2.3 BL实现的要点

首先要说,并不是任何一个单片机都可以实现 BL的,要满足几个要点。

1.芯片体系架构要支持

来看图 7.13。

我们知道单片机程序的最开头是中断向量表,包含了程序栈顶地址以及 Reset 程序人口.通过它才能把程序运行起来。很显然在从 BL 向 APP 跳转的时候,APP 程序必须有自己的中断向量表。而且单片机体系架构上要允许中断向量表的重定向。

传统 51 单片机的中断向量表只允许放到 ROM 开头,而不能有偏移量,所以传统 51 单片

图 7.13 BL的实现需要单片机支持中断向量表偏移(重定向)

机是不能支持 BL 的。有人要问“你这不是自相矛盾吗?你前面说 STC的 51 单片机是支持串口ISP 的,那它应该内置有 ISP 程序,我理解它应该和 BL 是一个道理。”没错,它内置的ISP程序就是一种 BL。STC 之所以可以实现 BL 功能,是因为宏晶半导体公司对它的硬件架构进行了改进,请看图 7.14。

图7.14 STC对传统51单片机硬件架构上的改进

可以看到,STC51 单片机多出了一块专门存放 BL的 ROM,称为 BOOTROM。网上有一位叫 shaoziyang 的网友为 AVR 单片机写了一个 BL,还配套开发了一款叫AVRUBD 的上位机,如图 7.15 (AVRUBD 是很有用的,本章后面会介绍,它可以让我们实现隔空烧录)所示,实现了 AVR 单片机的串口烧录,让很多人摆脱了对 USBISP 之类 ISP 下载器的依赖(虽然 ISP 下载器已经很方便了,但它毕竟还需要银子嘛)。

AVR 在硬件架构上与 STC51 是一个套路,如图 7.16 所示。

通过配置 AVR 的熔丝位可以控制复位入口地址以及 BOOT 区的大小和开始地址,如图 7.17 所示。

讲到这里,有人会说:“那有没有一种单片机,程序放在 ROM 的任何位置都可以运行起来,也就是中断向量表可以重定位?”当然有,这种单片机还很多,其中最典型的就是 STM32.它的程序之所以可以放之各地皆可运行,是因为在它的 NVIC 控制器中提供了中断向量表偏移量的相关配置.这个后面我们再详细说。

2.ROM 要支持 IAP

这也是需要单片机硬件支持的。很好理解,在 BL 获取到固件数据之后,需要将它写人到ROM的 APP 区中,所以说单片机需要支持 IAP 操作,所谓 IAP 就是 I Application Programming,即在应用烧录。也就是在程序运行过程中,可以对自身 ROM 进行擦除和编程操作。

大家仔细想想是不是这样?似乎支持串口 ISP 的单片机都支持 IAP 能。STC 还把这

图 7.15shaoziyang 的 AVR BL配套上位机软件 AVRUBD

图 7.16 AVR 单片机硬件架构上对 BL的支持

图 7.17AVR 单片机硬件架构上对 BL的支持

功能包装成了它的一大特色,可以用内部 ROM 来充当 EEPROM 的功能,可以在运行时记录一些掉电不丢失的参数信息。

STM32 的 ROM 擦写在配套的固件库(标准库或 HAL 库)中已经有实现,大家可以参考或直接使用。

3.APP 程序的配套修改

为了让 BL 可以顺利地将 APP 程序引导运行起来,APP 程序在开发的时候需要配合 BI做出相应的修改。最重要的就是 APP 程序的开始地址(即中断向量表的开始地址)以及对中断控制器的相应配置。

对于 51、AVR 这类单片机 APP 程序不用修改,具体原因大家应该明白。这里主要对STM32 APP 程序如何修改进行详细讲解。

我们依然是结合实例,如图 7.18 所示。

图 7.18 STM32 ROM 划分实例

假设我们所使用的 STM32小为128KB;BL程序的体积是 16KB,APP 程序紧邻BL,那么 APP 区的开始地址为0X08004000,也就是程序的中断向量表偏移地址为 0X4000。

如果我们使用 MDK 作为开发环境的话,需要修改这里,如图 7.19 所示。

图 7.19 MDK 开发环境中对程序存储器开始地址与大小进行配置

而如果我们使用的是 gcc 的话,则需要对 link.ld 链接文件进行修改,如图 7.20 所示。

然后我们还需要对 NVIC 的中断向量表相关参数进行配置,主要是中断向量表的偏移量,

图 7.20gcc 编译环境下对 link,ld 文件的修改

如下代码:

# define VECT TAB OFFSET  0x4000

OK,经过修改后的程序,我们把它放到 ROM 的 0X08004000 开始地址上,然后再让 BI跳转到这个地址,我们的程序就能运行起来了。

有人又会问:“BL 中的跳转代码怎么写?”别急,这是我们要讲的下一个要点

4.BL 中的跳转代码

跳转代码是 BL 要点中的关建,直接关系到 APP程序能否正常运行,如图 7.21 所示。

图 7.21 BL向 APP 的跳转示意

这段代码大家自行研究,如果展开讲就属于赘述了。

到这里 BL 相关的要点就介绍完了,大家应该有能力去完成一个简单的 BL了。我基于STM32 设计了一个小实验.大家有兴趣可以小试牛刀一下,如图 7.22 所示。

图 7.22 BL功能验证实验

我们将 BL 程序用Jlink 烧录到 0X08000000 位置,而把 APP 程序烧录到 0X08002000 开始位置,然后复位,如果串口打印了 hello world 或流水灯亮起来了,就说明我们的 BL 成功了

相关文章
|
存储 Shell Linux
振南技术干货集:深入浅出的Bootloader(1)
振南技术干货集:深入浅出的Bootloader(1)
|
Shell Linux Android开发
振南技术干货集:深入浅出的Bootloader(5)
振南技术干货集:深入浅出的Bootloader(5)
|
存储
ClickHouse物化视图
ClickHouse物化视图
1055 1
|
11月前
|
存储 固态存储 算法
固态硬盘损坏后还能做数据恢复吗?完整指南
固态硬盘(SSD)因速度快、抗震动、低噪音被广泛使用,但一旦损坏,用户常因慌乱导致二次损失。本文解析SSD损坏后的数据恢复可行性,介绍逻辑损坏、固件异常、物理损坏三种常见情况,并提供对应的恢复方法与预防措施,帮助用户科学应对数据丢失风险,提升恢复成功率。
|
存储 Shell Linux
振南技术干货集:深入浅出的Bootloader(2)
振南技术干货集:深入浅出的Bootloader(2)
|
人工智能 自然语言处理 算法
AI时代的企业内训全景图:从案例到实战
作为一名扎根在HR培训领域多年的“老兵”,我越来越清晰地感受到,企业内训的本质其实是为企业持续“造血”。无论是基础岗的新人培训、技能岗的操作规范培训,还是面向技术中坚力量的高阶技术研讨,抑或是管理层的战略思维提升课,内训的价值都是在帮助企业内部提升能力水平,进而提高组织生产力,减少对外部资源的依赖。更为重要的是,在当前AI、大模型、Embodied Intelligence等新兴技术快速迭代的背景下,企业必须不断为人才升级赋能,才能在市场竞争中保持领先。
2218 13
|
存储 网络协议 数据挖掘
|
编解码 算法 网络协议
软考网工计算题总结(一):总共35类题型,进来复习啦!
软考网工计算题总结(一):总共35类题型,进来复习啦!
1364 3
|
存储 编译器 BI
内存函数​(memcpy、memmove、memset、memcmp)
内存函数​(memcpy、memmove、memset、memcmp)
|
前端开发 JavaScript 搜索推荐
【专栏】比较单页应用(SPA)与多页应用(MPA)的优缺点
【4月更文挑战第28天】本文比较了单页应用(SPA)与多页应用(MPA)的优缺点。SPA以其动态加载、流畅体验和前后端分离受到青睐,尤其适合现代JavaScript框架。而MPA因其传统架构、SEO友好和浏览器兼容性而占优势。选择SPA或MPA应考虑项目需求、团队技能、项目规模及预算,以平衡用户体验、开发效率和兼容性,确保项目目标的实现。
643 0

热门文章

最新文章