【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 来进行恢复。
相关推荐
物随心转4 小时前
ARM处理器的NEON技术
嵌入式硬件
sheepwjl5 小时前
《嵌入式硬件(六):ARM汇编核心内容总结》
汇编·arm开发·嵌入式硬件
小莞尔5 小时前
【51单片机】【protues仿真】基于51单片机公交报站系统
stm32·单片机·嵌入式硬件·51单片机·proteus
写点什么呢5 小时前
Cubemx+Fatfs(解决挂载Fatfs失败的问题)
单片机·嵌入式硬件
物随心转6 小时前
ARM的big.LITTLE架构
嵌入式硬件
月阳羊6 小时前
【硬件-笔试面试题-81】硬件/电子工程师,笔试面试题(知识点:详细讲讲同步时钟与异步时钟通信)
java·经验分享·单片机·嵌入式硬件·面试
猪八戒1.06 小时前
4.2 I2C通信协议
stm32·单片机·嵌入式硬件
然后,是第八天7 小时前
[模块教学]VK16K33_8×16LED矩阵屏的驱动以及技术文档,矩阵屏, 详细配置说明
stm32·单片机·iic·8×16点阵屏
指针刺客7 小时前
串口数据收发的设计
单片机·嵌入式硬件