Efuse
1 efuse 驱动选择
使用IConfigTool工具选择主配置 x2000_darwin_factory_defconfig
进入模块化驱动->x2000驱动列表->选择 efuse 驱动
配置 efuse 命令
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使用流程:
- efuse_get_segment_information 获取efuse每个段的信息
- efuse_write/read efuse读或写
- 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; //段的名字
};