【问题标题】:CRC32 CRC peripheral on STM 32 : byte and word streams of same data give different resultsSTM 32 上的 CRC32 CRC 外设:相同数据的字节流和字流给出不同的结果
【发布时间】:2018-11-09 14:40:39
【问题描述】:

我正在使用 STM32 ARM CRC 外设,当以字节形式输入时与以字词形式输入时相比,我会为相同的数据获得不同的 CRC 码。

使用字节字长和小字对齐的数据串:

 const char *ts4 = "The quick brown fox jumped over the lazy brown dog."; // 52 CHARS divisible by 4; 

这个,缓冲区大小为strlen(ts4),CRC32 约为 0x01fba559 0xfe045aa6.

然后将 CRC 配置为 WORD 大小(将缓冲区大小设置为 strlen(ts4)/4),并将 DMA 引擎指向 CRC 数据寄存器。它给出了不同的 CRC 结果,~ 0xf2bd1910 0x0d42e6ef,所以我再次调用它,使用 HAL_CALCULATE 方法(以确保 DMA 按预期工作)。这又给了〜0xf2bd1910 0x0d42e6ef。

CRC32 算法是否会针对不同的字长输入给出不同的结果?我真的不想将 DMA 引擎绑定在传输字节上。是否有一个等效的“C”函数可以用 32 位 WORD 输入计算 CRC32?我试过颠倒单词中字节的顺序,但这并没有解决它(我认为这可能是一个大/小字节序问题)。

【问题讨论】:

    标签: byte stm32 word crc32


    【解决方案1】:

    这是 51 个字符,而不是 52 个。超过 4 的长度将给出 12,而不是 13。前 48 个字符的 CRC 应该不同于 51 个字符的 CRC。

    另外我认为您需要确保字符串从单词边界开始。

    【讨论】:

    • 是的!现在一切正常!添加了一个“。”到最后,他们匹配。谢谢你。我现在有全速 32 位 DMA 的 CRC ......(这里有点新......我应该删除这个线程)......它确实证明了 ARM 中的 BYTE 和 WORD CRC32 外设应该给出相同的结果结果。
    • 尊敬的 user50619,我有你的问题,并得到你的结果(0xf2bd1910)。请你能更好地解释一下你是如何解决的?我必须在 HAL_Accumulate 之前使用 HAL_Calculate 吗?我想我什么都试过了,我确定有些东西我不明白。
    • @MarkAdler :) :) :) 非常好!还是谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-06
    • 1970-01-01
    • 2020-03-12
    • 2014-09-18
    • 1970-01-01
    相关资源
    最近更新 更多