【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
英文地址,請注明出處:http://en.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)方法論)

學習目標:掌握數據可視化的原理和工具,培養通過圖表洞察數據規律的能力,建立數據驅動的分析思維數據可視化是數據科學的重要組成部分,它將抽象的數字轉化為直觀的圖形,讓我們能夠快速識別模式、趨勢和異常。從基礎的柱…