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



