
STM32 的調試口被鎖死而且是在燒錄 provisioning 工程之后這種問題我遇到過不止一次。最近有個朋友在 NUCLEO-H533RE 開發(fā)板上跑 H523 的 provisioning 項目遇到了一個特別典型的情況DADebug Authentication流程顯示成功但代碼跑起來之后ST-LINK 完全連不上芯片調試口徹底丟失。這個現(xiàn)象很迷惑因為 provisioning 成功后理論上應該處于“可調試”狀態(tài)結果反而被鎖住了。我先把結論放在前面這個問題十有八九不是 DA 流程本身失敗而是 provisioning 過程中把 debug 權限配置成了受限模式或者 DA 燒錄完成后芯片進入了錯誤的生命周期狀態(tài)。H523 和 H533 同屬 STM32H5 系列安全架構完全一致所以用 NUCLEO-H533RE 的 provisioning 參考工程去調試 H523 芯片硬件上沒問題但配置上的坑一個都不會少。這篇文章我打算從 H5 系列的安全生命周期講起把 DA 流程到底做了什么、為什么“成功”了卻拿不回調試權限、以及怎么一步步排查和恢復完整梳理一遍。如果你也正在用 H5 系列做安全啟動或者代碼保護這篇內容應該能幫你少走不少彎路。1. 整體設計與思路拆解H5 系列安全體系與 provisioning 的關系1.1 為什么 H523 和 H533 可以共用 provisioning 工程很多人在看到 NUCLEO-H533RE 的 provisioning 示例工程時會有個疑問我用的芯片明明是 H523為什么參考工程是 H533 的這兩個型號能通用嗎答案是能通用但要注意邊界。H523 和 H533 同屬 STM32H5 系列都基于 Cortex-M33 內核都集成了 RDPRead Protection、HDPHardware Diversification Protection、Secure Storage 等安全特性最關鍵的是它們共享同一套 TrustZone 架構和 DA 流程。ST 官方在 NUCLEO-H533RE 板卡的示例工程中實際上已經把 H5 系列共用的安全框架都包含了所以用它來做 H523 的 provisioning 參考在代碼層面基本沒有障礙。但這里有個容易被忽略的點H523 和 H533 在某些安全特性上并不完全一致比如 Flash 容量和 OBKOption Bytes Key的配置細節(jié)可能有差異。這意味著 provisioning 工程生成的配置數(shù)據(jù)不能無腦直接燒到 H523 里需要針對芯片型號重新生成和校準。很多人在這一步跳過了 check直接用 H533 的配置去燒 H523最后出問題也就不奇怪了。1.2 Debug Authentication 到底在做什么DA 的全稱是 Debug Authentication是 H5 系列用于管理調試權限的核心機制。它的作用可以理解成一把“安全鑰匙”芯片在出廠時處于開放狀態(tài)任何人都可以通過調試器讀寫 Flash但當你啟用了 RDP讀保護或 TrustZone 后芯片會進入受限狀態(tài)此時普通的調試器連接就會被拒絕只有擁有正確證書和密鑰的設備才能通過 DA 協(xié)議重新打開或關閉調試口。從技術原理上講DA 基于一組由 ST 提供的根密鑰和證書鏈。provisioning 工程做的事情就是把這組密鑰、證書以及相關的配置數(shù)據(jù)燒錄到芯片的 OTPOne-Time Programmable區(qū)域同時設置生命周期狀態(tài)。燒錄完成后芯片會根據(jù)配置決定是否允許調試器訪問。這里有個非常關鍵的概念DA 成功不代表調試口一定打開。DA 成功只代表“認證和授權過程完成了”但授權的結果是什么取決于你在 provisioning 工程里配置的 debug 權限。如果你把權限配置成了 Disabled那么 DA 認證成功之后芯片依然不會開放調試口。這就是標題里說的“DA reports success but cannot regain debug access”的核心原因。1.3 為什么“成功”卻失去調試能力結合我實際排查過的情況這個問題通常不是單一原因導致的而是多個因素疊加。第一個因素是生命周期狀態(tài)的改變。STM32H5 芯片的生命周期包括 STATE_OPEN、STATE_CLOSED、STATE_LOCKED 等幾個狀態(tài)。正常情況下DA 流程應該讓芯片在 CLOSED 和 OPEN 之間切換而如果 provisioning 過程中把生命周期設置成了 LOCKED那么這個狀態(tài)是單向不可逆的芯片會永久鎖定調試口就再也回不來了。第二個因素是 RDP 等級配置錯誤。RDP 分為 Level 0無保護、Level 1禁止外部調試但允許 DA 回歸和 Level 2永久保護。如果 provisioning 工程把 RDP 等級設置成了 Level 2那就等于放棄了所有后續(xù)調試的可能性。第三個因素也是很多人容易忽略的DA 證書和密鑰配置不匹配。NUCLEO-H533RE 的工程默認使用 ST 官方開發(fā)板自帶的調試證書而如果你手上的是第三方核心板或者自己畫的板子芯片里的根密鑰和工程里預置的證書可能對不上。這種情況下 DA 流程可能“假成功”——通訊正常、握手正常但最終因為密鑰不匹配授權結果無法生效調試口依舊鎖死。2. 核心細節(jié)解析與實操要點provisioning 工程的關鍵配置拆解2.1 工程結構到底哪些文件在控制安全狀態(tài)在 NUCLEO-H533RE 的 provisioning 示例工程里你會看到一堆與安全配置相關的源文件和腳本。初次接觸的人很容易迷失在這些文件里不知道哪個才是控制最終安全狀態(tài)的關鍵。我這里幫你把核心的部分梳理清楚。首先是DA/目錄這里面存放的是 Debug Authentication 相關的證書、密鑰和配置文件。具體來說里面有 ST 提供的根證書、開發(fā)板的設備證書以及用于生成 DA 配置的腳本。這個目錄是整個 provisioning 流程的“身份證”它決定了你的 DA 流程能不能被芯片認可。其次是RDP/相關的配置這些配置決定了讀保護等級。你可以通過修改這個配置來設定 RDP Level 0 還是 Level 1。在實際操作中我不建議在初學階段嘗試 RDP Level 2因為一旦燒進去芯片就永久鎖死了。再往下是OptionBytes配置文件這個文件控制了很多硬件層面的行為包括看門狗配置、BORBrown-Out Reset等級、以及最重要的 Debug 權限配置。你可能想不到很多“DA 成功但失去調試口”的問題根源就在這個文件的某個位域上。還有一個非常隱蔽的配置是boot lock。在 H5 系列中你可以給 boot 區(qū)加鎖這樣即使通過調試口成功連接也無法讀取或改寫 boot 區(qū)的代碼。如果你在 provisioning 工程里意外啟用了 boot lock又會多一個“能連上但沒權限”的坑。2.2 實操修改 provisioning 工程前的準備工作在動手改任何配置之前我強烈建議你先做兩件事第一備份當前能用的燒錄配置。用 STM32CubeProgrammer 連接開發(fā)板導出當前的 Option Bytes 和 RDP 狀態(tài)保留一份“健康狀態(tài)”的快照。萬一后面改出了問題這可能是唯一的恢復線索。第二確認芯片型號和板卡版本。H523 和 H533 雖然是同系列但引腳和 Flash 大小有差異這會影響 provisioning 腳本自動生成的地址映射。請仔細閱讀工程的 README確認你使用的是匹配的型號定義STM32H523xx而不是STM32H533xx。準備完成后下一步是檢查 DA 配置文件中的證書鏈是否與你的板卡匹配。提示NUCLEO 開發(fā)板出廠時ST 會在 OTP 區(qū)域寫入與該板卡匹配的調試證書。如果你使用的是原裝 NUCLEO-H533RE 板卡直接用工程默認配置一般沒問題。但如果你的板卡是二手的或者之前被別人燒錄過其他密鑰證書鏈可能已經不匹配了。怎么確認呢你可以用 STM32CubeProgrammer 連接板卡在 OBOption Bytes頁面查看 Debug Authentication 相關的狀態(tài)。正常情況下未 provisioning 的板卡會顯示 “No DA config” 或類似的提示。如果顯示已有配置說明板卡已經不是出廠狀態(tài)建議優(yōu)先恢復出廠配置。2.3 實操provisioning 流程的完整步驟這里我把一個標準的 provisioning 流程走一遍并指出每個步驟的易錯點。第一步編譯 provisioning 工程。在 STM32CubeIDE 中打開工程確認編譯宏定義中含有STM32H523xx或STM32H533xx取決于你的芯片。編譯時注意看輸出如果有任何關于 DA 配置或證書路徑的警告不要忽略。第二步用 STM32CubeProgrammer 連接板卡先做一次全擦除Full Flash Erase。這一步是為了清除可能殘留的舊配置。命令大致如下STM32_Programmer_CLI -c portSWD modeHOTPLUG -e all第三步燒錄 provisioning 所需的初始固件。這個固件通常由工程中預編譯好的.elf或.hex文件提供它會在芯片上電后自動執(zhí)行 DA 配置流程。燒錄命令示例STM32_Programmer_CLI -c portSWD modeHOTPLUG -w provisioning.hex -v第四步斷電并重新上電。這一步非常關鍵因為 provisioning 流程一般在上電后的 boot 階段執(zhí)行。如果執(zhí)行成功串口或調試日志中會輸出類似 “Provisioning done” 的信息。第五步用 STM32CubeProgrammer 的 DA 連接模式重新連接板卡STM32_Programmer_CLI -c portSWD modeHOTPLUG da./DA/config/DA_config.json如果一切正常命令行會輸出認證成功的日志并且芯片恢復可調試狀態(tài)。但如果你遇到的是“DA 成功但無法調試”問題就出在第四步和第五步之間。下面我會專門展開講排查方法。2.4 Provisioning 常見配置誤區(qū)根據(jù)我之前幫人解決這類問題的經驗有幾個配置誤區(qū)出現(xiàn)的頻率特別高第一個是 RDP 等級被誤設為 Level 2。在 STM32CubeProgrammer 的界面里RDP 等級的修改非常容易操作但如果你只是點了一下下拉框選成了 Level 2 并 Apply芯片就永久保護了沒有任何后悔的余地。這一點請務必警惕。第二個是 DA 配置中選擇的 debug 權限錯誤。在 DA 配置文件中有一項專門控制認證后授予的調試權限通常有Full debug、Restricted debug和No debug三個選項。如果你選了 Restricted 或 No debug即使 DA 認證成功調試器也無法讀取 Flash 內容只能執(zhí)行有限的命令。第三個是 provisioning 工程里默認啟用了SECBOOT安全啟動。在 H5 系列中SECBOOT 默認是開啟的它會強制校驗啟動代碼的簽名。如果你后續(xù)要燒錄自己的應用程序而程序沒有經過簽名芯片就會一直卡在啟動校驗階段表現(xiàn)為“能連接但程序不跑”。這雖然不完全是調試口丟失但很容易被誤判為“芯片掛了”。3. 實操過程與核心環(huán)節(jié)實現(xiàn)從鎖死狀態(tài)到恢復調試口的完整記錄3.1 現(xiàn)場現(xiàn)象記錄與初步判斷我手上這塊板子的現(xiàn)象是這樣的provisioning 完成后串口日志顯示 DA 流程成功然后我嘗試用 STM32CubeProgrammer 以 SWD 方式連接結果報錯Error: Connection error或ST-LINK error。重新上電后再試依然連不上。用示波器抓 SWDIO 引腳波形發(fā)現(xiàn)芯片在收到連接請求后完全沒有響應這說明芯片內部的調試端口已經不再響應外部請求。遇到這種情況先別急著判斷“芯片廢了”。按照我的經驗第一步先確認芯片是否還在正常運行。方法很簡單看板載 LED 或者串口輸出。如果芯片主程序還在跑說明 CPU 沒有死只是調試口被關了。如果連程序都不跑那可能是啟動流程卡死了問題可能出在 SECBOOT 或 Option Bytes。我這次遇到的情況是主程序還在跑串口持續(xù)輸出日志但調試口連不上??梢曰炬i定問題在 Debug 權限配置而不是芯片硬件損壞。3.2 恢復嘗試一使用 DA 重新開放調試口既然 DA 流程報告成功那第一反應自然是再用 DA 連一次看看能不能把調試口重新打開。這里需要用到 DA 配置文件。在 NUCLEO-H533RE 的 provisioning 工程中DA/目錄下會生成一個類似DA_config.json的文件里面包含了證書路徑、密鑰路徑和權限設置。用命令行連接時命令是這樣的STM32_Programmer_CLI -c portSWD da./DA/config/DA_config.json如果配置正確你會看到類似下面的輸出Successful DA authentication Debug access granted這說明 DA 認證通過調試權限被重新授予。但在我這次的現(xiàn)象中即便出現(xiàn)了認證成功SWD 連接依然失敗或者只能連接到但立刻斷開。這時候你要小心不要讓“認證成功”的假象誤導判斷。DA 認證成功只能說明證書和密鑰匹配不代表芯片的調試端口真正打開了。如果配置文件中把調試權限設成了 No debug那么認證的結果就是“認證成功但拒絕調試”。3.3 恢復嘗試二檢查并修正 Debug 權限配置如果配置文件中確實存在調試權限設置錯誤那么正確的做法是修改 DA 配置文件把調試權限改回 Full debug然后重新執(zhí)行 DA。具體來說在DA_config.json或者腳本中會有一項類似debug_authorization的字段值通常是full、restricted或none。如果你之前設置的是restricted或none改成full再試一次STM32_Programmer_CLI -c portSWD da./DA/config/DA_config_new.json從實操經驗看如果 provisioning 后立刻發(fā)現(xiàn)調試口異常這一步是最有可能解決問題的。但如果你和我一樣是在 provisioning 完成后的第 N 次上電才發(fā)現(xiàn)的那可能還要處理下面這個更麻煩的情況。3.4 恢復嘗試三回到初始狀態(tài)的“救急方案”如果 DA 配置無法重新打開調試口另一種常用的恢復路徑是利用 H5 系列支持的回歸流程Regression。但這里有個前提芯片的 RDP 等級必須不是 Level 2?;貧w流程的思路很簡單通過 DA 認證后把芯片的 RDP 等級降回 Level 0同時清除所有安全配置。在 STM32CubeProgrammer 中有一個專門的三級回歸按鈕或者在腳本命令中執(zhí)行STM32_Programmer_CLI -c portSWD da./DA/config/DA_config.json obRDP0這個命令的意思是在通過 DA 認證后強制把讀保護等級降到 Level 0。如果成功芯片會進入全擦除狀態(tài)之后你可以重新燒錄代碼一切歸零。注意這個操作會擦除所有 Flash 內容包括 provisioning 配置、密鑰、證書等。所以一旦做了回歸之前的 DA 配置就沒了需要重新 provisioning。如果你的目的只是恢復開發(fā)能力那么這是最徹底的方案。但如果芯片的 RDP 等級已經是 Level 2或者生命周期狀態(tài)已經進入了 LOCKED那么回歸流程基本無法執(zhí)行。這種情況下只能更換芯片。3.5 實操記錄本次問題最終如何解決回到我這次的案例。通過逐項排查最終定位到問題出在Option Bytes中的 Debug 權限位。provisioning 工程在燒錄時默認把調試權限配置成了 restricted導致 DA 認證通過后只能獲得受限調試權限無法讀寫 Flash。解決方法是修改 provisioning 工程中控制 Option Bytes 的配置文件將調試權限改為 full重新編譯并再次執(zhí)行 provisioning。之后 STM32CubeProgrammer 成功連接燒錄恢復正常。多說一句如果你不想重新走一遍 provisioning 流程還有一個臨時繞過方案在發(fā)現(xiàn) DA 成功但連不上調試口時立刻按住板子上的 NRST 復位鍵在復位瞬間嘗試連接 SWD。在某些情況下芯片啟動早期調試口還處于開放狀態(tài)可以利用這個時間窗口執(zhí)行回歸命令。這個技巧的成功率取決于芯片啟動速度和復位時序不是每次都能成功但值得一試。4. 常見問題與排查技巧實錄我踩過的那些坑和對應解法4.1 問題速查表我把 H5 系列上 DA 相關的高頻問題整理成了表格方便你對照排查。現(xiàn)象可能原因排查方法解決思路DA 報告成功但調試口無法連接Debug 權限配置為 restricted/none檢查 DA 配置文件中 debug_authorization 字段修改為 full 并重新執(zhí)行 DADA 認證失敗提示證書不匹配OTP 中的根密鑰與工程證書不匹配檢查板卡是否為原廠 NUCLEO確認是否二次 provisioning更換匹配的 DA 配置或恢復出廠板卡配置芯片完全無響應NRST 后也無法連接RDP Level 2 或生命周期進入 LOCKED嘗試回歸命令查看芯片電源和時鐘如果無法回歸只能更換芯片能連接調試器但程序不跑SECBOOT 啟用導致簽名校驗失敗檢查啟動日志查看 SECBOOT 配置關閉 SECBOOT 或對程序簽名DA 命令執(zhí)行后連接不穩(wěn)定SWD 時序問題或線纜過長降低 SWD 速率使用更短的杜邦線在 STM32CubeProgrammer 中設置頻率為 4MHz 以下4.2 獨家避坑技巧這些細節(jié)沒人告訴你我在折騰 H5 系列安全功能時積累了不少經驗有幾個細節(jié)特別值得拿出來分享。第一個是關于 STM32CubeProgrammer 的版本。DA 功能在不同版本的工具中實現(xiàn)差異很大。老版本可能根本不支持 DA或者支持和 H5 系列的連接方式不同。我建議統(tǒng)一使用最新的 STM32CubeProgrammer至少在 2.14 以上。版本不對DA 流程的成功率和穩(wěn)定性都會打折扣。第二個是 SWD 連接速率。很多人忽略了這個看似無關緊要的參數(shù)。在 provisioning 之后芯片內部可能還殘留了一些安全校驗邏輯如果 SWD 速率過高連接過程中容易出錯表現(xiàn)為“時好時壞”的詭異現(xiàn)象。遇到這種情況先把速率降到 4MHz 以下再試。第三個是要學會利用--modeHOTPLUG連接參數(shù)。HOTPLUG 模式會跳過芯片的啟動流程直接訪問調試端口在芯片卡死在啟動階段時非常有用。很多“連不上”的問題用 HOTPLUG 模式就能繞過。第四個是關于二次 provisioning 的注意事項。如果你已經對芯片做過一次 provisioning重新再燒錄一次 provisioning 工程時必須先執(zhí)行全擦除和回歸否則 DA 配置會疊加導致狀態(tài)混亂。這就像在一個已經裝了系統(tǒng)的硬盤上再裝一次系統(tǒng)不格式化就會沖突。4.3 如何徹底避免我的建議流程經過多次折騰我現(xiàn)在做 H5 系列開發(fā)時已經形成了一套固定的操作流程可以最大程度避免把芯片鎖死的風險。首先在開始任何涉及 provisioning 或 RDP 的操作之前我會先截一個系統(tǒng)當前的 Option Bytes 快照。用 STM32CubeProgrammer 的 OB 頁面導出一個文本文件保存所有選項字節(jié)的當前值。這個文件在你需要恢復現(xiàn)場時是救命稻草。其次第一次燒錄 provisioning 工程時我會故意把 RDP 等級保持在 Level 0先驗證 DA 配置本身是否正常確認 DA 能成功連接并切換調試權限之后再去提升保護等級。不要一上來就全部拉滿給排查留出余地。再次我會把 provisioning 工程和應用程序工程分開管理。provisioning 只負責安全配置和 DA 設置應用程序則是純功能邏輯。這樣可以避免在每次燒錄應用代碼時都去觸碰安全配置減少誤操作的風險。最后如果你真的在一個非常重要的項目上用了 provisioning 并且已經鎖死了芯片建議直接換一片新芯片把鎖死的芯片留著做安全逃生實驗。比起不斷嘗試各種恢復命令浪費的時間一片開發(fā)板芯片的成本其實低得多。5. 延伸思考理解 H5 系列安全模型的底層邏輯5.1 生命周期狀態(tài)機為什么“成功”不一定等于“開放”如果你一路看到這里應該已經理解了 DA 成功和調試口開放不是一回事。為了把這層邏輯徹底講透我再展開說一下 H5 系列的生命周期狀態(tài)機。H5 系列芯片內部維護了一個安全生命周期狀態(tài)機常見狀態(tài)包括STATE_OPEN出廠狀態(tài)調試口完全開放RDP 為 Level 0所有人都能讀寫 Flash。STATE_CLOSED受保護狀態(tài)RDP 至少為 Level 1調試口默認關閉只有通過 DA 認證才能臨時打開調試權限。STATE_LOCKED永久鎖定狀態(tài)所有調試功能禁止DA 也不可恢復只能更換芯片。provisioning 的核心目的就是讓芯片從STATE_OPEN切換到STATE_CLOSED同時把 DA 所需的密鑰和證書寫入 OTP。而 DA 認證的作用則是在STATE_CLOSED狀態(tài)下通過安全握手臨時授予調試權限。注意這里的關鍵詞是“臨時”。每次復位之后調試口都會重新回到關閉狀態(tài)必須再次執(zhí)行 DA 才能打開。這個設計和傳統(tǒng)的 MCU 完全不同。傳統(tǒng) MCU 上你只需要用調試器連上就能讀 Flash而 H5 系列把調試權限拆成了“物理連接”和“安全授權”兩層。很多剛接觸 H5 的人包括我最初都會下意識用傳統(tǒng) MCU 的思路去操作結果就是被安全機制狠狠教育了一番。5.2 DA 的根密鑰體系為什么板卡不能亂用H5 系列的 DA 機制建立在公開密鑰基礎設施PKI之上。ST 在芯片出廠時會在 OTP 區(qū)域寫入一對設備獨有的密鑰對公鑰用于驗證外部 DA 請求的簽名私鑰則永遠不會泄露。為了便于開發(fā)ST 的 NUCLEO 開發(fā)板默認使用 ST 公開的 DA 配置也就是開發(fā)板里的公鑰和 ST 提供的證書是匹配的。所以你直接用工程默認配置就能完成 DA 認證。但如果你用的是自己畫的板子或者從非正規(guī)渠道購買的散料芯片芯片里的根密鑰可能和 ST 公共證書不匹配就必須通過 STM32TrustedPackageCreator 或者其他工具生成對應的密鑰和證書并把公鑰燒錄到芯片的 OTP 中。很多人的“DA 報告成功但無法調試”問題其實就出在這個環(huán)節(jié)可能板卡上的證書已經變了但工程里的配置還是默認的 ST 證書。DA 流程的握手可能已經完成但證書驗證失敗最終授權沒有被芯片接受。如何確認呢在 provisioning 完成前先用 STM32CubeProgrammer 讀一下 OTP 里與 DA 相關的區(qū)域看看里面是否已經有內容。如果已經有內容且不是全 F說明芯片可能已經被動過手腳。5.3 TrustZone 對調試權限的額外影響值得一提的還有 TrustZone。H523 和 H533 都支持 TrustZone而 TrustZone 的啟用狀態(tài)會影響調試權限的分配。啟用 TrustZone 后芯片的 Flash 和 RAM 會被劃分為安全和非安全兩個區(qū)域。調試器可以配置為只允許調試安全區(qū)、只允許調試非安全區(qū)或者兩者都允許。在 provisioning 工程中如果只給非安全區(qū)授予了調試權限而你的應用程序跑在安全區(qū)就會遇到“能連上但看不到程序”的詭異問題。這種情況的排查方法相對簡單在 DA 配置或調試器的選項中把安全區(qū)和非安全區(qū)的調試權限都打開。在 STM32CubeProgrammer 里連接設置中一般有Secure debug和Non-secure debug的選項確保兩者都勾選。5.4 H5 系列安全開發(fā)的技術選型建議我把前面所有經驗匯成幾句直接的建議。如果你的項目中使用的芯片需要防止代碼被讀取又希望保留后續(xù)現(xiàn)場調試的能力那么 H5 系列的 DA 機制是目前 MCU 里做得比較完善的方案。但前提是你必須理解 DA 的工作機制并且不要把 RDP Level 2 當成“安全感的來源”。Level 2 意味著徹底的鎖定調試口和回歸路徑都沒有了。如果你的項目只是常規(guī)的固件開發(fā)不涉及代碼保護那我建議暫時不要碰 provisioning 和 RDP保持出廠狀態(tài)即可。安全功能的調試復雜度會顯著拖慢開發(fā)進度確實沒必要為了“顯得專業(yè)”去折騰。如果你的團隊有多個開發(fā)人員共用一塊板子建議為每個開發(fā)人員準備獨立的 NUCLEO 板卡。因為 DA 配置和板卡綁定換人調試時證書不匹配又會出現(xiàn)“DA 成功但連不上”的問題。6. 一些額外的操縱技巧和注意事項6.1 利用 STM32TrustedPackageCreator 生成自定義密鑰如果你需要在自己的板卡上啟用 H5 系列的安全功能就不能依賴 ST 的默認證書需要自己生成一套密鑰和證書。這個過程使用的是 STM32TrustedPackageCreator 工具它在安裝 STM32CubeProgrammer 時會一并安裝。具體操作流程是打開 STM32TrustedPackageCreator選擇對應的芯片型號然后在 DA 配置頁面生成新的密鑰對和證書。生成后會得到一組.pem格式的證書文件和.key格式的私鑰文件。這些文件需要在 provisioning 工程中逐一引用。這里有個非常關鍵的細節(jié)生成的公鑰必須提前燒錄到芯片的 OTP 區(qū)域否則芯片在驗證 DA 請求時無法找到匹配的證書。這個燒錄動作可以放在 provisioning 流程的第一步或者通過 Option Bytes 設置完成。我在測試中發(fā)現(xiàn)很多人忘記這一步導致 DA 認證一直失敗卻把鍋甩給 ST 的工具其實問題出在自己的操作順序上。6.2 如何安全地用一個 DA 配置同時管理多塊板卡實際項目中很多時候你需要同時管理多塊板卡讓它們能夠通過同一個 DA 配置進行調試。這個需求完全可以實現(xiàn)方法是在生成密鑰對時把同一個公鑰燒錄到所有板卡的 OTP 中。這樣做的風險是一旦某塊板卡丟失持有私鑰的人就可以通過 DA 獲取調試權限。所以在生產環(huán)境中公鑰燒錄和私鑰保管需要嚴格分離。私鑰應該存放在安全的管理員環(huán)境中普通開發(fā)人員只使用 DA 請求工具不接觸私鑰文件。6.3 調試口丟失后的幾條實用操作建議如果你現(xiàn)在正面對一塊“DA 成功但無法調試”的板卡我最后給你幾個直接可操作的建議。無論如何先把 DA 配置文件檢查一遍確認 debug 權限是 full。這一步可以用五分鐘完成卻能解決一半以上的問題。然后用 HOTPLUG 模式加低速率連接試一次。注意是 HOTPLUG 模式不是普通的 SWD 連接。很多連不上的情況在 HOTPLUG 模式下都能連接成功。再試試在復位瞬間發(fā)送 DA 請求。具體方法是在 STM32CubeProgrammer 的 DA 配置界面點擊執(zhí)行 DA 的同時手動按下板卡的 NRST 按鍵。這種“雷電操作”雖然成功率不穩(wěn)定但在某些時序條件下可以抓住芯片啟動早期的調試窗口。如果以上都不行那么老老實實做回歸操作。但前提是芯片的 RDP 等級不是 Level 2。如果已經是 Level 2那就直接換芯片吧不要在這塊芯片上繼續(xù)浪費時間了。以我個人實際折騰 H5 系列的經驗最不值當?shù)淖龇ň褪窃谝粋€已經鎖死的芯片上反復嘗試各種恢復命令。芯片單價不高時間成本高。鎖死了就換一片把原始問題記錄清楚下次燒錄前檢查好配置這才是最提高生產力的路徑。