[研电赛技术支持] ROM Bootloader、自定义Bootloader区别

[复制链接]
120|0
guanjiaer 发表于 2025-11-8 10:41 | 显示全部楼层 |阅读模式

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

你可以将它们理解为:

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

核心区别对比表

97804690d675c09abb.png

详细解释
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 工作流程:

77533690d67451c05e.png

自定义Bootloader 工作流程:

10206690d672c20b4b.png

总结

36833690d6738b35b0.png

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

首先使用 ROM Bootloader 通过串口将你的 自定义Bootloader 程序烧录到芯片中。
然后,你的 自定义Bootloader 再通过更高级的接口(如网络)去更新 应用程序(App)。
如果 自定义Bootloader 本身需要升级,可能需要设计一个特殊的机制(例如由App来更新Bootloader),或者 fallback 到 ROM Bootloader 来进行恢复。
————————————————
版权声明:本文为CSDN博主「蜀黍@猿」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/m0_58087444/article/details/151355460
您需要登录后才可以回帖 登录 | 注册

本版积分规则

111

主题

4410

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部