<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > STM32H5 DA 之初體驗(yàn)(不帶 Trust Zone)

          STM32H5 DA 之初體驗(yàn)(不帶 Trust Zone)

          作者: 時(shí)間:2024-01-17 來源:STM32單片機(jī) 收藏

          01 前言

          本文引用地址:http://www.ex-cimer.com/article/202401/454921.htm

          本文是接著之前文檔《 DA 之初體驗(yàn)(帶 )》的后續(xù)之作。

          由于新的 product state 和 DA 的引入, 所有 開發(fā)者都必須掌握DA 的用法。63 在 打開和不打開兩種情況下, DA 所采用的策略是不相同的。當(dāng) TZ 打開時(shí), 使用證書進(jìn)行 DA, 而當(dāng) TZ 不打開時(shí), 則使用密碼來 DA。

          因此, 本文檔針對(duì) STM32H5 初學(xué)者, 演示當(dāng) TZEN=0xC3( 不打開)時(shí), 使用密碼來完成 DA 回退。當(dāng) TrustZone 未激活時(shí), 不支持 DA 調(diào)試,只支持 DA 回退。

          此外, 由于 STM32H503 不帶 TrustZone, 它的 DA 過程與 H563 不開啟 TZ 的情況下類似。除此之外, 與 H563 不同的是, H503 內(nèi)部沒有 OBK 區(qū)域, 因此, 預(yù)配置過程會(huì)將密碼對(duì)應(yīng)的 obk 文件寫入芯片內(nèi)部的 OTP 中。

          02 準(zhǔn)備工作

          開發(fā)板: NUCLEO-H563ZI

          圖片

          軟件包: STM32Cube_FW_H5_V1.1.0

          工具:

          ? STM32CubeProgrammer v2.14.0

          ? Tera Term 串口終端顯示

          ? Trust Package Creator (安裝 STM32CubeProgrammer 時(shí)一并安裝, 注意勾選)

          IDE: STM32CubeIDE v1.13.0

          STM32CubeH5 包我們需要將其放到一個(gè)沒有空格沒有中文的路徑下, 在本動(dòng)手實(shí)驗(yàn)中, 我們默認(rèn)將其放在路徑 C:workspace目錄下。

          03 生成OBK并測(cè)試

          在 STM32CubeH5 包下的路徑 STM32Cube_FW_H5_V1.1.0ProjectsNUCLEO-H563ZIROT_ProvisioningDA, 在此目錄下, 已經(jīng)包含了默認(rèn)自帶的 obk密鑰。其實(shí)我們可以直接使用這些 obk 以及對(duì)應(yīng)的密鑰, 但在這個(gè)文檔我們將重新生成一套,并測(cè)試它是否 OK。

          3.1. 生成 DA OBK 文件和密碼文件

          打開 TPC 工具。

          圖片

          左邊選擇 H5, 上方選項(xiàng)卡選擇 OBKey, 然后在 xml file 處選擇C:/workspace/STM32Cube_FW_H5_V1.1.0/Projects/NUCLEOH563ZI/ROT_Provisioning/DA/Config/DA_ConfigWithPassword.xml, 然后在 Password 處輸入你想要設(shè)置的密碼, 這里我們直接使用默認(rèn)密碼即可。然后在 output file 處設(shè)置輸出文件, 我們也使用默認(rèn)即可。最后點(diǎn)擊 Generate OBkey 按鍵, 在 Binary 目錄下生成對(duì)應(yīng)的 obk 文件和bin 文件 :

          圖片

          如上圖所示, DA_ConfigWithPassword.obk 是用來做預(yù)配置(provisioning)用的, 而password.bin 則是在 DA 過程中需要的密碼文件了。

          3.2. 預(yù)配置 DA(provisioning)

          接下來我們將做預(yù)配置 DA, 在此之前我們確保 TZEN=0xC3。

          圖片

          然后將 product state 配置為 provisioning 狀態(tài) :

          圖片

          然后使用 STM32CubeProgrammer 進(jìn)行預(yù)配置 :

          圖片

          如上圖所示, 在 OBKey file path 處輸入C:workspaceSTM32Cube_FW_H5_V1.1.0ProjectsNUCLEOH563ZIROT_ProvisioningDABinaryDA_ConfigWithPassword.obk 文件, 再點(diǎn)擊 Start Provisioning 按鍵…

          圖片

          結(jié)果將彈出對(duì)話框提示預(yù)配置成功。

          3.3. DA 回退

          接下來我們直接使用密碼進(jìn)行 DA 回退…

          圖片

          如上圖, 在 STM32CubeProgrammer 斷開的情況下, 點(diǎn)擊 Discover…

          圖片

          如上圖所示, 在 Password File Path 處輸入密碼文件 :C:workspaceSTM32Cube_FW_H5_V1.1.0ProjectsNUCLEOH563ZIROT_ProvisioningDABinarypassword.bin

          然后點(diǎn)擊 Full Regression 按鍵…

          圖片

          如上圖所示, 成功時(shí)會(huì)彈出提示對(duì)話框。

          這表示, 之前 DA 預(yù)配置的 obk 文件與當(dāng)前輸入的密碼文件是匹配的。

          04 燒錄程序再次測(cè)試

          接下來, 我們正式燒錄一個(gè)程序并測(cè)試。在 product state=open 狀態(tài)下, 且 TZEN=0xC3 時(shí), 此時(shí)燒錄任何一個(gè)不帶 TrustZone 的程序,并確保其在 OPEN 狀態(tài)下能正常運(yùn)行,然后將 product state 切換到 provisioning 狀態(tài)進(jìn)行 DA 預(yù)配置, 重復(fù) 3.2 節(jié)步驟。

          在預(yù)配置成功之后, 然后將 product state 切換到 CLOSED(0x72)狀態(tài). 此時(shí) STLink 是無法再連接的, 然后檢查程序是能依然正常運(yùn)行。這就是最終想要達(dá)到的效果。在此狀態(tài)下, 可以通過 DA 進(jìn)行回退。

          05 還原

          還原的過程參考 3.3 節(jié), 步驟完全一致。最終還原成功后, 全片 Flash 內(nèi)容已經(jīng)擦除。

          至此, 芯片完全恢復(fù)成原始狀態(tài)。



          關(guān)鍵詞: STM32H5 TrustZone DA調(diào)試

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();