Hallo suche einen einfachen CRC8-Code für den MSP 430 135. Ich will aus 2 oder 3 Byte eine Prüfsumme berechnen lassen, die ich dann zusätzlich als "viertes" Byte schicken kann. Es wäre auch hilfreich wenn ich wüsste wie dies dann auf der Empfängerseite aussieht. (Auch ein MSP430 135). Die ganze Datenkommunikation läuft über die UART-Schnittstelle ab. mfg Petra
1 | char crc8 (char crc, char n) |
2 | {
|
3 | n ^= crc; |
4 | crc = 0; |
5 | if( n & 0x01 ) crc = 0x5E; |
6 | if( n & 0x02 ) crc ^= 0xBC; |
7 | if( n & 0x04 ) crc ^= 0x61; |
8 | if( n & 0x08 ) crc ^= 0xC2; |
9 | if( n & 0x10 ) crc ^= 0x9D; |
10 | if( n & 0x20 ) crc ^= 0x23; |
11 | if( n & 0x40 ) crc ^= 0x46; |
12 | if( n & 0x80 ) crc ^= 0x8C; |
13 | return crc; |
14 | }
|
Peter
> Es wäre auch hilfreich wenn ich wüsste wie dies dann auf der > Empfängerseite aussieht. Das ist ganz simpel: Du hast 4 Bytes empfangen. Aus den ersten 3 errechnest Du wieder die CRC und vergleichst mit dem 4 empfangenen Byte.
Schaut eigentlich ganz simpel aus der Code von peter dannegger. Gibts dazu auch ne kleine Erklärung? Also was muss ich mit CRC übergeben? Soll das mein Generatorpolynom sein? Und was muss ich bei n übergeben? Ich bin da nicht ganz so firm, wie manch andere hier.
Nun, die Funktion muß pro Datenbyte aufgerufen werden (n = Datenbyte, crc = Rückgabewert des vorherigen Aufrufs, bzw. Startwert). Der letzte Rückgabewert ist dann die CRC. Z.B. für 3 Bytes: crc = crc8(crc8(crc8(0, byte1), byte2), byte3); Peter
Danke, noch zwei Fragen. 1. Welches Generatorpolynom steckt dahinter? 2. Wie korrigiert man auftretende Fehler? Petra
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.