九九九久久高清无码-哥啊啊啊不想太大了骚逼-大桥未久一区二区在线观看-我要操死你逼视频 午夜成人福利_午夜成人福利视频_午夜成人免费

你的位置:首頁 > 測試測量 > 正文

STM32 ClassB 功能安全認證|代碼分區(qū)設計與實現(xiàn)全攻略

發(fā)布時間:2026-05-21 來源:轉載 責任編輯:lily

【導讀】工業(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í)行文件轉為匯編:

企業(yè)微信截圖_20260521174100.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ū)設計。


gg_20260512171736_266.png

特別推薦
技術文章更多>>
技術白皮書下載更多>>
熱門搜索

關閉

?

關閉