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

注解目录

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

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(以下简称 BL)以及构建一个 Shell框架。可能有人会觉得它们很高深,实则不难,正所谓“会者不难,难者不会”本章就针对 BL 进行详细的讲解,希望让大家可以体会到它的重要性。

1

烧录方式的更新迭代

1.1 古老的烧录方式


单片机诞生于20 世纪 80 年代,以 51 为代表开始广泛应用于工业控制、家电等很多行业中。起初对于单片机的烧录,也就是将可执行的程序写人到其内部的 ROM 中,这不是一件容易的事情,而且成本不低,因为需要依赖于专门的烧录设备。而且受到半导体技术与工艺的限制,对于 ROM 的烧写大多需要高压。这种境况一直持续到 2000 年左右(我上大学的时候还曾用过这种专门的烧录器),如图 7.1 所示。


图7.1 单片机烧录器

1.2 ISP与ICP烧录方式


随着低压电可擦写 ROM 的成熟,单片机开始集成可通过数字电平直接读写的存储介质。其最大的优势在于可实现在系统或在电路直接烧录程序,而无须像以前一样把单片机芯片从电路中拿出来,放到编程器上,这种烧录方式就是 ISP(In System Programming)或 ICP(InCircuit Programming),如图 7.2 所示。

有人问过这样一个问题:“ISP 和ICP 我都听说过,都说是可以在电路板上直接烧录程序而无须拿下芯片,那 ISP 和ICP 有什么区别?”从广义上来说,两者没有区别,平时我们把其意义混淆也毫无问题。非要创根问底的话,那可以这样来理解:ISP 要求单片机中驻留有专门的程序,用以与上位机进行通信,接收固件数据并烧录到自身的 ROM 中,很显然 ISP 的单片机是需要可运行的,即要具备基本的最小系统电路(时钟和复位);而ICP 可以理解为 MCU 就是一块可供外部读写的存储电路.它不需要预置任何程序,也不需要单片机芯片处于可运行的状态。

支持ISP或ICP 的芯片,以 AT89S51 最为经典,当时从 AT89C51 换成 S51,多少人曾因此不再依赖烧录器而大呼爽哉。这种并口下载线非常流行,如图 7.3 所示,网上还有各种 ISF小软件,可以说它降低了很多人人门单片机的门槛,让单片机变得喜闻乐见。一台电脑、一个S51 最小系统板、一条并口 ISP 下载线,齐了!


图7.2 单片机的ISP烧录


图7.3 用于 AT89S51的并口ISP下载线

1.3 更方便的ISP烧录方式


1.串口ISP

但是后来我们发现带有并口的电脑越来越少。那是在 2005 年前后,STC 单片机开始大量出现,在功能上其实与 S51 相差无几,甚至比同期的一些高端 51 单片机还要逊色。但是它凭借一个优势让人们对它爱不释手,进一步降低了单片机的学习门槛。这个优势就是一一串口 ISP,这是真正意义上的 ISP,如图 7.4 和图 7.5 所示。

再后来,9 针串口都很少见了,只有 USB。这促使一个烧录和调试神器炙手可热--USB


图7.4 STC单片机的串口ISP线路示意


图7.5 STC单片机的串口ISP原理示意

TTL 串口。这下 232 转换芯片省掉了,直接通过 USB 进行烧录。这种方式造福了无数的单片机学习者和工程师。我本人虽然已经搞了近 20 年单片机和嵌入式,USB 串口依然是不可或缺的调试工具。

多年来,在串口与单片机的交互上,我动了很多脑筋,这也是我乐于开发 Bootloader 的一个原因。我希望“USB 串口在手,一切全有!”

STC 并不是第一个使用串口 ISP 烧录程序的,但它是最成功和最深入人心的。与之同期的很多单片机,包括时至今日仍然应用最广泛的 STM32 全系列也都支持了串口 ISP,它成了种标配的、非常普遍的程序烧录手段。

2,各种 USB ISP

串口 ISP 固然方便,但是下载速度是它的硬伤,当固件体积比较大的时候,比如一些大型嵌入式项目的固件动辄几百 KB,甚至几 MB,再用串口 ISP 就未免太慢了。所以一些单片机配有专门的 USB ISP 下载器。以下列举几种比较主流的单片机及其 USB ISP 下载器

(1) AVR

AVR单片机曾经盛极一时,但经历了 2016 年的缺芯风波之后,加之 STM32 的冲击,开始变得一蹶不振,鲜有人用了。与之配套的 USB ISP 下载器非常多样,有些是官方发布的,更多的是爱好者开源项目的成果,如图 7.6 所示。


图7.6 AVR多样的 USB ISP下载工具(AVRISP MKII与 USBASP)

(2)C8051F(见图7.7)


图7.7 C8051F的 USB ISP下载器(EC6)

(3)MSP430(见图7.8)


图7.8 MSP430的 USB ISP下载器

我们会发现,一个具有良好生态的主流单片机,一定有配套的高效便捷的烧录下载工具。可见一种好的烧录方式,对单片机开发是多么重要。

不论是串口 ISP 还是各种专用的 ISP 下载器,都有一些共同的弊端。

(1) 依赖于专门的上位机或不载器硬件,不能做到统型;

(2)下载器价格仍然比较高,尤其是原厂的,这也是为什么有些单片机催生出很多第三方的下载器,比如 AVR;

(3) 下载的时候通常需要附加额外的操作,比如 STC 要重新上电、STM32 需要设置BOOT引脚电平等。

这些额外的操作都增加了烧录的复杂性。尤其是在产品形态下要去重新烧录程序,比如嵌人式升级,就要打开外壳,或将附加信号引出到壳外。这都是非常不高效,不友好的做法。

如果有一种烧录方法,对于任何一种单片机:

(1) 通信方式统一(比如一律都用串口):

(2) 提供一个友好的操作界面(比如命令行方式):

(3) 高效快速,没有附加操作,最好一键自动化烧录;

(4) 另外再增加一些嵌人式固件管理的功能(比如固件版本管理).

这一定会让我们事半功倍。

Bootloader 就能实现上述的这一切!

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

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

相关文章

Ulimit -系统资源配额配置说明

Linux 对于每个用户,系统限制其最大进程数,为提高性能,可以根据设备资源情况, 设置个Linux用户的最大进程数,一些需要设置为无限制; ulimit 参数说明 选项 含义 例子 -H 设置硬资源限制,一旦…

个体诊所电子处方系统设计,诊所电子处方模板,药店电子处方系统,佳易王电子处方管理系统V16.0下载

个体诊所电子处方系统设计,诊所电子处方模板,药店电子处方系统,佳易王电子处方管理系统V16.0下载 软件支持配方模板,病人病历记录查询等,软件打印处方单所用的纸张为 A5纸。软件可以下载试用,点击最下方官网…

道路交通仿真方案【SUMO + TraCI + Python】

“城市交通模拟”(SUMO)是一个开源、高度可移植、微观和连续的交通模拟包,旨在处理大型网络(SUMO 文档)。 TraCI 是“交通控制接口”模块的简称,它可以访问正在运行的道路交通模拟,以检索模拟对…

一文图解爬虫姊妹篇(spider)

—引导语 爬虫,没有一个时代比当前更重视它。一个好的爬虫似乎可以洞穿整个互联网,“来装满自己的胃”。 接上一篇:一文图解爬虫(spider) 博主已初步对爬虫的“五脏六腑”进行了解剖。虽然俗称“爬虫”,但窃…

3.3 Linux 文件管理

1、查看系统信息 tty 命令 描述:查看当前系统在哪个终端语法:tty Linux默认情况下提供6个虚拟终端来让用户登录,系统将F1~F6定义为tty1~tty6。 ctrlalt(F1~F6) :从图形界面切换到命令行界面的第 n 个虚拟终端(F1 是…

VS Code二进制查阅插件Hex Editor(附ASCII表)

文章目录 Hex EditorASCII Hex Editor Hex Editor是一款强大的二进制读取插件,安装之后,可以直接把二进制文件拖入VS Code,然后点击仍然打开按钮,选择Hex Editor,就可以看到二进制数据了,效果如下 点击任何…

代码随想录算法训练营第五十三天 | LeetCode 1143. 最长公共子序列、1035. 不相交的线、53. 最大子数组和

代码随想录算法训练营第五十三天 | LeetCode 1143. 最长公共子序列、1035. 不相交的线、53. 最大子数组和 文章链接:最长公共子序列、不相交的线、最大子数组和 视频链接:最长公共子序列、不相交的线、最大子数组和 1. LeetCode 1143. 最长公共子序列 1…

LTspice导入spice模型

一、创建原理图(原件的样子) 1、下载spice模型 2、用LTspice打开spice模型 3、选中模型名称,选择创建 4、可以自己画模型 导入后都是方块的,可以自己画模型的样子,所有引脚和模型名称都跟器件一样可以移动 da 画模…

微服务系列-使用 RestTemplate 的 Spring Boot 微服务通信示例

公众号「架构成长指南」,专注于生产实践、云原生、分布式系统、大数据技术分享。 概述 下面我们将学习如何创建多个 Spring boot 微服务以及如何使用 RestTemplate 类在多个微服务之间进行同步通信。 微服务通信有两种风格: 同步通讯异步通信 同步通…

【C++初阶(六)】类和对象(中)与日期类的实现

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

如何挑选RPA开发商?

其实,只要在这个行业调查的时间足够,不难发现里面有很多弯弯绕绕。 首先,RPA厂商虽然很多,但是优秀的RPA厂商就那么几家,它们都有各自擅长的领域,像金智维,就是在金融领域、政务领域&#xff1…

【Python3】【力扣题】268. 丢失的数字

【力扣题】题目描述: 【Python3】代码: 1、解题思路:哈希。元素去重,依次判断是否在0-n内,没有则返回。 知识点:set(...):转为集合,集合中的元素不重复。 class Solution:def mis…

打破语言壁垒,实现全球商贸:多语言多商户跨境商城源码引领电商新潮流

随着全球化的不断深入,电子商务的蓬勃发展,传统的单语言电商模式已经无法满足日益多元化的市场需求。多语言多商户跨境商城源码,一种创新的电商解决方案,应运而生。它打破了语言和地域的限制,让全球的商家和消费者都能…

uniapp打包安卓app获取包名

uniapp打包安卓app获取包名的两种方式 1.uniapp云打包 这上面直接可以看到包名,可以修改,也可以在 manifest.json 文件中配置修改 package配置的就是包名,要确保唯一性 2.使用aapt工具获取 1.下载aapt工具,然后添加到环境变量…

tcpdump wireshark简单使用

tcpdump工作原理 tcpdump 是 Linux 系统中非常有用的网络工具,运行在用户态,本质上是通过调用 libpcap 库的各种 api 来实现数据包的抓取功能,利用内核中的 AF_PACKET 套接字,抓取网络接口中传输的网络包。查 看 tcpdump 的 手册…

驱动程序编进内核或则编成模块

驱动程序可以编进内核或则编成模块 驱动程序编成模块 打开/home/book/100ask_imx6ull-sdk/Linux-4.9.88/drivers/char/Kconfig文件,添加以下信息。 在/home/book/100ask_imx6ull-sdk/Linux-4.9.88在目录下使用make memuconfig命令查看配置菜单。 可以按/&#…

二叉树理论碎碎记

二叉树的种类 在刷题的过程中,我们主要关注两种主要形式:满二叉树和完全二叉树。 满二叉树 如果一棵二叉树只有度为0的结点和度为2的结点,并且度为0的结点在同一层上,则这棵二叉树为满二叉树。如下图所示:这棵二叉…

【机器学习基础】机器学习的基本术语

🚀个人主页:为梦而生~ 关注我一起学习吧! 💡专栏:机器学习 欢迎订阅!后面的内容会越来越有意思~ 💡往期推荐: 【机器学习基础】机器学习入门(1) 【机器学习基…

ubuntu20.04有公网ip如何做端口映射?

一,有公网IP时如何做端口映射? 然后打开浏览器,输入192.168.2.1自己路由地址,进入路由器的控制面板(如果不知道用户名和密码,可以在自己路由设备背面可见默认帐号密码)。 点击转发规则&…

ESP32 Arduino实战基础篇-生成 PWM 信号

在本教程中,我们将向您展示如何使用 Arduino IDE 通过 ESP32 生成 PWM 信号。作为示例,我们将构建一个简单的电路,使用 ESP32 的 LED PWM 控制器对 LED 进行调光。我们还将向您展示如何同时在不同的 GPIO 上获取相同的 PWM 信号。 在继续本教程之前,您应该在 Arduino IDE 中…