From 86e289f56f38dc7e59cf60b3d6f7cb349903dfb1 Mon Sep 17 00:00:00 2001 From: Marcel Peterkau Date: Tue, 8 Mar 2022 21:23:27 +0100 Subject: [PATCH] improved crc --- Software/ChainLube/src/config.cpp | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/Software/ChainLube/src/config.cpp b/Software/ChainLube/src/config.cpp index 44883ba..dd0e3c9 100644 --- a/Software/ChainLube/src/config.cpp +++ b/Software/ChainLube/src/config.cpp @@ -172,14 +172,19 @@ uint32_t Checksum_EEPROM(uint8_t const *data, size_t len) { if (data == NULL) return 0; - uint32_t crc = 0; + uint32_t crc, mask; + crc = 0xFFFFFFFF; + while (len--) { crc ^= *data++; for (uint8_t k = 0; k < 8; k++) - crc = crc & 1 ? (crc >> 1) ^ 0xb2 : crc >> 1; + { + mask = -(crc & 1); + crc = (crc >> 1) ^ (0xEDB88320 & mask); + } } - return crc ^ 0xff; + return ~crc; } void dumpEEPROM(uint16_t memoryAddress, uint16_t length)