1、前言
STM32H5 引入一個(gè)新的名詞 OBK。OBK 是 Option byte key 的意思,本意用來(lái)存儲(chǔ)密鑰,也可以用來(lái)存儲(chǔ)數(shù)據(jù)。傳統(tǒng) STM32 開(kāi)發(fā)與量產(chǎn)需要考慮應(yīng)用程序以及選項(xiàng)字節(jié),對(duì)于STM32H5,則還需要考慮 OBK。本文在 STM32H5 官方文檔的基礎(chǔ)上帶領(lǐng)讀者進(jìn)一步認(rèn)識(shí)一下 OBK。
2、OBK 存儲(chǔ)區(qū)的幾個(gè)疑問(wèn)
2.1. OBK 是 STM32H5 系列都有的嗎?
并不是所有的 STM32H5 系列都存在 OBK。在 STM32H503 上相應(yīng)的 DA【調(diào)試認(rèn)證】功能是借助 OTP 來(lái)完成的,也就是說(shuō),STM32H503 并沒(méi)有 OBK。
2.2. OBK 區(qū)是使用 STM32H5 必需的嗎?
如果用戶(hù)開(kāi)發(fā) STM32H5 應(yīng)用,是否可以不使用 OBK?可以。STM32H5 引入了新的芯片生命周期概念,其 Open 狀態(tài)類(lèi)似于傳統(tǒng) STM32 的讀保護(hù)RDP 0 級(jí)別。如果你的產(chǎn)品從來(lái)沒(méi)考慮過(guò)讀保護(hù) RDP,那么意味著你過(guò)去使用 STM32 都是在默認(rèn)級(jí)別讀保護(hù) RDP0。在這種需求下,產(chǎn)品量產(chǎn)時(shí)只需要關(guān)心應(yīng)用程序和選項(xiàng)字節(jié),不需要理會(huì)生命周期概念,自然也不需理會(huì) OBK。
另外,如果用戶(hù)希望在產(chǎn)品發(fā)布后 SWD/JTAG 都不能被訪(fǎng)問(wèn),那么只需要將 STM32H5 設(shè)置成 Close 或者 Lock 狀態(tài),也不用理睬 OBK。
2.3. 不使用 OBK 區(qū)會(huì)不會(huì)是一種技術(shù)上的浪費(fèi)?
如果在用戶(hù) Flash 使用已經(jīng)緊張的情況下, 不使用 OBK 確實(shí)是一種浪費(fèi)。OBK 總的大小有8K 之多,可以寫(xiě)入任何數(shù)據(jù)。如果用戶(hù) Flash 空間緊張,即使不考慮任何安全保護(hù)的需求,理論上也可以考慮使用 OBK。不過(guò) OBK 的讀寫(xiě)受到 OBK 存儲(chǔ)區(qū)規(guī)則的限制,盡管有 8K 這么大,是否可以完全使用這 8K,依賴(lài)于特定的應(yīng)用需求是否和 OBK-HDPL 規(guī)則相匹配。
2.4. 什么情況下一定需要使用 OBK 區(qū)?
STM32H5 的優(yōu)勢(shì)之一是引入芯片生命周期管理,例如支持將產(chǎn)品狀態(tài)設(shè)置到 Close 狀態(tài)。在 Close 狀態(tài),除非用戶(hù)能提供相應(yīng)的密碼和證書(shū)作為憑證進(jìn)行 DA 認(rèn)證,否則通過(guò)SWD/JTAG 不能訪(fǎng)問(wèn)應(yīng)用代碼,也意味著代碼得到了外部訪(fǎng)問(wèn)保護(hù)。在這種情況下,若需要使用 OBK 存儲(chǔ) DA 認(rèn)證的相關(guān)的信息,這個(gè)時(shí)候 OBK 就必須使用。換句話(huà)說(shuō),你是否在脫離 Open/Provisioning 狀態(tài)后還希望通過(guò) SWD/JTAG 訪(fǎng)問(wèn)STM32H5,則建議使用 OBK 區(qū)。
3、OBK 文件
3.1. OBK 文件的格式
OBK 存儲(chǔ)區(qū)既可以用來(lái)存放密鑰也可以存放數(shù)據(jù),即 OBK 的內(nèi)容可以和應(yīng)用有關(guān)。也就是說(shuō) OBK 不僅僅可以用來(lái)做 DA 認(rèn)證,也可以作為應(yīng)用程序的數(shù)據(jù)區(qū)。如果 OBK 用來(lái)做 DA 認(rèn)證,則 OBK 的格式要符合 DA 認(rèn)證的要求 ;如果 OBK 用來(lái)做應(yīng)用程序的數(shù)據(jù)區(qū),則 OBK 的格式要符合應(yīng)用程序的要求。而應(yīng)用程序需求千差萬(wàn)別。因此,OBK 燒錄時(shí),并沒(méi)有定義它的內(nèi)容符合什么樣的要求,而只關(guān)心三個(gè)方面:
- ....uint32_t.destAddress:燒在哪個(gè)地址
- ....uint32_t.OBKeySize: 大小是多大
- ....uint32_t.doEncryption: 存儲(chǔ)在 MCU 中是否需要加密
上位機(jī)的 OBK 文件相比較 OBK 存儲(chǔ)區(qū)的實(shí)際內(nèi)容就多了一個(gè)頭部,頭部的內(nèi)容就是以上三項(xiàng)。頭部信息的存在是為了告訴燒錄程序,如何處理 OBK 文件中的 payload 負(fù)荷,頭部信息本身在 OBK 存儲(chǔ)區(qū)中并不存在。
OBK 文件中的 payload 負(fù)荷如果沒(méi)有在頭部指定加密的情況下,可以和存儲(chǔ)區(qū)中的相應(yīng)位置的數(shù)據(jù)一一對(duì)應(yīng)。如果在頭部指定加密,相應(yīng)的 STM32H5 支持硬件加密,那么 OBK 文件依然是明文,但是 OBK 存儲(chǔ)區(qū)則是密文。
這也說(shuō)明,對(duì)于 OBK 燒錄工具,不管是證書(shū),密碼,還是數(shù)據(jù),都會(huì)一樣被處理。
3.2. OBK 文件生成的方法
STM32 Trusted Package Creator 可以用來(lái)生成 DA 以及應(yīng)用需要的 OBK 文件。它的輸入是 xml 文件,可通過(guò)圖形界面或者文本進(jìn)行編輯。對(duì)于沒(méi)有在圖形界面上顯示的配置項(xiàng)目,可通過(guò)編輯 xml 讓它在圖形界面上顯示,也可以直接編輯 XML,然后再加載 XML 來(lái)進(jìn)行 OBK生成。
4、OBK 燒錄方法
使用 RSSLIB
STM32H5 提供 RSSLIB 支持 OBK 燒錄。最典型的用法存在于 STM32CubeProgrammer中,它使用運(yùn)行在 MCU 上的 RSSLIB 的函數(shù)進(jìn)行 OBK 的燒錄。
5、小結(jié)
通過(guò)本文,希望用戶(hù)在 STM32H5 正式文檔的基礎(chǔ)進(jìn)一步了解, OBK 的用處, OBK 與OBK 文件的差異,OBK 的生成工具,OBK 的燒錄方法,適合 STM32H5 的用戶(hù)在實(shí)踐中進(jìn)行參考。