基于 SemiDrive E3 平台 Fuse 烧写介绍

关键字 :semdrive

一、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 工具生成。

  1. SDFuseTool 导出 Fuse 文件,为直接烧写文件,即所烧为所配数据;
  2. 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》

★博文内容均由个人提供,与平台无关,如有违法或侵权,请与网站管理员联系。

★文明上网,请理性发言。内容一周内被举报5次,发文人进小黑屋喔~

评论