【GD32】ROM Bootloader、自定义Bootloader区别

Bootloader是应用程序跑起来之前,用于初始化的一段程序,它分为两种,ROM Bootloader、自定义Bootloader。GD32芯片出厂时预烧录在ROM中的Bootloader(以下简称ROM Bootloader)和自己编写的Bootloader(以下简称自定义Bootloader)在角色、目的、能力和实现方式上有着根本性的区别。

你可以将它们理解为:

  • ROM Bootloader:芯片厂商提供的、永久的、功能单一的 “安全救生艇”。它被固化在硬件里,无法被修改或擦除,用于最基础的恢复和编程。
  • 自定义Bootloader:软件工程师开发的、灵活的、功能强大的 “汽车4S店”。它存储在用户Flash中,可以实现复杂的应用逻辑(如网络更新、故障恢复、A/B分区),但本身也可能被损坏。

下面是它们的详细区别:

核心区别对比表

特性芯片ROM Bootloader (内置ISP)用户自定义Bootloader (在Flash中)
物理存储只读存储器(ROM)用户Flash的起始部分 (例如 0x0800 0000)
可修改性不可修改、不可擦除可被修改、更新、甚至擦除
调用方式通过BOOT引脚电平在复位时强制进入通常由软件逻辑标志位决定跳转
主要目的工厂编程、烧录器替代、恢复变砖产品发布后的现场固件升级(FOTA/OA)
功能功能固定单一 (通常是串口/USB DFU)功能无限可能 (以太网、Wi-Fi、蓝牙、CAN、USB等)
内存占用不占用用户Flash空间占用一部分用户Flash空间 (通常几十KB)
安全性无或基础校验可加入高级安全措施 (加密、签名、CRC校验)
易用性手动操作BOOT引脚,配合PC软件全自动,用户无感或通过App触发
****“救命”的“优化”的

详细解释

1. ROM Bootloader (内置Bootloader)
  • 本质:它是芯片硅片的一部分,在芯片制造时就被固化在硬件里。它不是存储在Flash中的,因此你无法通过任何方式修改或删除它。它永远在那里。
  • 目的
    • 最初编程:在芯片贴到PCB板上之前,厂商或客户可以用它通过串口给空白芯片下载第一个程序。
    • 恢复“变砖”:如果用户的自定义Bootloader或应用程序编写有bug,导致程序无法运行(即“变砖”),你可以通过操作BOOT引脚强制进入ROM Bootloader,从而重新烧写一个正确的程序。它是最后的救命稻草。
  • 功能:通常只支持非常基础的通信接口,如:
    • USART(串口):这是最普遍的方式。
    • USB DFU(部分型号支持)。
    • 功能单一:主要是接收数据并写入主Flash。
  • 使用场景:需要手动干预。工程师必须用跳帽改变BOOT引脚电平,然后复位芯片,再打开电脑上的ISP下载工具(如GD32 MCU ISP Programmer)进行操作。普通最终用户根本无法使用这个功能。
2. 自定义Bootloader (用户Bootloader)
  • 本质:它是你自己编写或使用第三方库开发的一段程序存储在主Flash的开头部分(例如从 0x0800 0000 开始)。它和你的应用程序(App)一样,是可以被修改、更新和擦除的。
  • 目的
    • 现场固件升级(FOTA - Firmware Over-The-Air):这是最主要的目的。产品发布到现场后,可以通过各种网络方式(Wi-Fi、4G、以太网)远程接收新固件并更新自身,无需召回产品。
    • 多应用程序管理:实现A/B分区(双固件备份),保证更新失败后能回滚到旧版本。
    • 安全启动:在跳转到应用程序前,对其进行密码签名验证、CRC校验等,确保固件完整且来自可信源。
  • 功能取决于你的代码能力和硬件资源,可以实现任何复杂的功能:
    • 支持多种通信协议:以太网、Wi-Fi、蓝牙、CAN总线、USB、SD卡等。
    • 高级功能:固件解密、数字签名验证、断点续传、更新状态上报等。
  • 使用场景全自动或用户友好。例如:
    • 设备屏幕上出现“发现新版本,是否更新?”的提示,用户点击“确定”即可。
    • 设备在半夜自动从服务器检测并下载更新,完成后自动重启生效。

工作流程对比

ROM Bootloader 工作流程:

操作BOOT引脚
BOOT0=1, BOOT1=0
硬件复位
CPU自动运行ROM Bootloader
通过串口等待PC指令
接收数据并烧写至用户Flash
完成后需手动设置BOOT0=0
复位后运行新程序

自定义Bootloader 工作流程:

失败
成功
上电/复位
CPU运行自定义Bootloader
检查升级标志?
跳转到应用程序APP
通过WiFi/以太网等
从服务器下载新固件
校验固件
签名, CRC等
报告错误, 尝试回滚
将新固件写入
应用程序分区Flash
验证写入结果
设置标志, 复位

总结

ROM Bootloader自定义Bootloader
角色芯片自带的修复工具你开发的产品功能
存储硬件ROM用户Flash
特点永久、安全、功能弱灵活、强大、有风险
关系用于更新和恢复自定义Bootloader和App依赖于ROM Bootloader作为最后的备份

在开发中,典型的做法是:

  1. 首先使用 ROM Bootloader 通过串口将你的 自定义Bootloader 程序烧录到芯片中。
  2. 然后,你的 自定义Bootloader 再通过更高级的接口(如网络)去更新 应用程序(App)
  3. 如果 自定义Bootloader 本身需要升级,可能需要设计一个特殊的机制(例如由App来更新Bootloader),或者 fallback 到 ROM Bootloader 来进行恢复。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux防火墙-Firewalld

一、 概述 按表现形式划分: 软件防火墙: 集成在系统内部,Linux系统: iptables、firewalld、ufw; windows系统下: windows defender 硬件防火墙: 华为防火墙、思科防火墙、奇安信防火墙、深信服防…

【Qt】PyQt、原生QT、PySide6三者的多方面比较

目录 引言 一、基本定义 二、核心对比维度 1. 编程语言与开发效率 2. 功能与 API 兼容性 3. 性能表现 4. 许可证与商业使用 5. 社区与文档支持 三、迁移与兼容性 四、适用场景推荐 五、总结对比表 总结 引言 PySide6、PyQt(通常指 PyQt5/PyQt6&#xf…

JavaWeb站内信系统 - 技术设计文档

1. 系统概述1.1 项目背景本系统旨在为企业或社区平台提供一套完整的站内信解决方案,支持用户之间的消息发送、接收、管理等功能,提升用户间的沟通效率。1.2 设计目标实现用户间消息发送和接收支持一对一和一对多消息发送提供消息状态跟踪(已读…

Java基础 9.10

1.System类常见方法和案例exit:退出当前程序arraycopy:复制数组元素,比较适合底层调用,一般使用 Arrays.copyOf 完成复制数组int[] src{1,2,3};int[] dest new int[3]; System.arraycopy(src, 0, dest, 0, 3);currentTimeMilens&…

详解flink性能优化

1. 简介 Apache Flink是一个强大的流处理框架,其性能很大程度上取决于内存的使用效率。在大规模数据处理场景中,合理的内存配置和优化可以显著提升Flink作业的性能和稳定性。本文将深入探讨Flink内存优化的各个方面,包括状态后端选择、内存配…

VueFlow的箭头怎么调整

正好最近用到了VueFlow组件,发现箭头默认样式太小,无法体现流程展示,因此翻阅相关资料得出下列方法,有什么更好的方法,大家可以推荐推荐,谢谢。方法1:通过边(Edge)的样式…

【Python】S1 基础篇 P9 文件处理与异常处理技术

目录文件读取操作读取文件的全部内容相对路径和绝对路径逐行访问文件内容文件写入操作写入单行内容写入多行内容结构化数据的存储异常处理机制理解异常的工作原理ZeroDivisionError异常示例try-except语句块的使用else语句块的正确使用静默失败的合理应用本文将深入探讨Python中…

分布式事务实战手册:从四场业务灾难看方案选型与落地陷阱

在分布式系统的稳定性战役中,数据一致性问题如同潜伏的暗礁。某生鲜电商因分布式事务设计缺陷,在春节促销期间出现"下单成功但无库存发货"的悖论,3小时内产生2300笔无效订单,客服投诉量激增300%;某银行转账系…

Java算法题中的输入输出流

在Java算法题中,处理输入输出主要依赖系统流(System.in和System.out),常用的方法总结如下: 一、输入方法(读取系统输入) 主要通过java.util.Scanner类或BufferedReader类实现,适用于…

墨水屏程序

EPD Reader 基于ESP32-C3的电子墨水屏阅读器,支持ap 配网、sntp 时间同步、txt阅读、天气预报、显示节假日信息、农历显示、自动休眠、web配置等功能。这是在另一个项目 一个rust embassy esp32c3 的练习项目-CSDN博客的基础上修改的 。 界面比较粗糙,以…

Git 创建 SSH 密钥

1.生成 SSH 密钥 打开 Git Bash ssh-keygen -t ed25519 -C "your_email@example.com" 把 ”your_email@example.com“ 改成再 github 注册的邮箱 系统会提示您三次输入: 第一个提示:Enter file in which to save the key (/c/Users/86189/.ssh/id_ed25519): 直接…

当前 AI 的主流应用场景

当前AI技术已深度渗透至社会各领域,2025年的主流应用场景呈现出行业垂直化、交互自然化、决策自主化三大特征。以下从六大核心领域展开分析,结合最新技术突破与规模化落地案例,揭示AI如何重塑人类生产生活范式: 一、智能办公与生产力革命 AI正从工具升级为「数字同事」,…

EI会议:第六届电信、光学、计算机科学国际会议(TOCS 2025)

第六届电信、光学、计算机科学国际会议(TOCS 2025)定于11月21-23日在中国南阳举行,本届会议以“电信、光学、计算机科学”为主题,旨在为相关领域的专家和学者提供一个探讨行业热点问题,促进科技进步,增加科…

回归预测 | MATLAB基于GRU-Attention的多输入单输出回归预测

代码是一个基于 MATLAB 的深度学习时间序列预测模型,结合了 GRU(门控循环单元)和自注意力机制(Self-Attention),用于回归预测任务。 一、主要功能 使用 GRU + Self-Attention 神经网络模型对时间序列数据进行回归预测,评估模型在训练集和测试集上的性能,并可视化预测结…

【JavaEE】(24) Linux 基础使用和程序部署

一、Linux 背景知识 Linux 的第一个版本开发者是 Linus,所以部分人会叫“林纳斯”。Linux 只是一个开源的操作系统内核,有些公司/开源组织基于 Linux 内核,配套了不同的应用程序,构成不同的操作系统(比如 vivo、&#…

视觉SLAM第9讲:后端1(EKF、非线性优化)

目标: 1.理解后端的概念; 2.理解以EKF为代表的滤波器后端的工作原理; 3.理解非线性优化的后端,明白稀疏性是如何利用的; 4.使用g2o和Ceres实际操作后端优化。 9.1 概述 9.1.1 状态估计的概率解释 1.后端优化引出 前段…

楼宇自控系统监控建筑变配电系统:功效体现在安全与节能层面

建筑变配电系统是保障建筑电力供应的 “心脏”,负责将外界高压电转化为建筑内设备可使用的低压电,为暖通、照明、电梯等核心系统供电。传统变配电管理依赖人工巡检,不仅存在 “监测滞后、故障难预判” 的安全隐患,还因无法精准调控…

【Docker安装使用常见问题汇总】

文章目录1. wsl update failed: update failed:2.dockerDesktopLinuxEngine: The system cannot find the file specified.3. 中文语言包3.1. 下载中文包3.2 默认路径如下:3.3 备份并替换 app.asar 文件:4. Get "https://registry-1.docker.io/v2/&…

Android面试指南(八)

目录 1、Java语言相关 1.1、String的intern方法 1.2、HashMap的扩容 1.3、Java数组不支持泛型 1.4、泛型类型保留到运行时 1.5、匿名内部类使用的外部变量需要加final 2、Kotlin语言相关 3、设计模式 1、Java语言相关 1.1、String的intern方法 1)、String…

7、Matplotlib、Seaborn、Plotly数据可视化与探索性分析(探索性数据分析(EDA)方法论)

学习目标:掌握数据可视化的原理和工具,培养通过图表洞察数据规律的能力,建立数据驱动的分析思维数据可视化是数据科学的重要组成部分,它将抽象的数字转化为直观的图形,让我们能够快速识别模式、趋势和异常。从基础的柱…