1. 概述
(1)Boot Package 格式
① BPT(Boot Package Table)
啟動設備 | Normal Boot Package 存儲地址 | Backup Boot Package 存儲地址 | Third Try Boot Package 存儲地址 |
NOR/Hyper Fla sh | 由SFS指定 | 由SFS指定 | 由SFS指定 |
eMMC | BOOT1分區 offset=0 | BOOT2分區 offset=0 | User Areas分區 offset=20kB |
SD card | offset=20kB | - | - |
USB/UART | 無存儲 | - | - |
(2)安全啟動
上電後固化在晶片中的 ROM 程序會根據 boot pin 的設置從 XSPI/eMMC/SD/UART/USB 等介質中獲取下級啟動鏡像。啟動鏡像的格式必須滿足前述 Boot Package 格式。
ROM 程序驗證 BPT 以及每個 core 鏡像的流程如下:
①. 計算 BPT 中公鑰的 hash(SHA256)並與 ROTPK1 中保存的 hash 對比,如果兩者不一致,則啟動失敗
②. 使用 BPT 中的公鑰驗證 BPT 中的簽名,如果簽名驗證失敗,則啟動失敗
③. 計算每個 core 鏡像 hash,與保存在 BPT 中的 hash 對比,如果不一致則啟動失敗
④. 上述都成功,則啟動 BPT 中所指定的core鏡像
(3)BootROM 控制⽅式:
使⽤ Semidrive 提供的⼯具(atb_signer)對 image 進⾏簽名時,設置 Debug 控制字並填寫芯⽚ DeviceID(DID)。當 BootROM 啟動成功時,依據控制字打開 Debug。
(4)Flsah layout
上圖為 HyperFlash 和 NorFlash 的典型的 Flash storage layout,其中 HyperFlash 的 sector size(sector 指 Flash 最小擦除單位)為 256kByte(典型值),NorFlash 的 sector size 為 4kByte(典型值)。為使擦寫方便,對 flash 空間時做如下分配:
- 將 SFS 存放在第 1 個 Sector 的起始地址 0x0 至 0x7F 中占用 128Byte;
- 將 RFD 存儲在第 1 個 Sector,其具體的起始地址為 0xF0-0x1FF,占用 272個Byte,RFD 是用於加密啟動的信息,可以查看芯馳的資料或者後續博文;
- 將第 2 個 Sector 預留為 XSPI training 數據區域;
- 以第 3 個 sector 為起始,存放 Primary GPT 分區表預留區域(非必須,僅預留,提示GPT 分區表並非必須,如果不使用分區表,該區域可以不預留。),GPT 分區表 Primary 部分占用 17KB 空間,在 HyperFlash 上占用 1 個 sector,在 NorFlash 上占用 5 個 sector 存儲。此外,根據 GPT 分區表的格式,也需要在 Flash 尾部需預留空間 17KB 存儲 Secondary 分區表。
- Normal Boot Package、Backup Boot Package、Third Try Boot Package 由 SFS (打包可以指定用戶程序地址)中的地址指定,如果按照上圖中預留分區表的 Layout 則中 3 個 Boot Package 的存儲地址為:
HyperFlash存儲地址 | NorFlash存儲地址 | NorFlash |
Normal Boot Package | 0xC0000(SFS指定) | 0x7000(SFS指定) |
Backup Boot Package | 0x4C0000(SFS指定) | 0x407000(SFS指定) |
Third Try Boot Package | 0x8C0000(SFS指定) | 0x807000(SFS指定) |
2. 環境準備
• Lauterbach Trace32 調試器 for arm
• E3 參考板(其上的 E3 芯⽚位於開發模式)。
• 芯馳 SDToolBox,各個⼯具的使⽤⼿冊集成在⼯具包中,雙擊⼯具包中的 Help 圖標可以查看相關應⽤的使⽤說明,fuse 相關操作在⼿冊第七章:SDFuseTool 使⽤說明。
• atb_signer:safety/securityimage 簽名⼯具。
key=sign_tool_e3\atb_signer\keys\TestRSA2048_ossl.pem
• ⼀個⽤⼾私鑰(例如⼀個 rsa2048 的私鑰,可使⽤ Openssl ⽣成)。
• ⼀個 8 字節的數做為芯⽚的 UID : 0x12345678abcdef88 (芯⽚出⼚應該已經燒寫完成,這裡這是舉個例子)
3. 安全啟動
; ------------------------------------------------------------------------------
; @Title: Example for manual JTAG access, Debugger in DOWN Mode
; @Description:
;This script reads out the IDCODE of an ARM7 core when the debugger is in
;DOWN mode.
;Detailed knowledge about JTAG is required to use manual JTAG control signals!
;Tested on an ARM7 target board.
; @Keywords: idcode
; @Author: PEG
; @Props: Template
; @Copyright: (C) 1989-2014 Lauterbach GmbH, licensed for use with TRACE32(R) on
; ------------------------------------------------------------------------------
; $Id: example1.cmm 6982 2023-02-22 11:10:17Z kjmal $
; @Copyright: Semidrive semiconductor
; @Title: Semidrive Secure Debug (Challenge & Response) logic.
; The debugger is in DOWN mode, the JTAG driver is tristated.
area
SYStem.CPU CortexR5
SYStem.CONFIG.apbaccessport 0
SYStem.CONFIG.apbap1.base 0x2000
SYStem.CONFIG.debugaccessport 0
SYStem.CONFIG.debugap1.base 0x2000
SYStem.CONFIG.COREDEBUG.Base 0xF2081000
;taishan
;SYStem.CONFIG.COREDEBUG.Base 0xF0a01000
;taishanl
;SYStem.CONFIG.COREDEBUG.Base 0xF0a01000
;taishanll
SYStem.Option.TRST OFF
SYStem.JtagClock 1MHz
JTAG.PIN ENable
; enable JTAG output driver
JTAG.SHIFTTMS 1 1 1 1 1
; soft reset of the JTAG interface, goto Test-Logic Reset state
JTAG.SHIFTTMS 0 1 1 0 0
; goto Shift-IR state
JTAG.SHIFTREG 1 1 1 1
; shift in UID instruction
JTAG.SHIFTTMS 1 1 0 0
; goto Shift-DR state
JTAG.SHIFTREG %long 0x0 0x0
; shift in 64bit dummy code. shift out our uid
PRINT JTAG.SHIFT()
; print the UID
JTAG.SHIFTTMS 1 1 0 0
; goto Shift-DR state
JTAG.SHIFTREG %long 0x74657374 0x6b657930
; shift in the corresponding key .shift out our uid
PRINT JTAG.SHIFT()
JTAG.SHIFTTMS 1 1 1 1 1
; goto Test-Logic Reset state
JTAG.SHIFTTMS 0 1 0 0
; goto Shift-DR state
JTAG.SHIFTREG %long 0x0
; shift our IDCODE
PRINT JTAG.SHIFT()
JTAG.PIN Disable
; Disable JTAG output driver
SYStem.Mode Attach
;attach
ENDDO
6. 後續博文系列
(1)【Semidriver E3】efuse 數據生成
(2)【Semidriver E3】efuse 數據燒寫
等等
評論