Edit online

设计说明

3 Mar 2025
Read time: 1 minute(s)

源码说明

源代码位于 bsp/artinchip/

  • bsp/artinchip/drv/efuse/drv_efuse.c,eFuse Driver 层实现

  • bsp/artinchip/drv/efuse/efuse_cmds.c,eFuse Command 实现

  • bsp/artinchip/hal/efuse/hal_efuse.c,eFuse HAL 层实现

  • bsp/artinchip/include/hal/hal_efuse.h,eFuse HAL 层接口头文件

模块架构

eFuse 驱动 Driver 层采用 直接调用 HAL 层的接口,并将 Driver 层封装成 Command,如果只使用 HAL 层也可以支持 baremetal 方式的应用场景。


sw_system8

1. eFuse 驱动的软件架构图

关键流程设计

初始化流程

eFuse 驱动初始化接口通过命令完成,使用 efuse init 命令。

eFuse 初始化过程,主要步骤有:

  1. 初始化模块的 clk

  2. 导出 Command 到 MSH 节点

Driver 层接口设计

1. drv_efuse_read

函数原型

int drv_efuse_read(u32 addr, void *data, u32 size)

功能说明

eFuse 读取接口

参数定义

addr - 读取的地址
data - 输出缓冲区
size - 读取数据的长度

返回值

<= 0,读取失败;其它,成功读取到的数据长度

注意事项

-

2. drv_efuse_program

函数原型

int drv_efuse_program(u32 addr, const void *data, u32 size)

功能说明

eFuse 写入接口

参数定义

addr - 写入的地址
data - 输入缓冲区
size - 写入数据的长度

返回值

<= 0,写入失败;其它,成功写入的数据长度

注意事项

-

HAL 层接口设计

HAL 层的函数接口声明存放在 hal_efuse.h 中,主要接口有:
int hal_efuse_init(void);
int hal_efuse_deinit(void);
int hal_efuse_wait_ready(void);
int hal_efuse_read(u32 wid, u32 *wval);
int hal_efuse_write(u32 wid, u32 wval);