efuse
efuse提供一次性可编程存储器的读写访问功能,支持按位和按字节的数据操作、Die-ID与Chip-ID获取以及零计数CRC计算。
头文件清单
接口清单
| 接口名称 | 功能简述 |
|---|---|
| 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
头文件清单
功能说明
- 初始化efuse模块
- 支持重复调用,模块已初始化时直接返回成功
- 初始化完成后模块方可进行读写操作
前置条件
- 调用时序约束:可在系统启动时调用,无特殊时序要求
- 依赖关系:底层驱动已就绪
返回值
- 返回类型:errcode_t
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| ERRCODE_SUCC(0x00) | 执行成功 | 初始化成功 |
| Other | 其他错误码,参考errcode_t | 执行失败 |
Kconfig配置
| 配置项 | 宏类型 | 说明 | 默认值 |
|---|---|---|---|
| CONFIG_DRIVER_SUPPORT_EFUSE | 编译参与宏 | 控制efuse.c参与编译 | n |
uapi_efuse_deinit
头文件清单
功能说明
- 去初始化efuse模块
- 支持重复调用,模块未初始化时直接返回成功
- 去初始化后模块不可再进行读写操作
前置条件
- 调用时序约束:可在模块使用完毕后调用,无特殊时序要求
- 依赖关系:无特殊依赖
返回值
- 返回类型:errcode_t
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| ERRCODE_SUCC(0x00) | 执行成功 | 去初始化成功 |
| Other | 其他错误码,参考errcode_t | 执行失败 |
Kconfig配置
| 配置项 | 宏类型 | 说明 | 默认值 |
|---|---|---|---|
| CONFIG_DRIVER_SUPPORT_EFUSE | 编译参与宏 | 控制efuse.c参与编译 | n |
uapi_efuse_read_bit
头文件清单
功能说明
- 从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
头文件清单
功能说明
- 从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
头文件清单
功能说明
- 向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
头文件清单
功能说明
- 在保护标志正确时向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
头文件清单
功能说明
- 从提供的缓冲区向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)
头文件清单
功能说明
- 在保护标志正确时从提供的缓冲区向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
头文件清单
功能说明
- 获取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
头文件清单
功能说明
- 获取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
头文件清单
功能说明
- 计算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
头文件清单
功能说明
- 获取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
使用说明
本模块所有对外接口的返回值类型。[SDK公共基础类型]