CRC

概述

CRC 子系统提供了各种循环冗余校验(Cyclic Redundancy Check)算法的软件实现,用于验证数据完整性。CRC 通常用于检测存储和通信系统中数据的意外变化。

该子系统提供了一套全面的 CRC 算法,包括 CRC-4、CRC-7、CRC-8、CRC-16、CRC-24 和 CRC-32 变体,并在硬件支持时提供可选的硬件加速支持。

备注

此库不同于 CRC 硬件驱动 API,后者提供访问硬件 CRC 加速外设的接口。

当硬件 CRC 单元可用,并且在 Devicetree 的 /chosen 节点中设置了 zephyr,crc 属性时,库函数将默认使用硬件加速来提升性能(可通过将 CONFIG_CRC_HW_HANDLER 设为 n 来禁用)。

用法

要计算 CRC,请包含相应的头文件并调用所需的函数:

#include <zephyr/sys/crc.h>

uint8_t data[] = {0x01, 0x02, 0x03, 0x04};
uint32_t checksum = crc32_ieee(data, sizeof(data));

对于分块处理的流式数据,请使用 “update” 变体:

uint32_t crc = 0;
crc = crc32_ieee_update(crc, chunk1, len1);
crc = crc32_ieee_update(crc, chunk2, len2);
/* Final CRC value is in 'crc' */

通用的 crc_by_type() 函数提供了统一的接口,可在运行时选择 CRC 算法。

配置

相关配置选项:

API 参考

CRC