Hallo,
ich bin gerade dabei eine Kommunikation zwischen zwei µC zu realisieren.
Als Prüfsumme möchte ich ein simples XOR verwenden und ein Byte hinten
anhängen. Darf ich das ganze in der Dokumentation als CRC bezeichnen
oder trifft das nur auf den aufwendigeren Algorithmus mit
Generatorpolynom zu?
Viele Grüße
Skeith
Das ist kein CRC
Das was du vorhast ist einfach nur eine Prüfsumme
Eine CRC ist eine spezielle Form einer Prüfsumme.
Aber nicht jede Prüfsumme ist eine CRC
Analogie
Ein Fiat Panda ist ein Auto
Ein 7-er BWM ist auch ein Auto
Du versuchst gerade einen Fiat Panda in deiner Doku als 7-er BWM zu
verkaufen.
CRC arbeite normalerweise BIT Weise und mit einem Polynom, daher würde
ich nein sagen.
Warum überhaupt? Damit es toll klingt? CRC in "richtig" ist auch nicht
so schwierig...
OK dann muss ich es doch nur Prüfsummer nennen. Soll für meine
Diplomarbeit sein, daher muss es Formal schon passen.
@Karl Heinz
Anke für diesen anschaulichen Vergleich, hab es begriffen ;)
Ein bytewises XOR ist ganz, ganz schlecht, denn eine gerade Anzahl Mal
dasselbe bit falsch ergibt keinen Fehler. Dann besser eine Summe ueber
alle Bytes ohne den Ueberlauf, dh modulo die highbytes.
Oder, wie schon hingewiesen wurde, ein CRC ist keine Hexerei.
Hey noch Was schrieb:> Ein bytewises XOR ist ganz, ganz schlecht, denn eine gerade Anzahl Mal> dasselbe bit falsch ergibt keinen Fehler. Dann besser eine Summe ueber> alle Bytes ohne den Ueberlauf, dh modulo die highbytes.
Kommt das bei 2*n-fach gekipptem Bit nicht auch auf das Gleiche raus?
MCUA schrieb:> aber auch ein 'richtiger' CRC ist nicht 100% sicher.
Nichts ist 100% sicher.
Es ist nun mal nicht möglich x Bits auf y Bits einzudampfen ( y < x ),
ohne das irgendetwas auf der Strecke bleibt. Und letzten Endes tut man
das ja genau hier. Wenn es möglich wäre mittels einer Prüfsumme von
jedem einzelnen Bit in allen Fällen exakt sagen zu können, ob es richtig
ist, dann bräuchte man nur die Prüfsumme übertragen und der Empfänger
könnte daraus die erzeugenden Bits korrekt rekonstruieren :-)
Die verschiedenen Prüfsummen-Verfahren unterscheiden sich letzten Endes
nur darin, welche typischen Übertragungsfehler sie erkennen (bzw.
korrigieren) können.
Klaus Wachtler schrieb:> Das erste C in CRC ist cyclic, und das fehlt bei XOR
Wenn man man bös aufgelegt ist, dann kann man das als 8 parallele 1-Bit
CRCs sehen - so betrachtet ist das durchaus zyklisch. ;-)
So böse bin ich aber nicht.
Du?
(Ich hatte auch schon im Kopf, das Nicht-Shiften als Shiften um 0
Stellen zu verkaufen, um das C zu rechtfertigen, hatte es mir aber
dann doch verkniffen.
Dann kommst du mit sowas...)
>Wenn es möglich wäre mittels einer Prüfsumme von>jedem einzelnen Bit in allen Fällen exakt sagen zu können, ob es richtig>ist, dann bräuchte man nur die Prüfsumme übertragen und der Empfänger>könnte daraus die erzeugenden Bits korrekt rekonstruieren :-)
Das DWIW-Modul neuerer AVR kann sowas ;)
SCNR
>Die verschiedenen Prüfsummen-Verfahren unterscheiden sich letzten Endes>nur darin,
..wieviel redundante Bits zu der eigentl. Nutz-Infornation hinzugefügt
werden (und nach welchem Schema das geschicht). Und je mehr redund. Bits
desto besser (sofern das Erzeugungs-Schema nicht zu billig ist).
Theoretisch gesehen wäre auch ein Parity-Bit eine CRC, nämlich eine CRC
mit 1-Bit-Länge.
Solch eine XOR-Operation als Prüfsumme zu bezeichnen ist aber irgendwie
auch falsch, denn es ist ja nicht wirklich eine Summe von irgendwas.
Oder sehe ich das falsch?
Jaein.
Der Begiff hat sich eingebürgert, auch dann wenn die Operation über alle
Datenbytes Bytes streng genommen keine Addition ist.
Prüfsumme = Funktion( Datenbytes )
Was genau die Operation ist, spielt dann wieder eniger eine Rolle. Der
Begriff Summe drückt nur in einer gewissen Weise aus, dass alle Bytes
beteiligt sind, so wie in
Summe = Byte1 + Byte2 + Byte3 + Byte4 + ...