RT1052 RT1060 BEE 加密XIP運行 燒錄 目錄
一. 兩種BIN文件的產生
1.1生產用Bin文件包括BootLoader和App兩部分合成
1.2升級用BIN文件
二.加密5種模式
三.使用NXP-MCUBootUtility.exe工具加密燒錄
四.加密升級文件生成
五.需要注意的問題
一. 兩種BIN文件的產生
1.1生產用Bin文件
生產用Bin文件包括BootLoader和App兩部分合成
工程目錄:
bootloader:xxx\bootloader\mdk。----產生bootloader.bin文件。
App: xxx\project\mdk。 --------產生UpgradeV001.bin文件(采用升級功能配置)。
生成文件需要在工程改動的地方:appmain.c中修改版本號bootloader工程中將版本號放在一個固定地址處。
一. 兩種BIN文件的產生
1.1生產用Bin文件
生產用Bin文件包括BootLoader和App兩部分合成
工程目錄:
bootloader:xxx\bootloader\mdk。----產生bootloader.bin文件。
App: xxx\project\mdk。 --------產生UpgradeV001.bin文件(采用升級功能配置)。
生成文件需要在工程改動的地方:appmain.c中修改版本號
static const char pcbWareVersion[DEVINFOLENGTHMAX] = "xxxMB_P003 "; ///<硬件版本號數組
static const char progVersion[DEVINFOLENGTHMAX] = "PROGV001"; ///<軟件版本號數組
bootloader工程中將版本號放在一個固定地址處,此處暫時沒有做。
static const char bootVersion[DEVINFOLENGTHMAX] = "BOOTV001"; ///<boot版本號數組
DCD.bin文件產生:
首先從CGA_bootloader.bin提取DCD.bin (offset 0x1030 - 0x1443)文件保存到電腦。
合成供加密生產用bin文件步驟:
CGA_bootloader.bin和CGUpgrade.bin兩個文件使用16進制編輯工具(HxDx64.exe)合到一起。
注意CGA_bootloader.bin若不足0x7FFF則填充0XFF到0x7FFF;后面緊跟CGUpgrade.bin。 然后,將前0x1FFF數據刪除,保存,
此時的Bin文件才能提供給NXP-MCUBootUtility.exe加密,燒錄。
本方法適用於生產。
非加密燒錄步驟:
1.設置DCD文件路徑:
- 選中非加密,同時在Tools中選擇Entry mode:
-
- 選擇合成后的升級文件:
-
加密后和加密前,img的組成分別如下圖:
-
-
升級用BIN文件
CGUpgrade.bin,采用升級功能配置的工程產生,不需要額外修改,可以直接當做升級文件。啟動地址是0x60008000。
- 加密模式有5種,請參考專門的博客:https://www.cnblogs.com/henjay724/p/10047071.html
-
根據我們加密升級的具體需求,我們選擇模式5,且是自定義KEY,方便保管。
我們會燒錄SRKH(0x580 - 0x5f0)、SW_GP2(0x690 - 0x6c0)、GP4(0x8c0 - 0x8f0),這些區域一經燒錄便不得更改,甚至我們希望這些區域不僅不能被更改,也要不能被回讀
-
使用NXP-MCUBootUtility.exe工具加密燒錄
在軟件主界面,按如下配置,選擇'BEE Encrypted Image Boot',選中Bootloader_App.bin,格式選擇Raw Binary,並且Base Address填0x60002000,然后點擊【Advavced Key Settings】
-
在Flexible Key Setting頁面,如果你是RT105x,只需要設置User Key Data(可自己手動輸入32個hex,也可點擊下方Generate Random Key生成隨機Key)和Protected Region x Start/Length,其余保持不變。
為了方便升級,建議統一為:User key Data:xxxxxxxxxxxxxxxx
-
關於Protected Region,使用默認Region 0就可以了,Start和length即是你想加密的范圍。
1. 如果你想加密全部的bootloader和app,那么start設為0x60002000, 長度即你的Boot_PROGSVN00000V001runOk.bin長度減去8KB,然后再做4KB對齊,即0x51000。
-
如果你只想加密app,那么start應設為0x60008000,長度即你的Boot_PROGSVN00000V001runOk.bin長度減去32KB,然后再做4KB對齊,即0x4B000。
配置完成,點擊【All-In-One Action】按鈕,BEE加密就完成了,也下載到rt1052了
四.加密升級文件UpgradeV001步驟
bootloader只能接收事先加密好的Upgrade,因此你需要事先將Upgrade做一次加密,可利用\NXP-MCUBootUtility\tools\image_enc\win\image_enc.exe這個命令行工具,也可以直接用NXP-MCUBootUtility,菜單欄進入Tools/Option,選擇Master mode。
然后選擇你的Upgrade.bin(注意是裸binary,不要任何頭,binary起始就是SP, PC),【Advanced Key Settings】里加密參數與前一封郵件里設置一致,然后分別點擊
【Generate Unsigned bootable image】和【Encrypt Bootable Image】按鈕,結束之后找到\NXP-MCUBootUtility\gen\bootable_image\App_unsigned_bee_encrypted.bin文件,
該文件里偏移0x8000之后的數據即是你要的加密好的app數據,扣出來用即可。
利用CGA上位機手動刷固件注意:應該把makeFirmware轉換后的os放入目錄:******\firmware,否則不能升級。
五.使用rt-flash燒錄
上一個章節可以生成4個sb文件如下:
BOOT_PROGV018_unsigned_bee_encrypted_flexspinor_0xc0000007_0x0.sb
BOOT_PROGV018_unsigned_bee_encrypted_flexspinor_0xc0000007_0x0_efuse.sb
BOOT_PROGV018_unsigned_bee_encrypted_flexspinor_0xc0000007_0x0_flash.sb
burn_efuse.sb
六.需要注意的問題
5.0注意:目前測試是必須在燒錄板子的過程中產生sb文件。
5.1加密燒錄后還不能順利啟動,啟動還需要置位一個boot cfg pin,如果是RT105x,應該是GPIO_B0_05,將這個pin拉高,然后POR復位。此方法不方便采用,可以參考下面的方法。
加密燒錄后還不能順利啟動,不采用5.1方法,還有燒錄fuse的方法可以替代。置位Boot cfg pin一般是在產品調試階段使用。
設置fuses兩個: 0x450[1]和0x460[23:22][20][18][4] 設置為1,
即分別是0x00000002和0x00D40010。
0x460[18] 1-SDP READ_REGISTER is disabled
0x460[17] 1 - No serial download support
補充:
0x460[23:22] 11 - No debug mode
0x460 1 - JTAG is disabled
研發階段的設置(不禁止串口下載模式和JTAG):
0x450和0x460分別設置為:0x00000002和0x00000010
燒錄了fuse啟動,依舊可以運行非加密image,RT不是根據fuse來判斷image是否加密,而是根據Flash里的bootable image是否含有EKIB, EPRDB來判斷的。
5.3 BOOT_MODE[1:0] pin不受fuse值影響,並且設置只在POR后生效