Соответствие CRC32 от STM32F0 и zlib

Я работаю над каналом связи между компьютером под управлением Linux и STM32F0. Я хочу использовать какое-то обнаружение ошибок для моих пакетов, и поскольку STM32F0 имеет CRC32 hw, а у меня zlib с CRC32 в Linux, я подумал, что было бы неплохо использовать 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);
}

выходыCRC32 value of 0 is: d202ef8d который соответствует результату на нескольких онлайн-калькуляторах.

Кажется, что при любых настройках, которые я использую на STM32, я не могу получить тот же самый CRC. Я нашел блок-схему того, как CRC hw вычисляет свое значениев заявке от ST но я не могу понять, как это делается в Zlib.

Кто-нибудь знает, совместимы ли они?

[править 1] Они оба используют одно и то же значение инициализации и полином.

[править 2] Код STM32 относительно не интересен, поскольку использует hw.

...
/* 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;
...

Ответы на вопрос(0)

Ваш ответ на вопрос