设计说明
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 方式的应用场景。
关键流程设计
初始化流程
eFuse 驱动初始化接口通过命令完成,使用 efuse init 命令。
eFuse 初始化过程,主要步骤有:
-
初始化模块的 clk
-
导出 Command 到 MSH 节点
Driver 层接口设计
drv_efuse_read
函数原型 | int drv_efuse_read(u32 addr, void *data, u32 size) |
---|---|
功能说明 | eFuse 读取接口 |
参数定义 |
addr - 读取的地址
data - 输出缓冲区
size - 读取数据的长度
|
返回值 | <= 0,读取失败;其它,成功读取到的数据长度 |
注意事项 | - |
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);