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.h

  • code/include/drivers/g32s10/hash/ll_hash.h

  • code/include/drivers/g32s10/hash/hash_regs.h

  • code/drivers/g32s10/hash/hal_hash.c

当前 HAL 不负责完整消息的 padding、长度字段、流式缓存、DMA staging、cache 维护、虚拟地址转换、SoC IRQ 申请或线程等待。这些工作由中间件、测试或调用方完成。

2. 分层关系

APPLICATION  Application / middleware / example  业务代码、板级支持与示例入口
↓
HAL  HAL HASH  模块级配置、状态管理与硬件访问
↓
LL  LL HASH  寄存器访问与字段级控制
↓
HARDWARE REGISTERS  HASH registers  实例地址、寄存器布局与位域定义

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.c

  • LL DMA polling:code/examples/ll/hash_ll_example.c

两个示例都计算 SHA-256("abc"),提供无头文件的外部接口和独立包装入口。

5. 错误码

错误码来源
IM_ERR_INVALID_PARAM空指针、实例、算法、模式、DMA 地址、block 数量或 digest 容量非法
IM_ERR_NOT_READYhandle 未初始化、状态不满足要求、缺少 callback
IM_ERR_BUSYhandle 已初始化或处于 WAITING
IM_ERR_HARDWAREHASH 时钟门控失败
IM_ERR_IOIRQ 完成位与当前模式不匹配
IM_ERR_UNSUPPORTEDdebug dump 未编译