CRC16 CITT Problem

Hi,

ich bekomme über die serielle ein SML-Datentelegramm mit 228 Byte. Die letzten beiden sind CRC nach CRC16 CITT Standard.
Zur Berechnung habe ich diese lib gefunden:

und entsprechend dem einfachen Beispiel etwas Code aufgesetzt.

#include <FastCRC.h>
FastCRC16 CRC16;

Puffer für meine Daten: SerIn [228]
Serial.println(CRC16.ccitt(SerIn, 226), HEX );

Aber leider kommen nicht die erhofften 2 Byte raus :frowning:

Kennt jemand diese lib, oder hat eine Idee, was ich noch falsch mache?

Gruß/hk007

Ergänzung:

Als Alternative habe ich jetzt noch diese lib probiert:

Und...super, mit den gleichen Daten kommen komplett andere CRCs raus.
Aber auch nicht das erwartete.

Es gibt einen Wikipedia-Artikel zu CRC. Dort ist - ich hab's nur sehr kurz überflogen - wohl auch der Algorithmus so beschrieben, dass man ihn umsetzen kann.

Hast Du den Artikel schon entdeckt und gelesen?

Gruß

Gregor

Hi

Ich gehe Mal davon aus, daß eine CRC16-Lib durchaus die entsprechende Funktionalität aufweist und denke eher, daß der Datenstrom nicht so aussieht, wie Es erwartet wird.
Denke hier in die Richtung Endian.

Von wo komme ndie Daten?
Kann Es sein, daß die 'eine Seite' Little Endian und die Andere Big Endian benutzt?

MfG

postmaster-ino:
… denke eher, daß der Datenstrom nicht so aussieht, wie Es erwartet wird…

Ja, da hast du gar nicht unrecht.
Aber das Problem war nicht die Endian Geschichte.

Der Hersteller hat sich einfach nicht an die Protokolldefinition gehalten. Anstelle CCITT hat er x25 verwendet.
Da kann man lange suchen. :angry:
Habs auch erst rausgefunden, nachdem ich den Stream hier eingegeben und die CRC berechnen habe.
https://crccalc.com/ . Coole Seite…
Da berechnet er alle möglichen CRC-Varianten. Und eine davon hat dann zu meiner Checksumme gepasst.

Da x25 auch mit der lib aus dem ersten Post möglich ist, klappt es jetzt. :smiley:

Hi

Besten Dank für Deine Rückmeldung und toller Link - ist direkt 'wechgespeichert' :slight_smile:
Toll, daß Es jetzt klappt!

MfG