Forum: Digitale Signalverarbeitung / DSP / Machine Learning CRC-16 Berechnung nicht nachvollziehbar


von Kai F. (nixblicker)


Angehängte Dateien:

Lesenswert?

Hallo liebe Tüftler,

ich weiß ja, dass es schon viele CRC-Problem Threads hier im Forum gibt, 
aber ich habe doch ein sehr spezielles Problem, wobei mir die anderen 
Beiträge leider nicht helfen.

Ich möchte mit einem µC über RS232 einen Text an ein gekauftes LED-Modul 
übertragen. Zu diesem LED-Modul existiert eine SW, die beliebigen Text 
z.B. als Laufschrift an das Modul einmalig überträgt. Das LED-Modul gibt 
diesen Text dann in einer Endlosschleife auf dem Display aus. Einen Teil 
dieses Datenverkehrs zwischen PC und LED-Modul habe ich mitgschnitten 
und als pdf angehängt. Dabei wurde 4x derselbe Befehl gesendet, um es 
besser nachvollziehen zu können.

Und hier fängt mein Problem an:

Bei der Übertragung folgender Sequenz(in hex) wird eine CRC-16 
Checksumme berechnet, die ich einfach nicht nachvollziehen kann:

02 08 04 0F 04 01 03 00 3f 93

wobei
- 02 eine Startkennung ist
- 0F eine lfd Nr. ist
- 3f 93 die CRC Checksumme ist (3f ist CRC high, 93 ist CRC low)

Außerdem habe ich folgendes aus den spärlichen technischen Unterlagen 
des LED-Moduls herausgelesen:

Der Datenstrom ist auf folgende Weise aufgebaut:

- STX Startkennung 02h (wie oben im Bsp.)
- Länge in Byte (von "Länge" bis "CRClow") -> 08 (also OHNE die 
Startkennung)
- Adresse (in meinem Fall immer 04)
- lfd. Nr. (geht immer von 03 bis 0F)
- Kommando (Laufschrift, Blinken usw.)
- Daten1 bis DatenN
- CRC high
- CRC low

Eine Besonderheit: sollte im Datentelegramm ein STX vorkommen (nicht als 
Startkennung), so wird diese wie folgt kodiert:

02h = 01h 04h
eine 01h wird dann wie folgt kodiert: 01h = 01h 03h (siehe Bsp. oben)

Zur CRC-Berechnung:

Laut Unterlagen wird eine CRC-Summe von "Länge" bis "DatenN" gebildet, 
dem folgendes Polynom zu Grunde liegt:

x^16 + x^11 + 1


Das CRC-Prinzip ansich ist mir schon klar, nur schaffe ich es einfach 
nicht die oben beschriebenen CRCs nachzuvollziehen. Könnt ihr mir da 
vielleicht bitte weiterhelfen?

Gruß Kai

von Kai F. (nixblicker)


Lesenswert?

Achso in den technischen Utnerlagen wurde noch ein Beispiel angegeben, 
welches aber leider auch nicht nachvollziehbar für mich ist:

<Beispiel>
CRC-Check:

Sender: folgende Folge soll übertragen werden: (alle Werte in HEX)

06 04 09 03 (Aktivabfrage)

06 - Länge
04 - Adresse
09 - lfd. Nr.
03 - Statusabfrage

Vorgehensweise:

2 Nullen anhängen

d.h. Folge 06 04 09 03 00 00

Es wird das Ergebnis nach jedem Schiebewert dargestellt:

Startwert (low/high - Vertauschung)

04 06

    Wert zum Durchschieben: 09

080C
1018
2030
4060
80C1
11A3
2346
468D

    Wert zum Durchschieben: 03

8D1A
0A15
142A
2854
50A8
A150
5280
A501

    Wert zum Durchschieben: 00

5A23
B446
78AD
F15A
F295
F50B
FA37
E44F

    Wert zum Durchschieben: 00

D8BF
A15F
529F
A53E
5A5D
B4BA
7955
F2AA

F2AA ist somit die CRC-Summe

d.h. übertragen wird: 06 04 09 03 F2 AA

</Beispiel>

So das war das Beispiel.  Ich hoffe damit könnt ihr nun was anfangen. :)

Gruß Kai

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.