Skip to main content

Efuse

1 efuse 驱动选择

使用IConfigTool工具选择主配置 x2000_darwin_factory_defconfig

2023-04-18_16-17

进入模块化驱动->x2000驱动列表->选择 efuse 驱动

2023-04-18_16-58

配置 efuse 命令

2023-05-23_13-44

2023-05-23_13-45

2 efuse 命令使用

# cmd_efuse --help

Usage1:cmd_efuse read_size <segment_name>
Example:
cmd_efuse read_size CHIP_ID
Usage2:cmd_efuse read <segment_name>
Example:
cmd_efuse read CHIP_ID
Usage3:cmd_efuse write <segment_name> <start> <size> <data...>
Example:
cmd_efuse write CHIP_ID 0 2 0x10 0x11
Usage4:cmd_efuse print_segment_info
Example:
cmd_efuse print_segment_info
Usage5:cmd_efuse [-h/--help]Example:
cmd_efuse --help

3 efuse实现逻辑

驱动代码位置:

module_driver/soc/x2000/efuse/jz_efuse.c

命令逻辑实现:

libhardware2/src$ ls lib/efuse/efuse.c

libhardware2/src$ ls cmds/efuse_main.c

4 efuse api 详解

包含头文件:

#include <libhardware2/efuse.h>

efuse使用流程:

  1. efuse_get_segment_information 获取efuse每个段的信息
  2. efuse_write/read efuse读或写
  3. efuse_free_information 释放空间

api详解:

int efuse_write(char *name, unsigned char *wr_buf, int start, int size)
功能:写efuse
参数:name //efuse段的名字
wr_buf //写入的数据
start //写入的起始位
size //写入数据的大小
返回值:成功:0
失败:-1
int efuse_read(char *name, unsigned char *buf, int start, int size)
功能:读efuse
参数:name //efuse段的名字
buf //读取数据存放的位置
start //读取的起始位
size //读取数据的大小
返回值:成功:0
失败:-1
int efuse_read_seg_size(char *name)
功能:读efuse某一段的大小
参数:name //efuse段的名字
返回值:成功:0
失败:-1
struct efuse_segment_info *efuse_get_segment_information(void)
功能:获取efuse每个段的信息
参数:无
返回值:成功:存放efuse每个段信息的结构体数组指针
(数组最后一个结构体的segment_name成员为NULL
结构体成员详见中间参数详解
失败:NULL
void efuse_free_information(struct efuse_segment_info *info)
功能:释放存放efuse每个段信息时所申请的空间
参数:info //存放efuse每个段信息的结构体数组指针(结构体成员详见中间参数详解)
返回值:无

中间参数详解

/*efuse段信息结构体*/
struct efuse_segment_info {
unsigned int seg_start; //段的起始位
unsigned int seg_size; //段的大小
char *segment_name; //段的名字
};