8.1.5. 设计说明

8.1.5.1. 源码说明

源代码位于 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 层接口头文件

8.1.5.2. 模块架构

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

../../../_images/sw_system9.png

图 8.24 eFuse驱动的软件架构图

8.1.5.3. 关键流程设计

8.1.5.3.1. 初始化流程

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

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

  1. 初始化模块的clk

  2. 导出 Command 到 MSH 节点

8.1.5.4. Driver 层接口设计

8.1.5.4.1. drv_efuse_read

函数原型

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

功能说明

eFuse 读取接口

参数定义

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

返回值

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

注意事项

8.1.5.4.2. drv_efuse_program

函数原型

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

功能说明

eFuse 写入接口

参数定义

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

返回值

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

注意事项

8.1.5.5. 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);