PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : CRC-16 Prüfsumme für serielle Übertragung



BomberD
22.11.2004, 05:35
Hallo,

ich suche nach ner bereits implementierten Lösung für WinAVR C, die eine 16bit CRC Prüfsumme berechnet.
Ich muss ganz ehrlich sagen, so richtig hab ich das Verfahren mit der Polynomdivision nicht verstanden. Ist eigendlich auch nicht Teil meiner Aufgabe.
Hat jemand von euch schon mal mit CRC-Prüfsummen bei der Seriellen kommunikation gearbeitet?
Ich habe auch von einem Algorithmus gelesen, bei dem nicht dividiert wird wo nur Verschiebeoperationen eingesetzt weren. (in meinen Augen besser für den AVR geeignet)

Danke schon im Voraus

22.11.2004, 08:30
http://www.eagleairaust.com.au/code/crc16.htm

mfg robert

BomberD
22.11.2004, 09:07
Danke Robert,

jetzt muss ich das nur noch verstehen... und für ne Zeichenfolge adaptieren.Diese ganzen shiftereien zu kapieren ist nicht so einfach.. :(

Kjion
22.11.2004, 10:21
Schau doch einfach mal in den bei WinAVR mitgelieferten Bibiliotheken.
Mit der crc16.h solltest du glücklich werden ;-). Viel fertiger implementiert wirst du es nicht mehr bekommen ...

Man muss einfach nur noch die Funktion _crc16_update(); aufrufen. Schau dir am besten mal die Doku dazu an...

MfG Kjion

BomberD
22.11.2004, 10:26
Hallo danke ;)
habs gefunden, aber das scheint auch wieder 'nur' ne crc über ein ein byte zu legen. Ich möchte aber, sagen wir mal 64 bytes, nacheinander übertragen und zum Schluss ne crc über das gesendete Paket mitgeben.
Das ist erforderlich für das modbus Protokoll.

edit: oder bedeutet das Update immer, dass die Methode mit dem letzten crc Stand für das neue Zeichen aufgerufen wird?

22.11.2004, 10:51
Ja, das geht immer so weiter mfg

BomberD
22.11.2004, 11:04
hehe dann ist ja gut ;)
Wo ihr schon soviel zu CRC'S wisst. Habt Ihr zufällig das gleiche auch noch für C#?
Wo findet Ihr denn die Beispiele? Ich bin bei WinAVR überhaupt nicht auf CRC's gestoßen.

KlausConzelmann
10.01.2005, 13:58
Hallo,

ich bin auf der Suche nach dem Source zum Bilden des 16 Bit-CRC (CRC16) mit unterschiedlichen Polynomen. Die Polynome sollten vorgebbar sein (z.B. X16+X15+X2+1, X16+X12+X5+1 ....).
Der Einsatz einer Tabelle oder Teil-Tabelle ist dafür wohl nicht so
geeignet. Es sei denn sie wird auch generiert.
Hat jemand ein solches Programm parat oder weis wo ein solches zu
finden ist. Ich benötige dies in einer Microcontroller-Anwendung mit
dem 8051 und zur Überprüfung mit dem PC.

Danke für die Hilfe

Klaus

BomberD
11.01.2005, 11:38
uint16_t crc_xmodem_update (uint16_t crc, int8_t daten){
crc = crc ^ ((uint16_t)daten << 8);
for (int i=0; i<8; i++)
{
if (crc & 0x8000)
crc = (crc << 1) ^ 0x1021;
else
crc <<= 1;
}
return crc;
}



0x1021 ist das polynom theoretisch müsstest du für deinen fall nur dein polynom anpassen
0xc003 wäre X16+X15+X2+1 bzw. 1100000000000011
für den exponenten einfach das entsprechende bit. in dem 16bit hexwert setzen. das müsste man automatisieren können. über die eingabe der hexzahl könntest du dann halt das zu grunde liegende polynom ändern.