ESP32: Ethernet CRC32 berechnen (0x04C11DB7)
English
Deutsch
Die ESP32-ROM bietet Funktionen zur Berechnung von CRC8-, CRC16- und CRC32-Prüfsummen, aber diese Funktionalität ist schlecht dokumentiert.
Durch methodisches Ausprobieren und Vergleichen mit Arduino_CRC32 (welches den Ethernet-CRC32-Algorithmus mit dem Polynom 0x04C11DB7 basierend auf der pyCRC-Bibliothek implementiert) habe ich herausgefunden, wie man die CRC32-Prüfsumme mit dem Ethernet-Polynom berechnet.
Binden Sie zuerst crc.h ein:
esp32_crc32_example.cpp
#include <esp_rom_crc.h>Verwenden Sie nun für einen buffer mit der Länge length diesen Code:
crc_compute_snippet.cpp
uint32_t romCRC = (~esp_rom_crc32_le((uint32_t)~(0xffffffff), (const uint8_t*)buffer, length))^0xffffffff;Vollständiger Beispielcode
Dieser PlatformIO/Arduino-Code vergleicht das Ergebnis der ESP32-ROM-CRC32-Funktionalität, indem beide Ergebnisse auf dem seriellen Port ausgegeben werden.
esp32_crc32_complete_example.cpp
#include <Arduino.h>
#include <esp_rom_crc.h>
#include <Arduino_CRC32.h>
void setup() {
Serial.begin(115200);
}
void loop() {
const char* data = "ABCDEFGHIJ";
// Mit ESP32-ROM-CRC-Bibliothek berechnen
uint32_t romCRC = (~esp_rom_crc32_le((uint32_t)~(0xffffffff), (const uint8_t*)data, 8))^0xffffffFF;
// Mit Arduino_CRC32-Bibliothek berechnen (basierend auf pyCRC)
Arduino_CRC32 crc32;
uint32_t libCRC = crc32.calc((uint8_t const *)data, 8);
// Beide ausgeben
char crcBytes[4];
memcpy(crcBytes, &romCRC, sizeof(uint32_t));
Serial.printf("ROM CRC: %02X %02X %02X %02X\n", crcBytes[0], crcBytes[1], crcBytes[2], crcBytes[3]);
memcpy(crcBytes, &libCRC, sizeof(uint32_t));
Serial.printf("Lib CRC: %02X %02X %02X %02X\n", crcBytes[0], crcBytes[1], crcBytes[2], crcBytes[3]);
Serial.println("\n");
delay(500);
}platformio.ini
[env:esp32dev]
platform = espressif32
platform_packages = framework-arduinoespressif32 @ https://github.com/espressif/arduino-esp32.git#3.2.0
board = esp32dev
framework = arduino
monitor_speed = 115200
lib_deps =
arduino-libraries/Arduino_CRC32@^1.0.0Beispielausgabe:
crc_example_output.txt
ROM CRC: 1C B6 DC 68
Lib CRC: 1C B6 DC 68Check out similar posts by category:
Arduino, ESP8266/ESP32
If this post helped you, please consider buying me a coffee or donating via PayPal to support research & publishing of new posts on TechOverflow