API GUIDE / EFUSE / LL

G32S10 EFUSE LL 接口

LL 层接口:efuse_regs.h 通过 EFUSE_IOBASE 定义唯一实例:

1. 资源模型与公开类型

1.1 实例与寄存器布局

efuse_regs.h 通过 EFUSE_IOBASE 定义唯一实例:

#define EFUSE  ((efuse_regs_t *)(uintptr_t)EFUSE_IOBASE)
实例基地址宏基地址
EFUSEEFUSE_IOBASE0x134A0000UL
偏移寄存器访问用途
0x000CTRLR/W地址、长度、读、写、复位和 REDN 路径选择。
0x004CFGR/W读写调整和 strobe 时序。
0x008STATER/W读写完成状态、安全/保护状态。
0x00CDATAR/W单次访问的最多 4 byte 数据。
0x010SPEENW特殊段访问解锁键。
0x014SPESEGR/W特殊段状态。
0x018PSRAM_STATERPSRAM 段保护状态。

单次硬件事务的 CTRL.ADDR 是 8 bit 字节地址,CTRL.LEN 将 1 至 4 byte 编码为 blen - 1;HAL 会将任意段访问拆分为最多 4 byte 的事务。

2. LL 接口规范

LL 接口全部定义为 static inline,首参数为有效的 efuse_regs_t *efusex。它们不检查空指针、实例、地址或控制器状态;ll_efuse_start_read() 与 ll_efuse_start_write() 仅额外拒绝不在 1 至 4 范围内的 blen。同一实例上的并发 start、reset 或 clear 必须由调用方串行化。

2.1 原始寄存器读取

接口返回值
ll_efuse_get_ctrl(efusex)原始 CTRL。
ll_efuse_get_cfg(efusex)原始 CFG。
ll_efuse_get_state(efusex)原始 STATE。
ll_efuse_get_data(efusex)原始 DATA。
ll_efuse_get_speseg(efusex)原始 SPESEG。
ll_efuse_get_psram_state(efusex)原始只读 PSRAM_STATE。

2.2 状态、特殊访问和时序

接口功能
ll_efuse_clear_data(efusex)将 DATA 清零。
ll_efuse_clear_state_bits(efusex, mask)原子清除指定 STATE 位。
ll_efuse_clear_read_done(efusex)清除 STATE.RD_DONE。
ll_efuse_clear_write_done(efusex)清除 STATE.WR_DONE。
ll_efuse_enable_special_access(efusex)向 SPEEN 写入 EFUSE_SPEEN_KEY。
ll_efuse_reset(efusex)将 CTRL 清零,清除 done 状态与 DATA。
ll_efuse_set_cfg(efusex, value)原样写入 CFG。调用方负责所有时序字段的合法性。

2.3 事务启动与完成查询

bool ll_efuse_start_read(efuse_regs_t *efusex,
                         uint32_t addr,
                         uint32_t blen,
                         bool use_backup);

bool ll_efuse_start_write(efuse_regs_t *efusex,
                          uint32_t addr,
                          uint32_t data,
                          uint32_t blen,
                          bool use_backup);

两个启动接口仅接受 blen 为 1 至 4;addr 由 CTRL.ADDR 字段掩码写入,调用方必须保证地址在 8 bit 范围内。成功时写入 CTRL,并分别置位 RDEN 或 WREN;LEN 写入 blen - 1,use_backup 为 true 时置位 REDN。它们不等待完成,调用方必须自行轮询:

接口完成条件
ll_efuse_read_done(efusex)返回 STATE.RD_DONE。
ll_efuse_write_done(efusex)返回 STATE.WR_DONE。

3. 寄存器与位域约定

3.1 CTRL

字段含义
REDN[31]选择备份/REDN 路径。
ADDR[28:21]字节地址。
LEN[17:16]本次事务长度编码:0、1、2、3 分别表示 1、2、3、4 byte;LL/HAL 写入 blen - 1。
RESET[4]复位控制器命令。
WREN[1]启动写事务。
RDEN[0]启动读事务。

3.2 CFG

字段含义
INT_EN[31]EFUSE 中断总使能位。当前 HAL 使用 polling,不依赖该位。
RD_ADJ[23:20]读调整值。
RD_STROBE[19:16]有符号 4 bit 读 strobe,范围 -8 至 7。
WR_ADJ[15:12]写调整值。
WR_STROBE[8:0]有符号 9 bit 写 strobe,范围 -256 至 255。

3.3 STATE 与保护位

RD_DONE、WR_DONE 是 HAL 轮询完成的状态位。其余位包含 CHIP ID、RETENT、SCBOOT、OS KEY、USER KEY、SCBOOT 备份和 OSC trim 等保护或安全状态;段写入前 HAL 根据段元数据读取 STATE 或 PSRAM_STATE 并拒绝已保护的段。

SPEEN 是写入键寄存器,不应读回或在通用寄存器 dump 中读取。SPESEG 记录特殊段相关状态;PSRAM_STATE 的 bit0 至 bit24 分别对应 PSRAM 类型、配置和时序参数的保护状态。