【導讀】工業與家電產品通過 ClassB 功能安全認證時,常面臨一個核心痛點:同平臺多子系列產品,僅應用代碼不同、安全代碼完全一致,卻需重復認證,時間與成本居高不下。為解決該問題,行業通用方案是安全代碼與應用代碼物理分區,確保安全代碼二進制不變,一份認證覆蓋全系列。本文基于 ST 官方 LAT1630 文檔,結合 STM32G081B+MDK 實操,拆解分區原理、分區設計、實操步驟與調試技巧,幫你高效落地 ClassB 代碼分區。
資料獲取:經驗分享 | LAT1630 ClassB功能安全認證代碼與應用代碼進行分區的實現要點
1. 痛點直擊:為何必須做代碼分區
Class 認證核心是安全代碼二進制不可變,應用代碼修改不能影響安全代碼。但實際開發中,應用代碼變動會觸發連鎖問題:
函數地址漂移:安全代碼調用的應用函數,地址隨應用代碼修改而變化,導致安全代碼二進制改變;
全局變量重分配:安全訪問的全局變量,地址重新分配,破壞安全邏輯;
隱式調用干擾:編譯器生成的 switch 跳轉等隱式調用,地址隨應用代碼變動,引發安全代碼異常。
分區設計的核心目標,就是隔離安全代碼、固定依賴地址、隔絕應用代碼影響,實現 “安全代碼一次認證,全系列復用”。
2. 核心原理:三區兩區分區架構
要實現代碼隔離,需對ROM(代碼區)分三區、RAM(變量區)分兩區,精準隔離安全、過渡、應用代碼,確保安全代碼獨立性。
2.1 ROM 三區劃分
SECTION_CLASSB:存放 ClassB 安全代碼(如 stm32xx_STL 系列自檢代碼),只讀不可修改,認證核心區域;
SECTION_WRAPPER:過渡封裝區,存放安全代碼調用的函數,地址固定不變,含穩定 HAL 庫函數、應用封裝函數;
SECTION_APP:普通應用代碼區,可自由修改,不被安全代碼直接訪問,變動無影響。
2.2 RAM 兩區劃分
固定地址 RAM:存放安全代碼訪問的全局 / 靜態變量,地址鎖定不變;
可變地址 RAM:存放普通應用變量,可動態分配,不影響安全邏輯。
2.3 關鍵隔離邏輯
安全代碼僅調用 Wrapper 區函數、訪問固定 RAM 變量,完全隔絕 App 區;App 代碼修改僅影響自身,安全代碼二進制100% 不變,滿足 Class 認證要求。
3. 實操落地:MDK+STM32G081B 分區步驟
以 STM32Cube_FW_ClassB_V2.3.0、MDK 5.41.0 為例,分步實現分區配置。
3.1 代碼分類整理
將工程文件按功能分組:
ClassB 代碼:stm32g0xx_STLmain.c、stm32g0xx_STLxxx.c(自檢核心代碼);
Wrapper 代碼:安全調用的 HAL 庫(CRC、WDG、RCC 驅動)、封裝函數;
App 代碼:用戶業務邏輯、無關驅動代碼。
3.2 Scatter 文件分區配置
通過 MDK 散列文件,強制代碼 / 變量分區:
ROM 分區:指定 SECTION_CLASSB、SECTION_WRAPPER、SECTION_APP 的起始地址與范圍;
RAM 分區:劃分固定地址區與可變區,綁定安全變量。
核心配置要點:
SECTION_CLASSB 設為獨立連續地址,無重疊;
SECTION_WRAPPER 鎖定起始地址,禁止重定向;
安全全局變量強制分配到固定 RAM 區。
3.3 Wrapper 封裝技巧
安全代碼需調用可變應用函數時,必須做封裝:
原始函數(如 STL_InitClock_Xcross_Measurement)放在 App 區;
新增封裝函數(STL_InitClock_Xcross_Measurement_Wrapper),內部調用原始函數;
封裝函數放入 Wrapper 區,安全代碼僅調用封裝函數;
應用代碼修改原始函數,Wrapper 地址不變,安全代碼不受影響。
3.4 編譯器避隱式調用
安全代碼中 switch 語句會生成
ARM_common_switch8
隱式調用,地址易漂移,需添加編譯選項:
對 ClassB 代碼文件(如 stm32xx_STLmain.c),添加
--no_branch_tables
;
禁用編譯器生成分支跳轉表,杜絕隱式調用,保證安全代碼二進制穩定。
4. 調試驗證:確保安全代碼不變
分區配置后,需驗證安全代碼二進制一致性,避免配置疏漏。
4.1 fromelf 匯編對比
用 MDK 自帶 from 工具,將 axf 執行文件轉為匯編:

對比應用代碼修改前后的匯編文件,SECTION_CLASSB 段完全一致,即為合格。
4.2 宏測試驗證
開啟 / 關閉應用代碼宏(如__VERSION_UPDATE),編譯兩個版本:
對比二進制文件,安全代碼區無差異;
應用代碼區正常變化,驗證隔離效果。
ClassB 代碼分區的核心是三區兩隔離:ROM 分 ClassB、Wrapper、App,RAM 分固定區、可變區,配合封裝設計與編譯器優化,徹底隔絕應用代碼對安全代碼的影響。
該方案已通過 ST 官方驗證,適配 STM32 全系列 ClassB 認證項目,可大幅降低多子系列認證成本,縮短產品上市周期。實操時重點關注 Scatter 配置、Wrapper 封裝、隱式調用規避,即可高效落地分區設計。



