一、Fuse 概述
eFuse 是芯馳里的一塊特殊的數據區域,用於存放的晶片配置信息、KEY,具有燒寫熔斷的特性,一旦數據被燒寫成 1 後便再也無法被修改,eFuse 數據初始值均為 0,需要通過特殊的燒寫時序燒寫數據。
由於 eFuse 的熔斷的特性,用戶在寫入 eFuse 數據時需慎重和確認好需要寫的數據及地址,謹慎使用工具燒寫。
二、Fuse
2.1 概述
2.1.1 Fuse
E3 晶片中 Fuse 項目有如下圖所示,有用於安全啟動、KeyStroe、SecureDebug、LockBank、Flash 加密等功能 Fuse。

2.2 Fuse 文件
儲存用於燒錄 Fuse 的配置文件,可通過 SDFuseTool/GenAutoBurnImg 工具生成。
- SDFuseTool 導出 Fuse 文件,為直接燒寫文件,即所燒為所配數據;
- GenAutoBurnImg 導出的 Fuse 文件,會更具 Fuse 文件中配置信息,eFuse 數據需要Dloader/Flashloader 軟體經過 "加密"、"或運算" 等特殊 eFuse 項間接燒寫,即所燒數據為所配數據處理後數據;
2.2 SDFuseTool 導出 Fuse 文件
已配置的 Fuse 項目可勾選後,導出成 bin 文件用於 CmdEfuseTool 燒寫,或作為工程配置保存用於下次 SDFuseTool 界面工具導入來燒錄
File -> Export Fuse Binary

2.3 GenAutoBurnImg 工具生成 Fuse 文件
2.3.1 概述
GenAutoBurnImg 工具中 的 make_img 功能用於加載指定的 json 腳本配置,生成對應的 Fuse 文件,同時支持導入生成的鏡像文件反向解析輸出原始的 json 配置文件。
2.3.2 json 配置文件
.\SDToolBox_R2.23.1601\App\GenAutoBurnImg\Bin 目錄下的 template.json 一份配置模板文件,可以基於該配置模板進行定製對應的項目配置。
2.3.3 生成 fuse 鏡像文件
GenAutoBurnImg 工具 make_img 用於加載 json 配置,根據配置生成 Fuse 鏡像文件。
生成命令
GenAutoBurnImg.exe make_img --config .\security_deployment_taishan.json --output .\security_deployment_taishan.bin
生成 Fuse 鏡像文件

三、Fuse 燒寫
3.1 概述
3.1.1 SDFuseTool 界面工具燒寫
SDFuseTool 圖形化界面工具是原廠設計和開發的一款用於操作讀及配置晶片 eFuse 數據的軟體應用,方便研發及客戶使用,圖形化界面易於操作。
3.1.2 CmdEfuseTool 工具燒寫
CmdEfuseTool 工具是用於原廠設計和開發通過命令行讀寫 efuse 數據的工具,由於eFuse的特殊性,適合通過腳本調用實現批量燒寫功能,有著易於生產的好處。
3.1.3 Fuse 燒寫 Pac 底包
SDFuseTool 界面與 CmdEfuseTool 工具讀寫 Fuse 依賴 dloader 軟體應用,讀寫操作前需要手動配置一個對應的 pac 文件,工具會自動將 pac 文件中的 DA 模塊應用加載到設備端執行,並與其通訊來實現 fuse 數據的讀功能。
3.1.4 軟體 API 接口燒寫
通過移植軟體 API 接口實現燒寫 efuse 數據,此功能將程序指定值輸入保險絲區域,冗餘位也被編程,用於冗餘保護的保險絲指數,有著易於生產的好處。
3.2 SDFuseTool 界面工具燒寫
1、SDFuseTool 圖形化工具在 SDToolBox 中打開

2、打開界面後需點擊菜單欄 Flie -> Open Project 選擇 e3 工程


3、工具讀取與寫入操作
勾選需要讀取項目後點擊讀取圖標,燒錄同理

4、讀取或寫入的數據如果是已有改變,成功讀取後會將讀出的 efuse 數據解析並填充顯示到相應的項目中。

回讀的值如跟原始值不一致時會紅色字體顯示。

3.3 CmdEfuseTool 工具燒寫
1、CmdEfuseTool 工具 位於 \SDToolBox_R2.23.1601\App\SDFactoryTool\Bin,是命令行燒寫 eFuse 數據工具,支持 eFuse 的讀寫功能,詳細參數可以通過命令行的 -h 參數查看。

2、燒錄指定 eFuse 地址和數據
Eg. 燒寫 efuse 索引 0x6 地址,燒寫數據為 0x00003640
CmdEfuseTool.exe –w –addr 0x6 –data 0x00003640
3、燒錄 SDFuseTool / GenAutoBurnImg 導出 Fuse 文件
Eg. 通過底包 ospi_e3_gateway_efuse_ture_write.pac 燒錄 SDFuseTool 導出的 SDFuseTool_output_20230823.bin Fuse 文件
CmdEfuseTool.exe –pac ospi_e3_gateway_efuse_ture_write.pac –w –bin SDFuseTool_output_20230823.bin
3.4 軟體 API 接口燒寫
通過移植軟體 sdrv_fuse.c 與 fuse_bin.c 等 fuse 驅動,實現軟體 API 接口燒寫功能
軟體驅動提供讀寫接口
3.4.1 寫 fuse
status_t sdrv_fuse_program(uint32_t index, uint32_t v)
傳入參數 index 與寫入值,v 為寫入 Fuse 的值 index 為 fuse 項目的索引號,可以在工具 SDFuseTool 下圖處獲取

也可以使用該接口寫入 fuse,該接口內有判斷 fuse 是否已燒寫等判斷操作
static FUSE_ERR_CODE_E fuse_program_with_readback_verify(uint32_t index, uint32_t value)
3.4.2 讀 fuse
status_t sdrv_fuse_sense(uint32_t index, uint32_t *data)
傳入參數 index 與寫入值,data 為用來獲取 Fuse 的值的 buff。
四、參考資料
《GenAutoBurnImg User Guide.pdf》
《AppNote_E3_燒錄流程.pdf》
《SDToolBox User Guide.pdf》
《AppNote_E3_Boot_and_OTA.pdf》
評論