前言

概述

本文档主要描述了WS53V100的客户预留EFUSE位域的使用方法。

产品版本

与本文档对应的产品版本如下。

产品名称

产品版本

WS53

V100

读者对象

本文档主要适用于以下人员:

  • 技术支持工程师

  • 软件开发工程师

符号约定

在本文中可能出现下列标志,它们所代表的含义如下。

符号

说明

表示如不避免则将会导致死亡或严重伤害的具有高等级风险的危害。

表示如不避免则可能导致死亡或严重伤害的具有中等级风险的危害。

表示如不避免则可能导致轻微或中度伤害的具有低等级风险的危害。

用于传递设备或环境安全警示信息。如不避免则可能会导致设备损坏、数据丢失、设备性能降低或其它不可预知的结果。

“须知”不涉及人身伤害。

对正文中重点信息的补充说明。

“说明”不是安全警示信息,不涉及人身、设备及环境伤害信息。

修改记录

文档版本

发布日期

修改说明

01

2024-07-22

第一次正式版本发布。

00B01

2024-06-11

第一次临时版本发布。

概述

EFUSE是一种可编程的存储单元,由于其只可编程一次的特征,多用于芯片保存Chip ID、密钥或其他一次性存储数据。WS53提供了两种使用方式:通过软件驱动接口直接读写用户预留的128bit EFUSE空间;通过烧写工具操作整个2048bit空间。

软件编程接口使用指导

eFuse模块提供的接口及功能如下:

头文件路径: include\driver\efuse_user.h

  • uapi_efuse_user_read_bit:从用户预留的eFuse空间中读取一位。

  • uapi_efuse_user_read_buffer:从用户预留的eFuse空间中读取多个字节,进入提供的缓冲区。

  • uapi_efuse_user_write_bit:向用户预留eFuse空间中的对应bit写1。

  • uapi_efuse_user_write_buffer:从提供的缓冲区向用户预留的eFuse空间写入多个字节。

示例:

  1. 按照buffer写eFuse值。

    uint8_t efuse_data[8] = {0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88};
    uint32_t byte_number = 1;
    uint16_t length = 8;
    uint32_t ret;
    // 第1Byte开始写入8个字节
    ret = uapi_efuse_user_write_buffer(byte_number, efuse_data, length);
    if (ret != 0) {
        // 异常处理
    }
    
    
  2. 按照buffer读取efuse值。

    uint8_t efuse_data[8] = {0};
    uint32_t byte_number = 1;
    uint16_t length = 8;
    uint32_t ret;
    // 第1byte开始读取8个字节
    ret = uapi_efuse_user_read_buffer(byte_number, efuse_data, length);
    if (ret != 0) {
        // 异常处理
    }
    
    
  3. 按照bit读取efuse值。

    uint8_t bit_pos = 1;
    uint8_t value;
    uint32_t byte_number = 1;
    uint32_t ret;
    // 读取第一个byte的bit1的值,存入value中(0 or 1)
    ret = uapi_efuse_user_read_bit(byte_number, bit_pos, &value);
    if (ret != 0) {
        // 异常处理
    }
    
  4. 按照bit写入efuse值。

    uint8_t value;
    uint32_t byte_number = 1;
    uint32_t ret;
    // 向第一个byte的bit1写入1
    ret = uapi_efuse_user_write_bit(byte_number, bit_pos);
    if (ret != 0) {
        // 异常处理
    }
    

Burntool烧写efuse_cfg.bin说明

生成efuse_cfg.bin

  1. 数据准备

    字段说明:

    burn:

    • 0:当前位域不烧写,

    • 1:当前位域烧写

    name:当前efuse位域名字

    start_bit:位域起始bit位

    bit_width:当前位域bit长度

    values:烧写值

    lock:锁定位

    示例:

    0,CHIP_ID,0,8,0x00000000,PG0:chip_id 从bit0开始,长度是8bit,不烧写。

    1,SEC_BOOT,226,8,0x00000042,PG39:SEC_BOOT从bit226开始,长度为8bit,烧写值为0x42。

  2. 烧写文件生成

  3. 编译loaderboot,会生成efuse_cfg.bin。

  4. 编译对应的app.bin,编译成功后,会将efuse_cfg.bin自动打包到app.bin中。

烧录流程

准备烧写工具“BurnTool”通过BurnTool工具烧写镜像。具体步骤如下:

  1. 在BurnTool界面中,单击“Option”按钮,选择“Change chip”,从“Chip List”下拉菜单中选择“WS53”,并单击“OK”即可,如图1所示。

    图 1 BurnTool更换芯片示例

  2. 在BurnTool界面中,单击“COM”按钮选择PC机串口(串口选择,请参考开发板使用指南);单击“Select file”按钮,选择各产品编译生成的固件包,并单击“OK”,如图2所示。efuse_cfg.bin为待烧录数据,烧录类型为3。

    图 2 烧录文件选择示例

  3. 勾选“Auto burn”以及“Auto disconnect”选项;

    选择“Setting”→“Settings”,配置串口参数,默认配置如图3所示,baud配置为2000000,package size配置为8192。

    说明: Force Read Time:定时读取的时间,以毫秒为单位。勾选时为定时读取串口,不勾选时为事件触发读取串口。适用于不勾选该选项无法正常烧录的场景。

    图 3 串口设置示例

    选择目标串口号并单击“Connect”按钮(单击后“Connect”变为“Disconnect”),复位单板。自动烧录效果如图4所示。

    图 4 自动烧录示意图

    等待传输完成后结束烧写,烧写完成会出现“All images burn successfully”。烧写完成效果如图5所示。

    图 5 烧写完成示意图

    说明: 在速率不理想的外部状态下,若多次出现烧写镜像失败的情况,请拷贝至本地烧写