gpt4 book ai didi

c - 从 STM32F0 和 zlib 匹配 CRC32

转载 作者:IT王子 更新时间:2023-10-29 00:48:36 24 4
gpt4 key购买 nike

我正在研究运行 Linux 的计算机和 STM32F0 之间的通信链路。我想对我的数据包使用某种错误检测,因为 STM32F0 有 CRC32 硬件,我在 Linux 上有带 CRC32 的 zlib,我认为在我的项目中使用 CRC32 是个好主意。问题是对于不同平台上的相同数据,我不会获得相同的 CRC 值。

#include <inttypes.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <zlib.h>

int
main(void)
{
uint8_t byte0 = 0x00;
uint32_t crc0 = crc32(0L, Z_NULL, 0);
crc0 = crc32(crc0, &byte0, 1);
printf("CRC32 value of %" PRIu8 " is: %08" PRIx32 "\n", byte0, crc0);
}

输出 0 的 CRC32 值是:d202ef8d 这与几个在线计算器的结果相匹配。

似乎无论我在 STM32 上使用什么设置,我都无法获得相同的 CRC。我找到了关于 CRC hw 如何计算其值的流程图 in an application note from ST但我不知道它是如何在 zlib 中完成的。

有谁知道它们是否兼容?

[编辑 1] 它们都使用相同的初始值和多项式。

[edit 2] STM32 代码相对无趣,因为它使用的是硬件。

...
/* Default values are used for init value and polynomial, see edit 1 */
CRC->CR |= CRC_CR_RESET;
CRC->DR = (uint8_t)0x00;
uint32_t crc = CRC->DR;
...

最佳答案

STM32Fx 上的 CRC32 实现似乎不是您在许多在线 CRC 计算器和 zip 中使用的标准 CRC32 实现。

与使用小端和最终翻转掩码的 zip CRC32 相比,STM32 实现了使用大端和无最终翻转掩码的 CRC32-MPEG2。

我找到了 this支持CRC32-MPEG2的在线计算器。

如果您对其他 CRC 算法及其实现更感兴趣,请查看此 link .

PS:STM 的 HAL 驱动程序支持字节、半字和字格式的输入,它们似乎适用于 v1.3.1 中的 STM32F0x

关于c - 从 STM32F0 和 zlib 匹配 CRC32,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28064278/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com