mikrocontroller.net

Forum: PC-Programmierung CRC8 Nachvollziehungsproblem


Autor: tüftler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute,

ich habe anscheinend ein Problem mit einem CRC8 Algorithmus, leider habe 
ich nicht sehr viel Informationen dazu, ich habe nur ein Beispiel und 
das Generatorpolynom, allerdings komme ich mit dem anscheinend üblichen 
Algorithmus von Wiki nicht an das richtige Ergebnis.

Hier mal das Beispiel:
Polynom: 1 0010 1111
Daten: 1110 1001 0101
Verschieberichtung: nach links
--> Ergebnis: 1101 0101

Ich habe schon alles probiert: also Daten von rückwärts nach vorwärts, 
das Ergebnis am Ende nochmal mit dem Polynom zu xor'n usw. leider kam 
ich nie auf das angegebene Ergebnis.
Mir ist auch noch nicht ganz klar was mit dieser Verschieberichtung 
gemeint ist, ich nehme fast an, dass der Fehler dort begraben ist. 
Leider habe ich bisher diesbezüglich noch keine Erklärung gefunden. 
Hättet ihr vielleicht einen Tipp für mich?

Wäre dankbar für jede Anregung! :)

tüftler

: Verschoben durch Admin
Autor: CarbageCollection (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich würde das ASCII Polynom und die ASCII Daten erstmal nach Hex 
umrechnen und dann schauen wieviel Bits man streichen kann. Am Ende 
sollten es nur acht Bits sein und der Rest ist dann rauschen ...

Autor: tüftler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke CarbageCollection,

sowas hatte ich mir auch schon überlegt, aber wie weiß ich denn von 
welcher Seite ich streichen muss? Der 1er am Anfang oder der am Ende? 
Und was meinst du mit Rauschen, schließlich geht es ja um die 
Berechnung...

Autor: Karl K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ist das Generatorpolynom in seiner Breite nicht immer identisch zum 
Algorithmus ? Also 8 Bit CRC und 8 Bit Generatorpolynom ? Da scheint 
sich bei dir ein Fehler eingeschlichen zu haben.

Worum geht es überhaupt ?

Autor: tüftler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Karl K. schrieb:
> Ist das Generatorpolynom in seiner Breite nicht immer identisch zum
> Algorithmus ? Also 8 Bit CRC und 8 Bit Generatorpolynom ? Da scheint
> sich bei dir ein Fehler eingeschlichen zu haben.

Also als Polynom habe ich: x^8+x^5+x3+x^2+x^1+x^0 was ich als 1 0010 
1111 interpretiert habe oder stimmt das so nicht?

Autor: patrick (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das Generatorpolynom lautet in der Tat x^8+x^5+x3+x^2+x^1+x^0 und ist 
somit 9 Bit lang. Allerdings wird die letzte 1 weggelassen. Das 
Generatorpolynom lautet so 0010 1111. Die Daten durch dieses 
Generatorpolynom zu teilen müsste zum gewünschten Ergebnis führen. Viel 
Erfolg!

P.S.: Ein ähnliches Problem hatte ich beim USB-Generatorpolynom, die 
letzte 1 wegzulassen und High- und Low-Byte des Polynoms zu tauschen 
(weil in diesem Fall so spezifiziert) war die Lösung.

Autor: tüftler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
patrick schrieb:
> Das Generatorpolynom lautet in der Tat x^8+x^5+x3+x^2+x^1+x^0 und ist
> somit 9 Bit lang. Allerdings wird die letzte 1 weggelassen. Das
> Generatorpolynom lautet so 0010 1111. Die Daten durch dieses
> Generatorpolynom zu teilen müsste zum gewünschten Ergebnis führen. Viel
> Erfolg!
>
> P.S.: Ein ähnliches Problem hatte ich beim USB-Generatorpolynom, die
> letzte 1 wegzulassen und High- und Low-Byte des Polynoms zu tauschen
> (weil in diesem Fall so spezifiziert) war die Lösung.

Vielen Dank, leider komme ich noch immmer nicht auf das richtige 
Ergebnis. Ganz versthe ich das mit dem Generatorpolynom noch nicht und 
wie ich damit umzugehen habe. Vielleicht gehen wir mal den Algorithmus 
durch:
1) Ich nehme meine Nutzdaten und hänge 8 0 daran, da Polynom 8. Ordnung.
2) Ich gehe zur ersten 1 der Nutzdaten ganz links und schreibe mein 
Generatorpolynom darunter, das mit 1 beginnt.
3) Ich xor'e die beiden Zeilen.
4) Schreibe ich das Generatorpolynom wieder unter das Ergebnis und hole 
die nächsten Stellen von oben runter damit ich sie wieder xor'en kann.
usw. so lange bis ich rechts angekommen bin und der Rest sollte mein CRC 
sein, wenn er weniger als 8 Bit hat, hänge ich noch ein paar Nullen 
daran...

Wie gesagt habe ich schon einiges versucht mit unterschiedlichen 
Reihenfolgen, vertauschten Bytes usw. Fällt euch vielleicht noch ein 
anderer Algorithmus ein, den ich noch probieren könnte?

LG
tüftler

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.