跳转至

efuse

efuse提供一次性可编程存储器的读写访问功能,支持按位和按字节的数据操作、Die-ID与Chip-ID获取以及零计数CRC计算。

头文件清单

#include "include/driver/efuse.h"

接口清单

接口名称 功能简述
uapi_efuse_init 初始化efuse模块
uapi_efuse_deinit 去初始化efuse模块
uapi_efuse_read_bit 从efuse中读取指定位
uapi_efuse_read_buffer 从efuse中读取多字节数据
uapi_efuse_write_bit 向efuse写入一位
uapi_efuse_write_bit_with_flag 在保护标志正确时向efuse写入一位
uapi_efuse_write_buffer 向efuse写入多字节数据
uapi_efuse_write_buffer_with_flag 在保护标志正确时向efuse写入多字节数据
uapi_efuse_get_die_id 获取efuse的Die-ID
uapi_efuse_get_chip_id 获取efuse的Chip-ID
uapi_efuse_calc_crc 计算efuse零计数CRC
uapi_soc_read_id 获取SoC-ID

Functions

uapi_efuse_init

errcode_t uapi_efuse_init(void)

头文件清单

#include "include/driver/efuse.h"

功能说明

  • 初始化efuse模块
  • 支持重复调用,模块已初始化时直接返回成功
  • 初始化完成后模块方可进行读写操作

前置条件

  • 调用时序约束:可在系统启动时调用,无特殊时序要求
  • 依赖关系:底层驱动已就绪

返回值

  • 返回类型:errcode_t
返回值 文字含义 触发场景
ERRCODE_SUCC(0x00) 执行成功 初始化成功
Other 其他错误码,参考errcode_t 执行失败

Kconfig配置

配置项 宏类型 说明 默认值
CONFIG_DRIVER_SUPPORT_EFUSE 编译参与宏 控制efuse.c参与编译 n

uapi_efuse_deinit

errcode_t uapi_efuse_deinit(void)

头文件清单

#include "include/driver/efuse.h"

功能说明

  • 去初始化efuse模块
  • 支持重复调用,模块未初始化时直接返回成功
  • 去初始化后模块不可再进行读写操作

前置条件

  • 调用时序约束:可在模块使用完毕后调用,无特殊时序要求
  • 依赖关系:无特殊依赖

返回值

  • 返回类型:errcode_t
返回值 文字含义 触发场景
ERRCODE_SUCC(0x00) 执行成功 去初始化成功
Other 其他错误码,参考errcode_t 执行失败

Kconfig配置

配置项 宏类型 说明 默认值
CONFIG_DRIVER_SUPPORT_EFUSE 编译参与宏 控制efuse.c参与编译 n

uapi_efuse_read_bit

errcode_t uapi_efuse_read_bit(uint8_t *value, uint32_t byte_number, uint8_t bit_pos)

头文件清单

#include "include/driver/efuse.h"

功能说明

  • 从efuse指定字节地址的指定位位置读取一位数据
  • 读取范围受EFUSE_MAX_BYTES和EFUSE_MAX_BIT_POS约束
  • 受EFUSE_BIT_OPERATION宏控制编译

前置条件

  • 调用时序约束:当前接口必须在uapi_efuse_init()成功返回后调用
  • 编译依赖:EFUSE_BIT_OPERATION宏已定义

入参

名称 参数类型 详细说明 约束取值范围
byte_number uint32_t 要读取位的源efuse字节地址 [0, EFUSE_MAX_BYTES)
bit_pos uint8_t 位的位置 [0, EFUSE_MAX_BIT_POS),即[0, 8)

出参

名称 数据类型 输出说明
value uint8_t * 读取的位值,由调用方分配内存、函数填充

返回值

  • 返回类型:errcode_t
返回值 文字含义 触发场景
ERRCODE_SUCC(0x00) 执行成功 读取成功
Other 其他错误码,参考errcode_t 执行失败

Kconfig配置

配置项 宏类型 说明 默认值
CONFIG_DRIVER_SUPPORT_EFUSE 编译参与宏 控制efuse.c参与编译 n

uapi_efuse_read_buffer

errcode_t uapi_efuse_read_buffer(uint8_t *buffer, uint32_t byte_number, uint16_t length)

头文件清单

#include "include/driver/efuse.h"

功能说明

  • 从efuse中读取多个字节数据到提供的缓冲区
  • 读取范围受EFUSE_MAX_BYTES约束
  • 数据长度与起始地址之和不可超出efuse最大字节数

前置条件

  • 调用时序约束:当前接口必须在uapi_efuse_init()成功返回后调用
  • 依赖关系:buffer指向的内存空间已申请成功,长度不小于length

入参

名称 参数类型 详细说明 约束取值范围
byte_number uint32_t 要读取的数据的初始源efuse字节地址 [0, EFUSE_MAX_BYTES)
length uint16_t 数据的长度,以字节为单位 > 0 且 byte_number + length ≤ EFUSE_MAX_BYTES

出参

名称 数据类型 输出说明
buffer uint8_t * 保存读取数据的缓冲区,由调用方分配内存、函数填充

返回值

  • 返回类型:errcode_t
返回值 文字含义 触发场景
ERRCODE_SUCC(0x00) 执行成功 读取成功
Other 其他错误码,参考errcode_t 执行失败

Kconfig配置

配置项 宏类型 说明 默认值
CONFIG_DRIVER_SUPPORT_EFUSE 编译参与宏 控制efuse.c参与编译 n

uapi_efuse_write_bit

errcode_t uapi_efuse_write_bit(uint32_t byte_number, uint8_t bit_pos)

头文件清单

#include "include/driver/efuse.h"

功能说明

  • 向efuse指定字节地址的指定位位置写入一位(置位)
  • 写入前先读取当前值,若该位已置位则返回参数无效错误
  • 受EFUSE_BIT_OPERATION宏控制编译

前置条件

  • 调用时序约束:当前接口必须在uapi_efuse_init()成功返回后调用
  • 编译依赖:EFUSE_BIT_OPERATION宏已定义

入参

名称 参数类型 详细说明 约束取值范围
byte_number uint32_t 要写入位的目标OTP字节地址 [0, EFUSE_MAX_BYTES)
bit_pos uint8_t 位的位置 [0, EFUSE_MAX_BIT_POS),即[0, 8)

返回值

  • 返回类型:errcode_t
返回值 文字含义 触发场景
ERRCODE_SUCC(0x00) 执行成功 写入成功
Other 其他错误码,参考errcode_t 执行失败

Kconfig配置

配置项 宏类型 说明 默认值
CONFIG_DRIVER_SUPPORT_EFUSE 编译参与宏 控制efuse.c参与编译 n

uapi_efuse_write_bit_with_flag

errcode_t uapi_efuse_write_bit_with_flag(uint32_t byte_number, uint8_t bit_pos, uint32_t flag)

头文件清单

#include "include/driver/efuse.h"

功能说明

  • 在保护标志正确时向efuse指定字节地址的指定位位置写入一位(置位)
  • 保护标志必须为EFUSE_WRITE_PROTECT_FLAG,否则返回参数无效错误
  • 写入前先读取当前值,若该位已置位则返回参数无效错误
  • 受EFUSE_BIT_OPERATION宏控制编译

前置条件

  • 调用时序约束:当前接口必须在uapi_efuse_init()成功返回后调用
  • 编译依赖:EFUSE_BIT_OPERATION宏已定义

入参

名称 参数类型 详细说明 约束取值范围
byte_number uint32_t 要写入位的目标OTP字节地址 [0, EFUSE_MAX_BYTES)
bit_pos uint8_t 位的位置 [0, EFUSE_MAX_BIT_POS),即[0, 8)
flag uint32_t 保护标志 EFUSE_WRITE_PROTECT_FLAG(0x5A5A5A5A)

返回值

  • 返回类型:errcode_t
返回值 文字含义 触发场景
ERRCODE_SUCC(0x00) 执行成功 写入成功
Other 其他错误码,参考errcode_t 执行失败

Kconfig配置

配置项 宏类型 说明 默认值
CONFIG_DRIVER_SUPPORT_EFUSE 编译参与宏 控制efuse.c参与编译 n

uapi_efuse_write_buffer

errcode_t uapi_efuse_write_buffer(uint32_t byte_number, const uint8_t *buffer, uint16_t length)

头文件清单

#include "include/driver/efuse.h"

功能说明

  • 从提供的缓冲区向efuse写入多个字节数据
  • 写入前检查参数合法性,逐字节写入并校验
  • 当CONFIG_EFUSE_REWRITE_PROTECTION宏开启时,已写入的非零字节不可再次写入

前置条件

  • 调用时序约束:当前接口必须在uapi_efuse_init()成功返回后调用
  • 依赖关系:buffer指向的内存空间已申请成功,长度不小于length

入参

名称 参数类型 详细说明 约束取值范围
byte_number uint32_t 要写入数据的初始目的efuse字节地址 [0, EFUSE_MAX_BYTES)
buffer const uint8_t * 包含要写入的数据的缓冲区 不为NULL
length uint16_t 数据的长度,以字节为单位 > 0 且 byte_number + length ≤ EFUSE_MAX_BYTES

返回值

  • 返回类型:errcode_t
返回值 文字含义 触发场景
ERRCODE_SUCC(0x00) 执行成功 写入成功
Other 其他错误码,参考errcode_t 执行失败

Kconfig配置

配置项 宏类型 说明 默认值
CONFIG_DRIVER_SUPPORT_EFUSE 编译参与宏 控制efuse.c参与编译 n
CONFIG_EFUSE_REWRITE_PROTECTION 特性宏 支持efuse重写保护特性 n

uapi_efuse_write_buffer_with_flag

errcode_t uapi_efuse_write_buffer_with_flag(uint32_t byte_number, const uint8_t *buffer, uint16_t length, uint32_t flag)

头文件清单

#include "include/driver/efuse.h"

功能说明

  • 在保护标志正确时从提供的缓冲区向efuse写入多个字节数据
  • 保护标志必须为EFUSE_WRITE_PROTECT_FLAG,否则返回参数无效错误
  • 写入前检查参数合法性,逐字节写入并校验
  • 当CONFIG_EFUSE_REWRITE_PROTECTION宏开启时,已写入的非零字节不可再次写入

前置条件

  • 调用时序约束:当前接口必须在uapi_efuse_init()成功返回后调用
  • 依赖关系:buffer指向的内存空间已申请成功,长度不小于length

入参

名称 参数类型 详细说明 约束取值范围
byte_number uint32_t 要写入数据的初始目的efuse字节地址 [0, EFUSE_MAX_BYTES)
buffer const uint8_t * 包含要写入的数据的缓冲区 不为NULL
length uint16_t 数据的长度,以字节为单位 > 0 且 byte_number + length ≤ EFUSE_MAX_BYTES
flag uint32_t 保护标志 EFUSE_WRITE_PROTECT_FLAG(0x5A5A5A5A)

返回值

  • 返回类型:errcode_t
返回值 文字含义 触发场景
ERRCODE_SUCC(0x00) 执行成功 写入成功
Other 其他错误码,参考errcode_t 执行失败

Kconfig配置

配置项 宏类型 说明 默认值
CONFIG_DRIVER_SUPPORT_EFUSE 编译参与宏 控制efuse.c参与编译 n
CONFIG_EFUSE_REWRITE_PROTECTION 特性宏 支持efuse重写保护特性 n

uapi_efuse_get_die_id

errcode_t uapi_efuse_get_die_id(uint8_t *buffer, uint16_t length)

头文件清单

#include "include/driver/efuse.h"

功能说明

  • 获取efuse的Die-ID,将数据写入提供的缓冲区
  • Die-ID起始字节地址为EFUSE_DIE_ID_BASE_BYTE_ADDR
  • 缓冲区长度需满足Die-ID数据长度要求

前置条件

  • 调用时序约束:当前接口必须在uapi_efuse_init()成功返回后调用
  • 依赖关系:buffer指向的内存空间已申请成功,长度不小于length

入参

名称 参数类型 详细说明 约束取值范围
length uint16_t Die-ID数据的长度,以字节为单位 > 0

出参

名称 数据类型 输出说明
buffer uint8_t * 保存Die-ID数据的缓冲区,由调用方分配内存、函数填充

返回值

  • 返回类型:errcode_t
返回值 文字含义 触发场景
ERRCODE_SUCC(0x00) 执行成功 获取成功
Other 其他错误码,参考errcode_t 执行失败

Kconfig配置

配置项 宏类型 说明 默认值
CONFIG_DRIVER_SUPPORT_EFUSE 编译参与宏 控制efuse.c参与编译 n

uapi_efuse_get_chip_id

errcode_t uapi_efuse_get_chip_id(uint8_t *buffer, uint16_t length)

头文件清单

#include "include/driver/efuse.h"

功能说明

  • 获取efuse的Chip-ID,将数据写入提供的缓冲区
  • 若底层未实现Chip-ID获取接口则返回失败
  • 缓冲区长度需满足Chip-ID数据长度要求

前置条件

  • 调用时序约束:当前接口必须在uapi_efuse_init()成功返回后调用
  • 依赖关系:buffer指向的内存空间已申请成功,长度不小于length

入参

名称 参数类型 详细说明 约束取值范围
length uint16_t Chip-ID数据的长度,以字节为单位 > 0

出参

名称 数据类型 输出说明
buffer uint8_t * 保存Chip-ID数据的缓冲区,由调用方分配内存、函数填充

返回值

  • 返回类型:errcode_t
返回值 文字含义 触发场景
ERRCODE_SUCC(0x00) 执行成功 获取成功
Other 其他错误码,参考errcode_t 执行失败

Kconfig配置

配置项 宏类型 说明 默认值
CONFIG_DRIVER_SUPPORT_EFUSE 编译参与宏 控制efuse.c参与编译 n

uapi_efuse_calc_crc

errcode_t uapi_efuse_calc_crc(const uint8_t *buffer, uint8_t length, uint8_t *crc)

头文件清单

#include "include/driver/efuse.h"

功能说明

  • 计算efuse零计数CRC,统计缓冲区数据中每个字节的零位个数并累加
  • 最大支持32字节(256位)的数据块CRC计算
  • 计算结果写入crc输出缓冲区

前置条件

  • 调用时序约束:当前接口必须在uapi_efuse_init()成功返回后调用
  • 依赖关系:buffer和crc指向的内存空间已申请成功

入参

名称 参数类型 详细说明 约束取值范围
buffer const uint8_t * 保存待计算数据的缓冲区 不为NULL
length uint8_t 数据长度,以字节为单位 [1, 32]

出参

名称 数据类型 输出说明
crc uint8_t * 保存CRC值的缓冲区,由调用方分配内存、函数填充

返回值

  • 返回类型:errcode_t
返回值 文字含义 触发场景
ERRCODE_SUCC(0x00) 执行成功 计算成功
Other 其他错误码,参考errcode_t 执行失败

Kconfig配置

配置项 宏类型 说明 默认值
CONFIG_DRIVER_SUPPORT_EFUSE 编译参与宏 控制efuse.c参与编译 n

uapi_soc_read_id

errcode_t uapi_soc_read_id(uint8_t *id, uint16_t id_length)

头文件清单

#include "include/driver/efuse.h"

功能说明

  • 获取SoC-ID,ID为长度为20字节的uint8_t类型数组
  • 返回Die-ID作为SoC-ID
  • id_length需大于等于20字节

前置条件

  • 调用时序约束:当前接口必须在uapi_efuse_init()成功返回后调用
  • 依赖关系:id指向的内存空间已申请成功,长度不小于20字节

入参

名称 参数类型 详细说明 约束取值范围
id_length uint16_t ID数组的长度 ≥ 20

出参

名称 数据类型 输出说明
id uint8_t * 用于存储返回的SoC-ID,ID是长度为20字节的数组,由调用方分配内存、函数填充

返回值

  • 返回类型:errcode_t
返回值 文字含义 触发场景
ERRCODE_SUCC(0x00) 执行成功 获取成功
Other 其他错误码,参考errcode_t 执行失败

Kconfig配置

配置项 宏类型 说明 默认值
CONFIG_DRIVER_SUPPORT_EFUSE 编译参与宏 控制efuse.c参与编译 n

Type definitions

errcode_t

typedef uint32_t errcode_t;

使用说明

本模块所有对外接口的返回值类型。[SDK公共基础类型]

Macros

EFUSE_WRITE_PROTECT_FLAG

#define EFUSE_WRITE_PROTECT_FLAG            0x5A5A5A5A

ERRCODE_SUCC [SDK公共共享宏]

#define ERRCODE_SUCC                                        0UL

ERRCODE_FAIL [SDK公共共享宏]

#define ERRCODE_FAIL                                        0xFFFFFFFF

ERRCODE_INVALID_PARAM [SDK公共共享宏]

#define ERRCODE_INVALID_PARAM                               0x80000001

ERRCODE_EFUSE_INVALID_PARAM [SDK公共共享宏]

#define ERRCODE_EFUSE_INVALID_PARAM                         0x80001390

ERRCODE_EFUSE_NOT_INIT [SDK公共共享宏]

#define ERRCODE_EFUSE_NOT_INIT                              0x80001391