Hi Also ich weiß, dass es hier viele Threads gibt, die sich mit dem Thema CRC-8 befassen aber ich hab leider nix gefunden, was mich wirklich weiterbringt. Folgendes Problem: Hier wird für Hexadezimale Messages eine CRC 8 Checksumme erstellt und ich soll schaun ob die richtig berechnet wird. Generatorpolynom ist x^8+x^2+x+1 (Ist Standard glaub ich) z.B. 83 60 00 64 64 Checksumme ==> 0x91 (145dec) 93 60 00 64 64 Checksumme ==> 0x69 (105dec) A3 60 00 64 64 Checksumme ==> 0x66 (102dec) usw hoffe die drei Messages reichen euch. Da ich mit diesem Polynom beim Nachrechnen nicht auf die entsprechende Checksumme gekommen bin hab ich mal in den Quellcode geschaut und gesehen, dass das Generatorpolynom mit 0x83 angegeben ist also 1000.0011 binär. (statt 1.0000.0111 für x^8+x^2+x+1) Auf Nachfrage hab ich erfahren, dass die rechte eins schon "fest" in den Code eingebaut ist, also intern wirklich mit 0x107 der CRC berechnet wird. Problem ist nur, dass ich immernoch nicht auf die entsprechende Checksumme komme, weder mit 0x83 noch mit 0x107 gerechnet. (Quellcode darf ich leider nicht posten :/ ) Was ich jetzt gerne von euch wissen würde, ob es noch andere Möglichkeiten gibt den CRC-8 zu berechnen als der "normale" Weg. Hab gelesen, dass es auch Reverse CCITT (oder so ähnlich) gibt usw., allerdings war alles im Zusammenhang mit CRC16. Der normale Weg ist für mich der, wie er hier zum Beispiel erklärt wird. http://de.wikipedia.org/wiki/Zyklische_Redundanzpr%C3%BCfung Wie gesagt welche Möglichkeiten gibt es noch mit Bitdrehung etc. CRC-8 zu berechnen? Oder sieht jemand anhand der Checksumme was da schiefläuf? ;) Vielen Danke schon mal Marco
Guck mal bei Maxim, die haben für einen Ihrer Temperatursensoren eine Application-Note, in der sie CRC verwenden. Nach dieser habe ich meine eigenen CRC-Funktionen geschrieben. Dann kannst du deinen Quellcode mit deren Code vergleichen. Gruß Ralf
sehr effektiv ist auch folgendes: erst alle bytes addieren (dafür wirst du ein word brauchen) dann das word mod 255 dann 255-ergebniss der vorherigen operation... so mache ich es immer...
Hallo Marco, Ich habe die Beispiele mal nachgerechnet. Berechnet wird das ganze LSB-first (Reverse), die CRC wird mit 0 initialisiert. Als Polynommaske habe ich 0x83 verwendet. Das sind die Zwischenergebnisse der 3 Beispiele: 83 60 00 64 64 = 91 1. Byte (83): 83-41-A3-D2-69-B7-D8-EF 2. Byte (60): F4-7A-3D-9D-CD-66-B0-58 3. Byte (00): 2C-16-0B-86-43-A2-51-AB 4. Byte (64): D6-6B-35-99-CF-67-33-9A 5. Byte (64): 4D-A5-52-29-97-4B-25-91 93 60 00 64 64 = 69 1. Byte (93): 83-41-A3-D2-EA-75-B9-5C 2. Byte (60): 2E-17-88-44-22-92-CA-65 3. Byte (00): B1-DB-EE-77-B8-5C-2E-17 4. Byte (64): 88-44-A1-D3-EA-F6-F8-7C 5. Byte (64): 3E-1F-0F-84-42-A2-D2-69 A3 60 00 64 64 = 66 1. Byte (A3): 83-41-A3-D2-69-34-1A-8E 2. Byte (60): 47-A0-50-28-14-89-44-22 3. Byte (00): 11-8B-C6-63-B2-59-AF-D4 4. Byte (64): 6A-35-1A-0D-85-42-A2-51 5. Byte (64): AB-D6-E8-74-3A-9E-CC-66 Gruß Thomas
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.