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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.