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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/143576.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

通配符SSL证书

通配符SSL证书是一种特殊的数字证书,用于在互联网上建立安全的连接,其特点是可以保护多个子域名,并且具有很高的兼容性和扩展性。本文将详细介绍通配符SSL证书的相关概念、优点和应用等。 首先,我们需要了解什么是SSL证书。 SSL证…

python入口文件方便在其它目录也能执行

dir_path os.path.dirname(os.path.realpath(__file__)) parent_dir_path os.path.abspath(os.path.join(dir_path, os.pardir)) sys.path.insert(0, parent_dir_path)

CPU vs GPU:谁更适合进行图像处理?

CPU 和 GPU 到底谁更适合进行图像处理呢?相信很多人在日常生活中都会接触到图像处理,比如修图、视频编辑等。那么,让我们一起来看看,在这方面,CPU 和 GPU 到底有什么不同,哪个更胜一筹呢? 一、C…

股市助手:实时股市快讯,真人语音播报,助您第一时间获取最新资讯(自己写的分享给需要的人)

文章目录 📖 介绍 📖🏡 使用环境 🏡📒 使用方法 📒📝 软件设置📝 软件运行 📖 介绍 📖 给大家分享一款自己写的软件《股市助手》,老规矩&#xff…

【C++初阶(七)】类和对象(下)

本专栏内容为:C学习专栏,分为初阶和进阶两部分。 通过本专栏的深入学习,你可以了解并掌握C。 💓博主csdn个人主页:小小unicorn ⏩专栏分类:C 🚚代码仓库:小小unicorn的代码仓库&…

Linux安装MongoDB

Download MongoDB Community Server | MongoDB 简单安装 百度网盘 链接:https://pan.baidu.com/s/1j7q0TtkpByfg8kqb2UCHZw 提取码:93zr --来自百度网盘超级会员V4的分享 解压文件 tar -xvf mongodb-linux-x86_64-4.0.10.tgz 移动解压后的文件到指…

VS设置--查看引用库源代码

1.工具-->选项-->文本编译器-->C#-->高级-->勾选支持导航到反编译源(试验)

Java系列之 IDEA 为类 和 方法设置注解模板

文章底部有个人公众号:热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享? 踩过的坑没必要让别人在再踩,自己复盘也能加深记忆。利己利人、所谓双赢。 1、类方法注解模板 1、File–>settings–…

虚拟局域网

虚拟局域网(VLAN) VLAN建立于交换技术的基础之上 广播域(broadcast domain):其中任何一台设备发出的广播通信都能被该部分网络中的所有其他设备所接收,这部分网络就叫广播域利用以太网交换机可以很方便地实现虚拟局域网VLAN(Virtual LAN)对于一个主机和…

Windows安装docker地址流程配截图,附网卡被禁用处理(有线插了没反应)

Windows安装docker流程配截图 Windows安装docker比较简单,跟着步骤一步一步操作就行,安装包到官网下载就行 安装包下载 下载地址 https://www.docker.com/get-started/下载后双击打开,进入安装界面。单选框是添加桌面快捷方式&#xff0c…

产品经理天天跑火车,我直接和他闹翻

前言 说起产品经理与程序员,简直就是一对冤家。 程序员觉得产品经理不尊重技术规则,产品经理埋怨程序员不尊重创作用心。 一边互怼,一边还要合作,终于,有人忍不下去,动手了…… ![](https://img-blog.cs…

【渗透实战】木马免杀

先看效果(文中附源码) 思路 1.shellcode自身免杀 首先cs生成一个bin文件 再没有二开的情况下落地就会死 那么如何处理呢? 可以通过对shellcode进行加密和编码的方式,然后在内存中进行解密执行 这里介绍几种主流的编码和加密方式 编码方式: base64 sgn编码 加密方式: XO…

这 11 个 for 循环优化你得会

日常开发中,经常会遇到一些循环耗时计算的操作,一般也都会采用 for 循环来处理,for 作为编程入门基础,主要是处理重复的计算操作,虽然简单好用,但在写法上也有很多的考究,如果处理不好&#xff…

「Verilog学习笔记」用优先编码器①实现键盘编码电路

专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点,刷题网站用的是牛客网 分析 用此编码器实现键盘的编码电路。 注意:编码器的输出是低电平有效,而键盘编码电路输出的是正常的8421BCD码,是高电平有效。因此将编…

论文精读 MediaPipe Hands

MediaPipe Hands:On-device Real-time Hand Tracking MediaPipe手势:设备上的实时手势跟踪 论文地址:2006.10214.pdf (arxiv.org) 源码地址:GitHub - vidursatija/BlazePalm: PyTorch 目录 摘要 介绍 架构 BlazePalm Detector Hand L…

基于Java实现的轻量级私有云平台,让企业拥有自己的云平台

一、开源项目简介 KVM Cloud 是一款基于Java实现的轻量级私有云平台,旨在帮助中小企业快速实现计算、存储、网络等资源的管理,让企业拥有自己的云平台。 二、开源协议 使用Apache-2.0开源协议 三、界面展示 四、功能概述 KVM Cloud 是一款基于Java实…

Cesium和Three.js的初步认识

一、Threejs和Cesium的对比 相同点: 都是基于WebGL技术开发的Javascript库,用于在浏览器中创建和显示动画3D计算机图形。 不同点: Threejs:受众面比较广,是封装了webgl的一些底层用法,让初学者更容易上…

Istio学习笔记- 服务网格

Istio 服务网格 参考:Istio / Istio 服务网格 Istio 使用功能强大的 Envoy 服务代理扩展了 Kubernetes,以建立一个可编程的、可感知的应用程序网络。Istio 与 Kubernetes 和传统工作负载一起使用,为复杂的部署带来了标准的通用流量管理、遥…

DNS域名解析服务

1.概述 1.1.产生原因 IP 地址:是互联网上计算机唯一的逻辑地址,通过IP 地址实现不同计算机之间的相互通信,每台联网计算机都需要通过I 地址来互相联系和分别,但由于P 地址是由一串容易混淆的数字串构成,人们很难记忆所有计算机的…

labview实现仪器的控制visa

*IDN? 是识别大多数仪器的查询指令。仪器会回应一个用于描述仪器的识别字符串。如果仪器不接受该指令,请在仪器手册中查询仪器能识别的指令列表。 如下图所示: 程序如下: