API GUIDE / HASH / OVERVIEW
G32S10 HASH API 概述
模块概述:本文档定义 G32S10 SDK 当前 HASH 模块的正式接口,覆盖:
1. 文档范围
本文档定义 G32S10 SDK 当前 HASH 模块的正式接口,覆盖:
HAL HASH:面向应用、BSP、示例和中间件的分阶段硬件控制接口LL HASH:面向寄存器访问和状态查询的 inline helper
本文档基于以下文件:
code/include/drivers/g32s10/hash/hal_hash.hcode/include/drivers/g32s10/hash/ll_hash.hcode/include/drivers/g32s10/hash/hash_regs.hcode/drivers/g32s10/hash/hal_hash.c
当前 HAL 不负责完整消息的 padding、长度字段、流式缓存、DMA staging、cache 维护、虚拟地址转换、SoC IRQ 申请或线程等待。这些工作由中间件、测试或调用方完成。
2. 分层关系
HAL 负责 HASH 时钟门控、算法和模式配置、round 生命周期、CPU/DMA 输入提交、IRQ callback、digest 读取、abort 和 deinit。
LL 负责 HSCR、HSSR、HSINTEN、DMA 参数、HSDI/HSDO FIFO 和 HSCG。
3. 数据契约
3.1 Padding
HAL 只接受完整 block。例如 SHA-256("abc") 必须由调用方构造成:
61 62 63 80 00 ... 00 00 00 00 00 00 00 18
最后 8 byte 是原始消息 bit 长度 24。HAL 不生成该 block。
3.2 CPU
input_words 必须指向完整算法 block。函数返回前 words 已写入 HSDI。
3.3 DMA
调用方负责准备完整 block、cache clean、物理地址转换,并保证固定源地址在 session 生命周期内有效。
3.4 Digest
HAL 返回 HSDO digest words。调用方按算法公开格式完成 byte order 转换。
4. 示例
HAL CPU/DMA IRQ:
code/examples/hal/hash_hal_example.cLL DMA polling:
code/examples/ll/hash_ll_example.c
两个示例都计算 SHA-256("abc"),提供无头文件的外部接口和独立包装入口。
5. 错误码
| 错误码 | 来源 |
|---|---|
IM_ERR_INVALID_PARAM | 空指针、实例、算法、模式、DMA 地址、block 数量或 digest 容量非法 |
IM_ERR_NOT_READY | handle 未初始化、状态不满足要求、缺少 callback |
IM_ERR_BUSY | handle 已初始化或处于 WAITING |
IM_ERR_HARDWARE | HASH 时钟门控失败 |
IM_ERR_IO | IRQ 完成位与当前模式不匹配 |
IM_ERR_UNSUPPORTED | debug dump 未编译 |