久久6-波多野结衣av在线观看-a级在线观看-亚洲精品国产精品乱码不卡√香蕉-91免费小视频-久久网av-人妖粗暴刺激videos呻吟-久久中文字幕av-91人人干-日韩美女啪啪-欧美xxxx18国产-三级欧美韩日大片在线看-久久系列-日本成人片网站-五月婷激情-精品久久久久久亚洲-激情久久网站-光棍福利视频-国产又色又爽又黄-欧美极品视频在线观看

你的位置:首頁(yè) > 測(cè)試測(cè)量 > 正文

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

發(fā)布時(shí)間:2026-05-21 來(lái)源:轉(zhuǎn)載 責(zé)任編輯:lily

【導(dǎo)讀】工業(yè)與家電產(chǎn)品通過(guò) ClassB 功能安全認(rèn)證時(shí),常面臨一個(gè)核心痛點(diǎn):同平臺(tái)多子系列產(chǎn)品,僅應(yīng)用代碼不同、安全代碼完全一致,卻需重復(fù)認(rèn)證,時(shí)間與成本居高不下。為解決該問(wèn)題,行業(yè)通用方案是安全代碼與應(yīng)用代碼物理分區(qū),確保安全代碼二進(jìn)制不變,一份認(rèn)證覆蓋全系列。本文基于 ST 官方 LAT1630 文檔,結(jié)合 STM32G081B+MDK 實(shí)操,拆解分區(qū)原理、分區(qū)設(shè)計(jì)、實(shí)操步驟與調(diào)試技巧,幫你高效落地 ClassB 代碼分區(qū)。


資料獲取:經(jīng)驗(yàn)分享 | LAT1630 ClassB功能安全認(rèn)證代碼與應(yīng)用代碼進(jìn)行分區(qū)的實(shí)現(xiàn)要點(diǎn)

1. 痛點(diǎn)直擊:為何必須做代碼分區(qū)

Class 認(rèn)證核心是安全代碼二進(jìn)制不可變,應(yīng)用代碼修改不能影響安全代碼。但實(shí)際開(kāi)發(fā)中,應(yīng)用代碼變動(dòng)會(huì)觸發(fā)連鎖問(wèn)題:


函數(shù)地址漂移:安全代碼調(diào)用的應(yīng)用函數(shù),地址隨應(yīng)用代碼修改而變化,導(dǎo)致安全代碼二進(jìn)制改變;

全局變量重分配:安全訪問(wèn)的全局變量,地址重新分配,破壞安全邏輯;

隱式調(diào)用干擾:編譯器生成的 switch 跳轉(zhuǎn)等隱式調(diào)用,地址隨應(yīng)用代碼變動(dòng),引發(fā)安全代碼異常。

分區(qū)設(shè)計(jì)的核心目標(biāo),就是隔離安全代碼、固定依賴地址、隔絕應(yīng)用代碼影響,實(shí)現(xiàn) “安全代碼一次認(rèn)證,全系列復(fù)用”。


2. 核心原理:三區(qū)兩區(qū)分區(qū)架構(gòu)

要實(shí)現(xiàn)代碼隔離,需對(duì)ROM(代碼區(qū))分三區(qū)、RAM(變量區(qū))分兩區(qū),精準(zhǔn)隔離安全、過(guò)渡、應(yīng)用代碼,確保安全代碼獨(dú)立性。


2.1 ROM 三區(qū)劃分

SECTION_CLASSB:存放 ClassB 安全代碼(如 stm32xx_STL 系列自檢代碼),只讀不可修改,認(rèn)證核心區(qū)域;

SECTION_WRAPPER:過(guò)渡封裝區(qū),存放安全代碼調(diào)用的函數(shù),地址固定不變,含穩(wěn)定 HAL 庫(kù)函數(shù)、應(yīng)用封裝函數(shù);

SECTION_APP:普通應(yīng)用代碼區(qū),可自由修改,不被安全代碼直接訪問(wèn),變動(dòng)無(wú)影響。

2.2 RAM 兩區(qū)劃分

固定地址 RAM:存放安全代碼訪問(wèn)的全局 / 靜態(tài)變量,地址鎖定不變;

可變地址 RAM:存放普通應(yīng)用變量,可動(dòng)態(tài)分配,不影響安全邏輯。

2.3 關(guān)鍵隔離邏輯

安全代碼僅調(diào)用 Wrapper 區(qū)函數(shù)、訪問(wèn)固定 RAM 變量,完全隔絕 App 區(qū);App 代碼修改僅影響自身,安全代碼二進(jìn)制100% 不變,滿足 Class 認(rèn)證要求。


3. 實(shí)操落地:MDK+STM32G081B 分區(qū)步驟

以 STM32Cube_FW_ClassB_V2.3.0、MDK 5.41.0 為例,分步實(shí)現(xiàn)分區(qū)配置。


3.1 代碼分類(lèi)整理

將工程文件按功能分組:


ClassB 代碼:stm32g0xx_STLmain.c、stm32g0xx_STLxxx.c(自檢核心代碼);

Wrapper 代碼:安全調(diào)用的 HAL 庫(kù)(CRC、WDG、RCC 驅(qū)動(dòng))、封裝函數(shù);

App 代碼:用戶業(yè)務(wù)邏輯、無(wú)關(guān)驅(qū)動(dòng)代碼。

3.2 Scatter 文件分區(qū)配置

通過(guò) MDK 散列文件,強(qiáng)制代碼 / 變量分區(qū):


ROM 分區(qū):指定 SECTION_CLASSB、SECTION_WRAPPER、SECTION_APP 的起始地址與范圍;

RAM 分區(qū):劃分固定地址區(qū)與可變區(qū),綁定安全變量。

核心配置要點(diǎn):


SECTION_CLASSB 設(shè)為獨(dú)立連續(xù)地址,無(wú)重疊;

SECTION_WRAPPER 鎖定起始地址,禁止重定向;

安全全局變量強(qiáng)制分配到固定 RAM 區(qū)。

3.3 Wrapper 封裝技巧

安全代碼需調(diào)用可變應(yīng)用函數(shù)時(shí),必須做封裝:


原始函數(shù)(如 STL_InitClock_Xcross_Measurement)放在 App 區(qū);

新增封裝函數(shù)(STL_InitClock_Xcross_Measurement_Wrapper),內(nèi)部調(diào)用原始函數(shù);

封裝函數(shù)放入 Wrapper 區(qū),安全代碼僅調(diào)用封裝函數(shù);

應(yīng)用代碼修改原始函數(shù),Wrapper 地址不變,安全代碼不受影響。

3.4 編譯器避隱式調(diào)用

安全代碼中 switch 語(yǔ)句會(huì)生成

ARM_common_switch8

隱式調(diào)用,地址易漂移,需添加編譯選項(xiàng):


對(duì) ClassB 代碼文件(如 stm32xx_STLmain.c),添加

--no_branch_tables

禁用編譯器生成分支跳轉(zhuǎn)表,杜絕隱式調(diào)用,保證安全代碼二進(jìn)制穩(wěn)定。

4. 調(diào)試驗(yàn)證:確保安全代碼不變

分區(qū)配置后,需驗(yàn)證安全代碼二進(jìn)制一致性,避免配置疏漏。


4.1 fromelf 匯編對(duì)比

用 MDK 自帶 from 工具,將 axf 執(zhí)行文件轉(zhuǎn)為匯編:

企業(yè)微信截圖_20260521174100.png

對(duì)比應(yīng)用代碼修改前后的匯編文件,SECTION_CLASSB 段完全一致,即為合格。


4.2 宏測(cè)試驗(yàn)證

開(kāi)啟 / 關(guān)閉應(yīng)用代碼宏(如__VERSION_UPDATE),編譯兩個(gè)版本:


對(duì)比二進(jìn)制文件,安全代碼區(qū)無(wú)差異;

應(yīng)用代碼區(qū)正常變化,驗(yàn)證隔離效果。

ClassB 代碼分區(qū)的核心是三區(qū)兩隔離:ROM 分 ClassB、Wrapper、App,RAM 分固定區(qū)、可變區(qū),配合封裝設(shè)計(jì)與編譯器優(yōu)化,徹底隔絕應(yīng)用代碼對(duì)安全代碼的影響。


該方案已通過(guò) ST 官方驗(yàn)證,適配 STM32 全系列 ClassB 認(rèn)證項(xiàng)目,可大幅降低多子系列認(rèn)證成本,縮短產(chǎn)品上市周期。實(shí)操時(shí)重點(diǎn)關(guān)注 Scatter 配置、Wrapper 封裝、隱式調(diào)用規(guī)避,即可高效落地分區(qū)設(shè)計(jì)。


gg_20260512171736_266.png

特別推薦
技術(shù)文章更多>>
技術(shù)白皮書(shū)下載更多>>
熱門(mén)搜索

關(guān)閉

?

關(guān)閉