Crc模块用户手册
大约 6 分钟约 1828 字2025/12/26
Crc模块用户手册
目录
1. 简介
本模块提供了对 CRC (Cyclic Redundancy Check) 循环冗余校验单元 的抽象接口,用于计算数据块的校验值,以核实数据在传输或存储过程中的正确性和完整性。主要功能包括:
- 初始化/反初始化: 通过
HLI_Crc_Init和HLI_Crc_DeInit对CRC模块进行生命周期管理。 - 设置校验类型: 使用
HLI_Crc_SetCalculationType选择要使用的CRC算法(CRC-8, CRC-16, CRC-32)。 - 全量计算: 通过
HLI_Crc_Calculate函数一次性为整个数据块计算CRC值,这是一个同步阻塞操作。 - 增量计算: 对于大数据块或流式数据,可以使用
HLI_Crc_Accumulate分段送入数据进行计算,最后通过HLI_Crc_GetResult获取最终的CRC校验值。
1.1 支持的设备
当前软件适用于以下芯片:
- KF32A158xxxSF
1.2 名词及缩写
| 缩写 | 解释 |
|---|---|
| CRC | 循环冗余校验单元(Cyclic Redundancy Check) |
2. 文件结构
| 文件名称 | 描述 |
|---|---|
| kf32axxx_hli_crc.h | 此头文件输出crc驱动程序的宏、类型定义和函数原型 |
| kf32axxx_hli_crc.c | 此文件包含crc驱动程序的通用功能 |
| kf32axxx_hli_crc_cfg.h | 此头文件输出crc开关类的宏 |
3. 数据结构
3.1 数据类型
3.1.1 宏定义
无。
3.1.2 枚举
CRC校验类型
枚举名称 解释 HLI_CRC_8 CRC8运算 HLI_CRC_16_CCITT CRC16运算 HLI_CRC_32 CRC32运算 CRC状态(函数执行结果)
枚举名称 解释 HLI_CRC_STATUS_OK CRC OK HLI_CRC_STATUS_ERROR 函数执行错误 HLI_CRC_STATUS_UNINITIALIZED CRC未初始化 HLI_CRC_STATUS_ALREADY_INITIALIZED CRC已初始化 HLI_CRC_STATUS_INVALID_PARAM 传入参数错误
3.1.3 类型定义
无。
3.2 配置项说明
本模块无复杂的配置结构体。
4. 驱动函数
4.1 函数接口
4.1.1 HLI_Crc_Init
| Name | Description |
|---|---|
| 函数名称 | HLI_Crc_Init |
| 语法 | HLI_Crc_StatusType HLI_Crc_Init(void) |
| 同步/异步 | 同步 |
| 重入性 | 不可重入 |
| 形参(输入) | void |
| 形参(输出) | 无 |
| 返回值 | HLI_CRC_STATUS_OK: 初始化成功 |
| 返回值 | HLI_CRC_STATUS_ALREADY_INITIALIZED: CRC已完成初始化 |
| 描述 | 对CRC模块时钟等配置项进行配置 |
| 注意事项 |
4.1.2 HLI_Crc_SetCalculationType
| Name | Description |
|---|---|
| 函数名称 | HLI_Crc_SetCalculationType |
| 语法 | HLI_Crc_StatusType HLI_Crc_SetCalculationType(HLI_Crc_CalcEnumType CalcType) |
| 同步/异步 | 同步 |
| 重入性 | 不可重入 |
| 形参(输入) | CalcType: CRC运算类型 |
| 返回值 | HLI_CRC_STATUS_OK: 函数执行成功 |
| 返回值 | HLI_CRC_STATUS_INVALID_PARAM: 传入参数错误 |
| 描述 | 配置用户选择的CRC运算类型 |
| 注意事项 | 默认配置项见 6. 限制与假设 小节。 |
4.1.3 HLI_Crc_Calculate
| Name | Description |
|---|---|
| 函数名称 | HLI_Crc_Calculate |
| 语法 | HLI_Crc_StatusType HLI_Crc_Calculate(const uint8_t *Buffer, uint32_t DataLen, uint32_t *CalcResult) |
| 同步/异步 | 同步 |
| 重入性 | 不可重入 |
| 形参(输入) | Buffer: 待校验数据的指针 |
| 形参(输入) | DataLen: 待校验数据长度 (单位: byte) |
| 形参(输出) | CalcResult: 存放校验结果的指针 |
| 返回值 | HLI_CRC_STATUS_OK: 函数执行成功 |
| 返回值 | HLI_CRC_STATUS_ERROR: CRC类型未设置 |
| 返回值 | HLI_CRC_STATUS_INVALID_PARAM: 传入参数错误(如空指针、长度为0) |
| 描述 | 计算用户提供的待校验数据, 并返回校验值。这是一个阻塞函数。 |
| 注意事项 |
4.1.4 HLI_Crc_Accumulate
| Name | Description |
|---|---|
| 函数名称 | HLI_Crc_Accumulate |
| 语法 | HLI_Crc_StatusType HLI_Crc_Accumulate(const uint8_t *Buffer, uint32_t DataLen) |
| 同步/异步 | 同步分段计算 |
| 重入性 | 不可重入 |
| 形参(输入) | Buffer: 待校验数据的指针 |
| 形参(输入) | DataLen: 待校验数据长度 (单位: byte) |
| 返回值 | HLI_CRC_STATUS_OK: 函数执行成功 |
| 返回值 | HLI_CRC_STATUS_ERROR: CRC类型未设置 |
| 返回值 | HLI_CRC_STATUS_INVALID_PARAM: 传入参数错误 |
| 描述 | 分段计算用户提供的待校验数据。 |
| 注意事项 | 多次调用此函数后, 需调用HLI_Crc_GetResult获取最终校验结果。 |
4.1.5 HLI_Crc_GetResult
| Name | Description |
|---|---|
| 函数名称 | HLI_Crc_GetResult |
| 语法 | uint32_t HLI_Crc_GetResult(void) |
| 同步/异步 | 同步 |
| 重入性 | 可重入 |
| 形参(输入) | void |
| 返回值 | CRC校验结果 |
| 描述 | 在调用 HLI_Crc_Accumulate 后,获取最终的校验结果。 |
| 注意事项 |
4.1.6 HLI_Crc_DeInit
| Name | Description |
|---|---|
| 函数名称 | HLI_Crc_DeInit |
| 语法 | HLI_Crc_StatusType HLI_Crc_DeInit(void) |
| 同步/异步 | 同步 |
| 重入性 | 不可重入 |
| 形参(输入) | void |
| 返回值 | HLI_CRC_STATUS_OK: 反初始化成功 |
| 返回值 | HLI_CRC_STATUS_UNINITIALIZED: CRC未初始化 |
| 描述 | 对CRC模块进行反初始化。 |
| 注意事项 |
4.2 中断回调
无。
5. 使用示例
1. 同步全量计算
注
示例中使用的参数仅用作示例演示,应用时以实际为准。
此方法适用于一次性计算整个数据块的CRC值。
2. 同步增量计算
此方法适用于流式数据或需要分块计算的大数据。
6. 限制与假设
- 算法限制: 仅支持以下三种标准CRC算法的特定配置:
- CRC-8: 多项式
0x07, 初始值0x00, 结果异或值0x00, 输入/结果均不反转。 - CRC-16-CCITT: 多项式
0x1021, 初始值0x0000, 结果异或值0x0000, 输入字节反转, 结果字反转。 - CRC-32: 多项式
0x04C11DB7, 初始值0xFFFFFFFF, 结果异或值0xFFFFFFFF, 输入字节反转, 结果字反转。
- CRC-8: 多项式
- 数据格式:
- 输入数据格式固定,不可配置。
- 待校验数据类型为
uint8_t数组,长度以字节(byte)为单位。
- 运行时错误:
- 输入数据指针为空或数据长度为0时,将返回
HLI_CRC_STATUS_INVALID_PARAM。 - 在同步计算
HLI_Crc_Calculate中,若用于接收结果的指针为空,将返回HLI_CRC_STATUS_INVALID_PARAM。 - 当CRC模块处于运算状态时,再次调用计算接口会返回错误。
- 输入数据指针为空或数据长度为0时,将返回
7. 变更记录
| 版本 | 时间 | 变更记录 |
|---|---|---|
| v1.0 | 2025.11.20 | 新增初版文档 |
