Edit online

设计说明

31 Oct 2024
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 方式的应用场景。


../../../../_images/sw_system8.png

1. eFuse 驱动的软件架构图

关键流程设计

初始化流程

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

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

  1. 初始化模块的 clk

  2. 导出 Command 到 MSH 节点

Driver 层接口设计

drv_efuse_read
1.
函数原型 int drv_efuse_read(u32 addr, void *data, u32 size)
功能说明 eFuse 读取接口
参数定义
addr - 读取的地址
data - 输出缓冲区
size - 读取数据的长度
返回值 <= 0,读取失败;其它,成功读取到的数据长度
注意事项 -
drv_efuse_program
2.
函数原型 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);