來源:納芯微電子
設備固件升級需拆回原廠、依賴 J-LINK 等仿真器燒錄?這一痛點可通過 IAP(In-Application Programming)升級方案徹底解決。本系列文章將以納芯微NSSine系列實時控制MCU/DSP芯片NS800RT5039為載體,通過《理論篇》與《實戰篇》的結構化講解,深度拆解“UART-Raw”協議下的IAP升級實現邏輯。內容覆蓋全流程關鍵環節:從固件分區設計(Bootload區+APP區)的基礎規劃,到UART模塊驅動開發、sct分散加載文件配置;從Jump跳轉核心操作的原理剖析,到內部Flash擦寫功能的代碼落地,全程配套清晰流程圖與可復用的代碼清單,既為工程師提供扎實的理論指導,也助力快速完成設備現場固件升級,真正告別“拆機返廠”的低效模式。
IAP技術原理:告別返廠燒錄的核心邏輯
經典的 IAP 方案采用 Bootloader(引導程序)+ App(應用程序)的雙分區架構,Bootloader 負責燒錄固件、通訊等功能;App 是實際的應用業務程序,也就是被升級的對象。雙分區運行流程如下圖所示:

圖1 IAP方案流程
通常,帶主控芯片的設備出廠時,應用代碼會通過 J-LINK 等仿真器燒錄至主控芯片。傳統設備固件升級需將設備返廠,通過 J-LINK、CMSIS-DAP 等仿真器重新燒錄代碼,效率低、成本高。使用 IAP 技術可以在設備實際應用場景中通過通信接口即可實現固件更新,脫離燒錄工具。
核心概念介紹
術語簡述

中斷向量表
NS800RT5039 內核基于 ARM 的 Cortex-M7,在 ARM 架構中,中斷向量表(Interrupt Vector Table)是非常重要的一個組成部分,它定義了處理器發生中斷時應該執行的中斷服務函數的具體地址。
下方是中斷向量表的示意圖以及 NS800RT5039 中斷向量表的部分定義:


圖2 向量表結構
如上圖所示,向量表第一個元素是“__initial_sp”,這個元素定義了程序系統初始的棧(STACK) 指針,也就是棧頂指針(為什么叫棧頂, 根據 CPU 指令架構,其所定義的棧的生長方向為向下生長,即從高地址到低地址生長,默認初始化時,指針的位置處于棧的頂部,因此叫棧頂指針)。而第二個元素“Reset”對應中斷服務函數 Reset_Handler,這個元素定義的就是 Reset_Handler 函數的地址,該函數用作程序系統的入口函數。
向量表重定向
NS800RT5039 基于 Cortex-M7,支持向量表地址的重定向,也就是 SCB->VTOR 寄存器的功能,它可以指示向量表的地址,這個功能極大的方便了 IAP 的實現,從 BOOT 跳轉到 APP 時,通過修改這個寄存器,就能實現向量表的切換。對于 APP 而言, BOOT 跳轉之前 SCB->VTOR 指示的是 BOOT 的向量表,而非 APP 的向量表,所以必須在跳轉到 APP 時手動重新加載 VTOR,以確保在 APP 運行時 CPU 能夠正確響應到 APP 的中斷向量表。
需要注意的是: 對于 Cortex-M7 系列芯片,向量表地址有對齊要求,簡單而言,對齊數必須為 2 的整數冪,且不小于向量表總字節大小。舉個例子, NS800RT7P65x 有 16 個內部中斷, 227 個外部中斷,總大小為 243 x 4 =972 Bytes,那么向量表對齊數必須不小于 972,同時需要滿足為 2 的整數冪,所以210可作為它的對齊數,也就是 1024。
程序啟動的標準流
硬件初始化 (系統時鐘、外設、中斷)
加載棧頂地址到SP寄存器,其位于中斷向量表的第一個元素
讀取 Reset 向量并跳轉
向量表重定向
進行方案設計:實踐前的關鍵決策
設計 Bootloader 與上位機的通訊協議, 為 Bootloader 開發數據傳輸功能
設計 Flash 燒錄算法,為 Bootloader 開發燒錄功能
確定如何從 Bootloader 區啟動,運行 Bootloader 代碼
確定如何從 App 區啟動
確定 Bootloader 區與 App 區的固件地址,以及運行時地址,確保不相干涉
開發上位機
表1 常見IAP方案

在實際項目中,選擇哪種 IAP 方案取決于成本、性能、可靠性要求、物理環境和安全性需求的綜合權衡。對于大多數應用,UART 或 CAN IAP 是入門和通用的首選。
避坑要點:疑難雜癥如何處理
App 跳轉失敗,程序跑飛
檢查跳轉流程是否正確
檢查 Reset 函數(通常在啟動文件中)是否正確調用 SystemInit 函數,以及堆棧初始化函數(在MDK中是 __main() )
檢查 Reset 向量最后一位是否是 1 (1 代表 Thumb 模式,0 代表 ARM 模式)
檢查在C語言代碼中是否在設置棧頂地址后以及跳轉前的同一個函數中使用了局部變量。因為設置棧頂地址會導致棧狀態改變,局部變量會成為未定義的非法數據
跳轉成功,但是后續調試出現 Hardfault
觸發 Hardfault 后,查出出錯地址,結合工程代碼分析非法操作:
觀察 Fault Reports 寄存器 (HFSR,CFSR、MMFAR、BFAR),尋找出錯信息
查看 SP 寄存器,讀取棧幀,獲取出錯前棧狀態
BootLoader 應用層通信協議校驗出錯
調試芯片通訊外設,是否有錯誤標志,如FIFO溢出、校驗失敗等
使用邏分或示波器獲取波形,排查上位機邏輯錯誤、排查硬件干擾、短路或接觸不良
檢查校驗算法,是否與上位機一致,排查算法邏輯
Flash 燒寫失敗或無效
Flash 操作前是否正確關閉了 I/DCache
Flash 寄存器解鎖操作是否正確
Flash 讀寫位寬和對齊是否符合要求
VDDIO 電源電壓是否穩定 (Flash 擦寫需要高壓注入),PCB 電源濾波電容是否滿足要求
編譯 Flash 驅動時盡量不開啟代碼優化
其他注意事項
謹慎規劃固件地址,避免 Bootloader 和 App 相互干涉,如 Bootloader 固件過大,超出規劃區域導致被 App 固件誤改等
Flash 在擦寫時,不能同時對其進行讀操作,若 CPU 對正在進行擦寫的 Flash 有讀請求,會導致 CPU 處于 halt 狀態直到 Flash 響應請求
結論與建議
基于 NS800RT5039 的 IAP 實現,通過清晰的分區規劃與穩定的通信、跳轉與存儲機制,使設備固件升級從“返廠燒錄”轉變為“現場完成”。該方案工程化程度高、代碼可復用性強,覆蓋了多數實際項目中容易踩坑的關鍵細節,適用于工業控制、消費電子等多類應用場景,可顯著降低維護成本并提升系統可用性。
如需獲取《NS800RT系列IAP實現原理及參考樣例》應用筆記 ,請聯系sales@novosns.com。更多產品信息、技術資料敬請訪問www.novosns.com。
納芯微電子(簡稱納芯微,科創板股票代碼:688052;香港聯交所股票代碼:02676.HK)是高性能高可靠性模擬及混合信號芯片公司。自2013年成立以來,公司聚焦傳感器、信號鏈、電源管理三大方向,為汽車、工業、信息通訊及消費電子等領域提供豐富的半導體產品及解決方案。
納芯微以『“感知”“驅動”未來,共建綠色、智能、互聯互通的“芯”世界』為使命,致力于為數字世界和現實世界的連接提供芯片級解決方案。
-
mcu
+關注
關注
147文章
18923瀏覽量
397972 -
IAP
+關注
關注
2文章
169瀏覽量
26054 -
實時控制
+關注
關注
0文章
56瀏覽量
9853 -
納芯微
+關注
關注
3文章
403瀏覽量
16090
原文標題:無需返廠!基于實時控制MCU NS800RT5039 的 IAP 固件升級指南(理論篇)
文章出處:【微信號:米芯微電子,微信公眾號:米芯微電子】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
NSSine?超高性價比新品:NS800RT113x實時控制MCU,開啟“M7平權”新時代
芯海通用 MCU 應用筆記 :CS32F103 系列 MCU IAP 升級指南
納芯微NS800RT5039、NS800RT5049和NS800RT3025實時控制MCU工規版正式量產 供應鏈全國產
供應鏈全國產!納芯微NSSine?系列實時控制MCU(DSP)工規版正式量產
基于納芯微實時控制MCU NS800RT5039的IAP固件升級指南(1)
評論