nxpSecBoot是一個專為NXP MCU安全加密啟動而設計的工具,其特性與NXP MCU里BootROM功能相對應,目前主要支持i.MXRT系列MCU晶元,與NXP官方提供的標準安全加密配套工具集(OpenSSL, CST, sdphost, blhost, elftosb, BD, MfgTo... ...
nxpSecBoot
1 軟體概覽
1.1 介紹
nxpSecBoot是一個專為NXP MCU安全加密啟動而設計的工具,其特性與NXP MCU里BootROM功能相對應,目前主要支持i.MXRT系列MCU晶元,與NXP官方提供的標準安全加密配套工具集(OpenSSL, CST, sdphost, blhost, elftosb, BD, MfgTool2)相比,nxpSecBoot是一個真正的一站式工具,一個工具包含NXP官方所有加密配套工具的功能,並且是全圖形用戶界面操作。藉助於nxpSecBoot,你可以輕鬆上手NXP MCU安全加密啟動。
nxpSecBoot主要功能如下:
- 支持i.MXRT全系列MCU,包含i.MXRT1021、i.MXRT1051/1052、i.MXRT1061/1062、i.MXRT1064 SIP
- 支持UART和USB-HID兩種串列下載方式
- 支持.elf和.srec兩種格式的源image文件輸入
- 支持將源image文件自動轉換成Bootable image
- 支持下載Bootable image進主動啟動設備 - FlexSPI NOR、SEMC NAND介面Flash
- 支持下載Bootable image進備份啟動設備 - LPSPI介面NOR/EEPROM Flash
- 支持基於HAB實現的安全加密啟動(單簽名,簽名和加密)
- 支持基於BEE實現的安全加密啟動(唯一SNVS key,用戶自定義key)
- 支持基於HAB和BEE聯合實現的安全加密啟動(HAB簽名 & BEE加密)
- 支持MCU晶元內部eFuse的回讀和燒寫操作(即專用eFuse燒寫器)
- 支持啟動設備的任意讀寫擦操作(即通用Flash編程器)
- 支持從啟動設備回讀已下載的Bootable image數據,並對數據組成部分進行標註
1.2 下載
nxpSecBoot完全基於Python語言開發,並且源代碼全部開源,其具體開發環境為Python 2.7.14、wxPython 4.0.3、pySerial 3.4、bincopy 15.0.0、PyInstaller 3.3.1。
nxpSecBoot在發佈時藉助PyInstaller將所有的Python依賴全部打包進一個可執行文件(\nxp-sec-boot-ui\bin\nxpSecBoot.exe),因此如果不是對nxpSecBoot的二次開發,你不需要安裝任何Python軟體及相關庫。
Note: 源代碼包里的nxpSecBoot.exe是在Windows 10 x64環境下打包的,也僅在該環境下測試過,如果因系統原因無法直接使用,你需要安裝相應的Python開發環境,併在\nxp-sec-boot-ui\bin\目錄下執行“pyinstaller .\nxpSecBoot.spec”命令重新生成nxpSecBoot.exe可執行文件。
1.3 安裝
nxpSecBoot是一個是純綠色免安裝的工具,下載了源代碼包之後,直接雙擊\nxp-sec-boot-ui\bin\nxpSecBoot.exe即可使用。使用nxpSecBoot沒有任何軟體依賴,不需要額外安裝任何軟體。
Note: nxpSecBoot安裝包文件夾不能放置在含空格或中文的路徑下,否則軟體無法正常工作。
1.4 目錄
nxpSecBoot軟體目錄組織如下:
\nxp-sec-boot-ui
\apps --放置示例的源image文件
\bin --放置nxpSecBoot可執行文件及PyInstaller打包描述文件
\doc --放置NXP官方安全啟動相關的參考文檔
\gen --放置nxpSecBoot使用過程中生成的臨時文件
\bd_file --根據配置動態生成的BD文件
\bee_crypto --BEE加密過程中生成的文件
\bootable_image --生成的bootable image文件
\hab_cert --HAB簽名過程中生成的文件
\hab_crypto --HAB加密過程中生成的文件
\user_file --軟體運行過程中緩存的臨時文件
\gui --放置開發nxpSecBoot UI構建工程文件
\img --放置nxpSecBoot使用過程中需載入的圖片
\src --放置開發nxpSecBoot的所有Python源代碼文件
\tools --放置nxpSecBoot使用過程中需調用的外部程式
\blhost --與Flashloader通信的上位機命令行工具
\cst --HAB加密的配套命令行工具
\elftosb --生成bootable image的命令行工具
\image_enc --BEE加密的配套命令行工具
\openssl --生成證書和秘鑰的標準工具
\sdphost --與ROM通信的上位機命令行工具
1.5 界面
下圖為nxpSecBoot工具的主界面,界面主要由六部分組成,各部分功能如下:
- 【Menu Bar】:功能菜單欄,提供軟體通用設置。
- 【Target Setup】:目標設備設置欄,提供MCU Device和Boot Device配置選項。
- 【Port Setup】:串列介面設置欄,選擇用於連接MCU Device的介面。
- 【Device Status】:目標設備狀態信息欄,當連接上目標設備之後,用於顯示目標設備的狀態。
- 【Main Window】:安全加密啟動主界面,提供對目標設備做安全加密啟動的所有操作。
- 【Log Window】:操作日誌欄,記錄軟體操作日誌。
2 準備工作
在使用nxpSecBoot工具前主要有兩個準備工作:一、準備好i.MXRT硬體板以及串列下載連接線(USB/UART);二、準備好用於下載進Flash的源image文件。
關於串列下載線連接,需要查看i.MXRT參考手冊System Boot章節,確保連接的UART/USB引腳是BootROM指定的。
關於源image文件準備,nxpSecBoot工具主要能識別.elf(.out)/.srec(.s19)兩種格式的image,源image文件尾碼必須設為上面4種之一,否則nxpSecBoot無法識別。另外需要註意的是源image中不需要包含任何i.MXRT載入啟動所需要的頭(IVT, BootData等),nxpSecBoot會自動添加i.MXRT載入啟動所需的文件頭。
以NXP官方SDK為例進一步講解源image文件的生成,註冊並登錄NXP官網,來到 MCUXpresso SDK Builder 頁面,選擇合適的MCU晶元以及IDE(以RT1060晶元,IAR IDE為例)並點擊Download SDK後便可得到SDK_2.4.0_EVK-MIMXRT1060.zip。
使用IAR打開SDK包里的\boards\evkmimxrt1060\demo_apps\led_blinky\iar\led_blinky.eww示例應用:
led_blinky應用其實包含了三個工程(ram/flexspi_nor/sdram),分別對應三個不同的linker文件(.icf),其中ram工程生成的image即是所謂的Non-XIP image,flexspi_nor工程生成的image即是所謂的XIP image。
預設情況下,ram工程和flexspi_nor工程生成的image文件是無法直接為nxpSecBoot所用的,需要做一些小小的改變。
ram工程需要修改linker文件如下:(推薦從0x3000開始鏈接中斷向量表,中斷向量表前面預留一段記憶體用於放置i.MXRT載入啟動所需的文件頭)。
define symbol m_interrupts_start = 0x00003000; // 0x00000000
define symbol m_interrupts_end = 0x000033FF; // 0x000003FF
define symbol m_text_start = 0x00003400; // 0x00000400
define symbol m_text_end = 0x0001FFFF;
define symbol m_data_start = 0x20000000;
define symbol m_data_end = 0x2001FFFF;
define symbol m_data2_start = 0x20200000;
define symbol m_data2_end = 0x202BFFFF;
flexspi_nor工程需要修改工程配置選項里的Defined symbols如下:(將XIP_BOOT_HEADER_ENABLE設為0,即不需要生成包含i.MXRT載入啟動文件頭的image)。
如果只是為了快速驗證nxpSecBoot工具,在nxpSecBoot\apps文件夾下預設存放了全系列恩智浦官方i.MXRT評估板的led_blinky應用的image文件。
3 軟體使用
3.1 設置目標設備
在使用nxpSecBoot時首先需要配置目標設備,目標設備包括MCU Device和Boot Device。以NXP官方開發板EVK-MIMXRT1060為例,該開發板主晶元為i.MXRT1062DVL6A,所以【MCU Device】應設為i.MXRT106x。且以最常用的FlexSPI NOR啟動為例,【Boot Device】設為FLEXSPI NOR,開發板上對應的外部存儲晶元為IS25WP064AJBLE,其是一顆常用的四線QSPI NOR Flash,我們需要在軟體里進一步配置該Boot Device,單擊【Boot Device Configuration】按鈕可彈出如下新的配置頁面:
在彈出的名為FlexSPI NOR Device Configuration頁面里可以看到很多描述Multi-IO SPI NOR Flash特性的選項,比如Device Type、Query Pads等,這些選項都需要被正確地設置,以與開發板上的外部存儲晶元相匹配。
除此以外,頁面上還有一個名為【Use Typical Device Model】的選項,nxpSecBoot軟體預先定義了一些常用的Multi-IO SPI NOR Flash型號模型,如果開發板上的外部存儲晶元恰好在軟體預定義的型號列表裡,那麼你可以直接在【Use Typical Device Model】選擇對應型號,而不必在Nor Option里逐一配置。
EVK-MIMXRT1060開發板上的IS25WP064AJBLE晶元屬於ISSI - IS25LP064A大類,因此我們只需要在【Use Typical Device Model】選擇ISSI - IS25LP064A並點擊【Ok】即完成了目標設備的設置。
3.2 連接目標設備
設置好目標設備之後,下一步便是連接目標設備,以USB-HID介面連接為例,給EVK-MIMXRT1060板子供電,並用USB Cable將PC與J9口連接起來,如果一切正常,應該可以在設備管理器找到vid,pid為0x1fc9,0x0135的HID-compliant vendor-defined device設備被枚舉。如果沒有發現該HID設備,請仔細檢查板子SW7撥碼開關是否將Boot Mode設為2'b01即Serial Downloader模式。
確認HID設備存在之後,在【Port Setup】選中USB-HID,然後直接點擊【Connect to ROM】按鈕,此時軟體便會自動完成目標設備連接全過程(使用sdphost連接ROM,獲取一些MCU內部寄存器信息,使用sdphost載入Flashloader並跳轉過去,使用blhost連接Flashloader,獲取一些eFuse信息,使用blhost去配置boot device並獲取boot device meomry信息),這個過程需要大概5s的時間,如果目標設備連接正常,你可以看到指示燈變藍,並且【Connect to ROM】按鈕標簽變為【Reset Device】。如果目標設備連接失敗,指示燈會變紅,並且【Connect to ROM】按鈕標簽變為【Reconnect】。
目標設備連接成功後可以在目標設備狀態信息欄看到一些有用的設備狀態信息,比如MCU晶元的UUID值、HAB狀態、與啟動相關的重要Fuse值,Boot Device的Page/Sector/Block大小等。
3.3 安全加密啟動
目標設備連接成功後便可以開始最核心的安全加密啟動操作,在做安全加密啟動之前先來介紹安全加密啟動主界面分佈:
- 【Image Generation Sequence】:image生成視窗,用於對源image進行加密安全處理,生成可放在Boot Device中的bootable image
- 【Image Loading Sequence】:image下載視窗,用於將生成的bootable image下載進Boot Device中,並且在MCU中燒錄相應的Fuse值(各種Key,HAB設置等)
- 【eFuse Operation Utility】:eFuse回讀與燒錄視窗,用戶可燒錄自定義值進Fuse Region。
- 【Boot Device Memory】:image回讀與標註顯示視窗,用於從Boot Device回讀已下載的Bootable image數據,並對數據組成各部分進行標註
- 【Secure Boot Type】:安全加密模式選擇,選擇想要安全模式(不使能安全,HAB單簽名,HAB簽名加密,BEE加密)。
- 【All-In-One Action】:一鍵操作,image生成視窗和image下載視窗里激活的操作自動按序執行
3.3.1 模式一:不啟用任何安全措施
第一種模式是最簡單的模式,即不啟動任何安全措施,一般用於產品開發調試階段。
【Secure Boot Type】選擇“Unsigned (XIP) Image Boot”,然後點擊【Browse】按鈕選擇一個原始image文件(使用IDE生成的裸.elf/.srec文件即可,不需要包含任何i.MXRT啟動所需的額外文件頭),點擊【All-In-One Action】按鈕即可完成bootable image生成與下載所有操作。
上圖中Step4和Step5並不是必需操作,僅是用於確認【All-In-One Action】按鈕操作是否成功,尤其是Step5操作,可以對應image下載視窗里顯示的Bootable image構成圖做一遍檢查。
一切操作無誤,板子上SW7撥碼開關將Boot Mode設為2'b10即Internal Boot模式,其餘保持全0,重新上電便可以看到unsigned image正常執行了。
3.3.2 模式二:啟用HAB簽名認證
第二種模式是初級的安全模式,即僅對image進行簽名認證,一般用於對產品安全性要求較高的場合。簽名認證主要是對image合法性進行校驗,檢測image是否被異常破壞或篡改,如果檢測發現image不合法,那麼MCU便不會啟動執行該image。
【Secure Boot Type】選擇“HAB Signed (XIP) Image Boot”,然後輸入serial(必須是8位數字)以及key_pass(任意長度字元)後點擊【Advanced Cert Settings】按鈕配置所有簽名認證的參數(熟悉 NXP官方HAB Code Signing Tool工具 使用的朋友應該對這些設置很熟悉),再點擊【Browse】按鈕選擇一個原始image文件,最後點擊【All-In-One Action】按鈕即可完成bootable image生成與下載所有操作。
上圖中Step5主要確認兩點:一、HAB狀態是否是Closed的(Fuse 0x460[31:0]的bit1為1'b1);二、SRKH是否被正確燒錄(Fuse 0x580 - 0x5f0,一共256bit,即sha-256演算法),SRKH是最終bootable image里CSF數據里的Public RSA Key的Hash值,用於校驗Public RSA Key是否合法。
一切操作無誤,板子上SW7撥碼開關將Boot Mode設為2'b10即Internal Boot模式,其餘保持全0,重新上電便可以看到HAB signed image正常執行了。
因為此時MCU晶元HAB狀態已經是Closed,並且SRKH已經被燒錄無法更改,所以未經簽名認證的image無法正常運行,在軟體目錄\nxp-sec-boot\tools\cst\3.0.1\crts文件夾下存放著Private RSA Key文件,請妥善保存好,一旦遺失,那麼新的image將無法被正確簽名從而導致HAB認證失敗無法被啟動執行。
3.3.3 模式三:啟用HAB簽名認證與HAB加密
第三種模式是中級的安全模式,即對image進行簽名認證以及HAB級加密,一般用於對產品安全性要求很高的場合。簽名認證主要是對image合法性進行校驗,而加密則可以保護image在外部Boot Device中不被非法盜用,因為在外部Boot Device中存放的是image的密文數據,即使被非法獲取也無法輕易破解,並且加密是和MCU晶元綁定的,因為HAB加密過程中使用了MCU內部SNVS模塊里的唯一Master Secret Key。
【Secure Boot Type】選擇“HAB Signed Encrypted Image Boot”,然後配置所有簽名認證的參數(如果本地已有證書,可以不用配置,軟體會嘗試復用),再點擊【Browse】按鈕選擇一個原始image文件,最後點擊【All-In-One Action】按鈕即可完成bootable image生成與下載所有操作。
上圖中Step6操作之後可以看到下載進Boot Deivce里的image部分確實是密文,實際上HAB加密僅支持加密image區域,其他區域(比如FDCB、IVT、Boot Data等)均沒有加密。
一切操作無誤,板子上SW7撥碼開關將Boot Mode設為2'b10即Internal Boot模式,其餘保持全0,重新上電便可以看到HAB signed encrypted image正常執行了。
你可能會好奇,既然image是經過HAB加密的,那麼密碼在哪裡?怎麼設置的?其實image加密操作完全被HAB配套工具封裝好了,HAB加密使用的AES-128演算法,其對應的128bits的AES-128 Key不是由用戶自定義的,而是HAB加密工具自動隨機生成的,並且每一次加密操作生成的AES-128 Key都是不一樣的,即使你沒有更換輸入的原始image。AES-128 Key保存在\nxp-sec-boot\gen\hab_crypto\hab_dek.bin文件里。
從上圖中image下載視窗里顯示的Bootable image構成圖裡可以看出,相比HAB單簽名的方式,HAB簽名加密方式最終使用的Bootable image的最後多了一個DEK KeyBlob組成部分,這個DEK KeyBlob是通過MCU晶元內部SNVS模塊里的Master Secret Key對hab_dek.bin里的key數據進行動態加密生成的,因為Master Secret Key是晶元唯一的,因此DEK KeyBlob也是晶元唯一的,這是保護image不被非法盜用的關鍵。
關於HAB加密為何不支持XIP Image,其實簡單分析一下啟動原理便清楚,Image在Boot Device里存儲的是密文,這部分密文必須要經過HAB解密成明文才可以被CPU執行,因此必須要指定不同的存儲空間去存放Image明文,Non-XIP image天然指定了明文應存放在晶元內部SRAM或者外掛SDRAM中,而XIP Image是在Boot Device中直接執行的,一般明文地址與密文地址是相同的,因此HAB加密不支持XIP Image。
3.3.4 模式四:啟用單引擎BEE加密(唯一SNVS Key)
第四種模式是高級的安全模式,即用唯一SNVS Key對image進行單引擎BEE級加密,一般用於對產品安全性要求極高的場合。BEE加密與HAB加密的主要區別是執行解密操作的主體不同,主要有如下三點區別:
- HAB加密是由BootROM里的HAB將加密後的image全部解密成明文另存後再執行(靜態解密),而BEE加密是由MCU晶元內部的BEE模塊對加密後的image原地邊解密邊執行(動態解密)。
- HAB加密僅支持Non-XIP Image(不限Boot Device),而BEE加密僅支持XIP在FlexSPI NOR中的Image。
- HAB加密區域不可指定(預設全部用戶Image區域),而BEE加密的區域可由用戶指定。
【Secure Boot Type】選擇“BEE (Signed) Encrypted XIP Image Boot”,點擊【Browse】按鈕選擇一個原始image文件(必須是XIP在FlexSPI NOR中的image),【Key Storage Region】選擇“Fixed SNVS Key”後點擊【Advanced Key Settings】按鈕配置所有BEE加密的參數,最後點擊【All-In-One Action】按鈕即可完成bootable image生成與下載所有操作。
上圖中Step5操作主要確認一點:BEE_KEY0_SEL是否設置的是From OTPMK[255:128](Fuse 0x460[31:0]的bit13,12為2'b10)。Step6操作之後可以看到下載進Boot Deivce里的Bootable image從IVT開始全是密文,本示例僅啟用一塊加密區域,具體對哪些區域進行加密是在【Advanced Key Settings】里指定的,最大支持指定3塊加密區域。
一切操作無誤,板子上SW7撥碼開關將Boot Mode設為2'b10即Internal Boot模式,並且將BT_CFG[1]設為1'b1(使能Encrypted XIP),其餘保持全0,重新上電便可以看到BEE encrypted image正常執行了。
BEE加密相比HAB加密是要更安全的,因為HAB加密畢竟是靜態解密,當HAB解密完成之後在SRAM/SDRAM中存儲的是全部的image明文,如果此刻黑客去非法訪問SRAM/SDRAM是有可能獲取全部image明文的;而BEE加密是動態解密,CPU執行到什麼地方纔會去解密什麼地方,任何時候都不存在完整的image明文,黑客永遠無法獲取全部的image明文。
3.3.5 模式五:啟用雙引擎BEE加密(用戶自定義Key)
第五種模式也是高級的安全模式,即用用戶自定義Key對image進行雙引擎BEE級加密,跟第四種模式(單引擎)原理類似,一般用於對產品安全性要求極高的場合。單引擎BEE加密與雙引擎BEE加密具體區別如下:
- 唯一SNVS Key單引擎BEE加密預設使用SNVS Key,晶元出廠已預先燒錄,無法更改;用戶自定義Key雙引擎BEE加密使用的Key是由用戶自己設的,需要手動燒錄在Fuse SW_GP2和GP4區域。
- 唯一SNVS Key單引擎BEE加密只啟用了BEE引擎0;用戶自定義Key雙引擎BEE加密可以同時啟用BEE引擎0和引擎1。但需要註意的是無論啟動幾個BEE引擎,最大加密區域總數均是3個。
【Secure Boot Type】選擇“BEE (Signed) Encrypted XIP Image Boot”,點擊【Browse】按鈕選擇一個原始image文件(必須是XIP在FlexSPI NOR中的image),【Key Storage Region】選擇“Flexible User Keys”後點擊【Advanced Key Settings】按鈕配置所有BEE加密的參數,最後點擊【All-In-One Action】按鈕即可完成bootable image生成與下載所有操作。
有必要對如下使用Flexible User Keys加密的BEE參數設置頁面再做一下介紹,首先是選擇要激活的BEE引擎,可以單獨激活BEE引擎0,也可以單獨激活BEE引擎1,當然更可以同時激活BEE引擎0和1,本示例同時激活BEE引擎0和1。指定了BEE引擎後需要進一步為該引擎配置加密所使用的Key的存儲空間以及需要用戶手動輸入Key(128bits)。最後還需要設置加密保護的區域,本示例共使能加密2個區域,分別為0x60001000 - 0x60001fff(由BEE引擎0保護),0x60002000 - 0x60002fff(由BEE引擎1保護)。
上圖中Step5操作主要確認兩點:一、BEE_KEY0_SEL是否設置正確(Fuse 0x460[31:0]的bit13,12)和BEE_KEY1_SEL是否設置正確(Fuse 0x460[31:0]的bit15,14);二、用戶Key是否被正確燒錄(SW_GP2: Fuse 0x690 - 0x6c0,GP4: Fuse 0x8c0 - 0x8f0)。
為了確認image是否按指定區域加密,你可以打開\nxp-sec-boot\gen\bootable_image\文件夾下麵生成的未加密bootable image文件與image回讀視窗里的內容進行比對。
一切操作無誤,板子上SW7撥碼開關將Boot Mode設為2'b10即Internal Boot模式,並且將BT_CFG[1]設為1'b1(使能Encrypted XIP),其餘保持全0,重新上電便可以看到BEE encrypted image正常執行了。
雙引擎BEE加密是將用戶自定義的Key燒錄進了Fuse SW_GP2/GP4區域里,但該區域的Fuse內容是可以回讀的,如果黑客拿到Key,還是有可能破解存在外部Boot Device里的image密文,有沒有對Fuse SW_GP2/GP4區域進行保護的方法?當然有,你可以對指定的Fuse區域進行加鎖,可設置Fuse區域訪問許可權(讀保護,防寫,覆蓋保護),具體後面有單獨章節詳細介紹。
雙引擎BEE加密相比單引擎BEE加密,從破解角度來說難度加倍,畢竟可以啟用兩組不同的Key來共同保護image不被非法獲取。
3.3.6 模式六:啟用HAB簽名認證與BEE加密
第六種模式是頂級的安全模式,即對image進行HAB簽名認證以及BEE級加密(單引擎/雙引擎均可),一般用於對產品安全性要求最高的場合。模式四以及模式五均只有加密功能,並沒有對image進行合法性檢測,引入HAB簽名認證可以解決image合法性問題。
【Secure Boot Type】選擇“BEE (Signed) Encrypted XIP Image Boot”,【Enable Certificate For BEE Encryption】選擇“Yes”並點擊【Advanced Cert Settings】按鈕配置所有簽名認證的參數,點擊【Browse】按鈕選擇一個原始image文件(必須是XIP在FlexSPI NOR中的image),【Key Storage Region】選擇“Fixed SNVS Key”或者“Flexible User Keys”均可並點擊【Advanced Key Settings】按鈕配置所有BEE加密的參數,最後點擊【All-In-One Action】按鈕即可完成bootable image生成與下載所有操作。
一切操作無誤,板子上SW7撥碼開關將Boot Mode設為2'b10即Internal Boot模式,並且將BT_CFG[1]設為1'b1(使能Encrypted XIP),其餘保持全0,重新上電便可以看到BEE encrypted image正常執行了。
需要特別註意的是,因為引入了HAB簽名認證,如果BEE加密Key選擇的是Fixed SNVS Key,需要在HAB Closed的狀態下執行上述操作,否則會啟動失敗,這是HAB與BEE聯合使用的限制。
4 軟體進階
nxpSecBoot軟體打開預設工作在Entry Mode下,可通過功能菜單欄Tools->Option選擇進入Master Mode,在Master模式下開放了一些高級功能,適用於對NXP MCU晶元以及Boot ROM非常熟悉的用戶。
4.1 分步連接設備
進入Master模式下,可以不勾選One Step選項,這樣可以單步去連接目標設備,單步連接的主要意義在於,可以在不配置Boot Device的情況下僅連接到Flashloader去實現eFuse操作。
4.2 專用eFuse燒寫器
進入Master模式下,可以看到eFuse全部區域都開放了,你可以任意燒寫指定的eFuse區域。eFuse操作是按bit一次性的(類似熔絲燒斷),只能將0燒寫成1,燒錄成1之後便無法更改,所以eFuse的操作需要特別謹慎。
在上一章節安全加密啟動過程中,我們會燒錄SRKH(0x580 - 0x5f0)、SW_GP2(0x690 - 0x6c0)、GP4(0x8c0 - 0x8f0),這些區域一經燒錄便不得更改,甚至我們希望這些區域不僅不能被更改,也要不能被回讀。
從上圖可知eFuse 0x400即是各Fuse功能區域的Locker,我們可以通過燒錄eFuse 0x400來鎖住SRKH, SW_GP2, GP4區域。那麼如何燒錄呢?其實非常簡單,直接在各eFuse框內填寫想要燒錄的值,點擊【Burn】按鈕即可。
4.3 通用Flash編程器
進入Master模式下,可以點擊【Read】、【Erase】、【Write】按鈕實現已配置Flash的任意讀擦寫操作,這樣可以將nxpSecBoot工具當做通用Flash編程器。