Forum: Mikrocontroller und Digitale Elektronik Hilfe bei Dekodierung von Checksummen Berechnung


von Michi (Gast)


Angehängte Dateien:

Lesenswert?

Hallo, mangels C-Kenntnis komm ich nicht dahinter wie hier (siehe Bild) 
die Checksumme von zwei Bytes berechnet wird?

von Dergute W. (derguteweka)


Lesenswert?

Moin,

Es gibt hier:
https://reveng.sourceforge.io/
eine Software, die ich fuer solche "CRC-Sauereien" recht gut geeignet 
finde.

Damit kann ich zumindest das Beispiel links auf deinem Foddo so 
nachvollziehen:
1
reveng -m "CRC-8/NRSC-5" -c beef
2
92
Unn nu?

Gruss
WK

von Thomas (kosmos)


Lesenswert?

ich hatte das mal für einen CAN Nachricht hier aufklabustert, vielleicht 
hilft dir das ja, das Ganze zu verstehen.

https://www.mikrocontroller.net/articles/CAN_CRC_Berechnung

von Michi (Gast)


Lesenswert?

Dergute W. schrieb:
> Unn nu?

Ja ganz nett nur hätte ich gern die konkrete Berechnungsverschrift in 
diesem Fall. Und sehr gerne würde ich verstehen was nun der Vorteil so 
berechneter Checksummen (im Vergleich zur einfachen Summe) ist.

von Dergute W. (derguteweka)


Lesenswert?

Moin,

Vielleicht hilft dir der "painless guide":

https://zlib.net/crc_v3.txt

Gruss
WK

von Michi (Gast)


Lesenswert?

Dergute W. schrieb:
> Vielleicht hilft dir der "painless guide":

Ja danke, dort ist immerhin erklärt welche Schwächen die einfache Summe 
mod 256 hat...

von Jan V. (janv)


Lesenswert?

Sonst niemand hier der das dekodieren könnte?

von Dergute W. (derguteweka)


Lesenswert?

Moin,

Jan V. schrieb:
> Sonst niemand hier der das dekodieren könnte?

Was willst du denn dekodieren?

Gruss
WK

von Jan V. (janv)


Lesenswert?

Dergute W. schrieb:
> Was willst du denn dekodieren?

Den C-Code. Wie die Checksumme nun genau berechnet wird.
Dank

Dergute W. schrieb:
> Es gibt hier:
> https://reveng.sourceforge.io/
> eine Software

kann ich die nun wenigstens berechnen lassen
(wenn 92 kein Zufallsergebnis war)

: Bearbeitet durch User
von Dergute W. (derguteweka)


Lesenswert?

Moin,

Axo, Jan V. == Michi.

Jan V. schrieb:
> Dergute W. schrieb:
>> Was willst du denn dekodieren?
>
> Den C-Code. Wie die Checksumme nun genau berechnet wird.

Puh, das ist halt etwas schwierig, wenn du kein C kannst. Kannst du 
irgendeine andere Programmiersprache?

CRC ist in jeder Sprache immer ein lustiges Geschiebe und ver-xordern. 
Manchmal mit Tabelle (auf mehr als 1bit Basis), manchmal ohne, so wie 
hier auf 1bit Basis.
Mal ganz unter uns: Ich kann zwar C und weiss ungefaehr was es mit CRC 
auf sich hat, aber ich koennte ausm Stegreif so ein Programm eher nicht 
schreiben.
Wenn ich wirklich die Innereien von sowas selber verstehen will/muss, 
muss ich mich jedesmal neu durch den ollen "Painless Guide" quaelen. 
Danach vergesse ich das immer ziemlich schnell. Aber nicht weitersagen 
;-)

Gruss
WK

von Irgend W. (Firma: egal) (irgendwer)


Lesenswert?


von asd (Gast)


Lesenswert?

Welche Programmiersprachen kannst du denn? Mit der Info könnte jemand 
den C Code in was übersetzten was du verstehst. Wenn gar keine 
Programmiersprache, dann geht das auch, ist aber aufwändiger.

von Jan V. (janv)


Lesenswert?

asd schrieb:
> Mit der Info könnte jemand
> den C Code in was übersetzten was du verstehst.

Der Aufwand wär ja gar nicht nötig, eine einfache Rechenvoschrift genügt 
mir schon. Das sollte doch kein Problem sein wenn man C kennt?

von Dergute W. (derguteweka)


Lesenswert?

Setze den crc wert auf 255.
Fuer jedes datenbyte, ueber das du den CRC berechnen willst, beginnend 
mit dem ersten Byte und hier aufhoerend mit dem 2.Byte tust du:
    Verknuepfe den crc wert mittels xor mit dem aktuellen Byte.
    Und jetzt genau 8mal:
        wenn das MSB von crc gesetzt ist, dann wird der neue Wert von 
crc so berechnet:
            der alte wert von crc wird um eine binaerstelle nach links 
geschoben, dann mit der Konstanten 0x31u, die da auf dezimal heissen 
wuerde: 49, exclusiv oder verknuepft.
        sollte das MSB von crc nicht gesetzt sein, dann wird der neue 
Wert von crc so berechnet:
            der alte wert von crc wird um eine binaerstelle nach links 
geschoben
so, wenn das jetzt 8mal passiert ist, und alle (hier beiden) datenbytes 
zur Berechnung herangezogen wurden, dann und nur dann ist crc der wert 
und der wert ist crc.
Gepriesen sind die Skifahrer. (Mann, muss mir fade sein)

Gruss
WK

von Jobst M. (jobstens-de)


Angehängte Dateien:

Lesenswert?

1. Du füllst 8 Flip-Flops mit 1-en.
2. Dann verXORst Du den Inhalt mit dem nächsten zu verarbeitenden 
Datenbyte. (Beim 1. Durchlauf natürlich das 1. Byte!)
3. Dann stellst Du Dir die Flip-Flops wie im Bild verschaltet mit den 
XORs vor und gibst allen FFs gleichzeitig hintereinander 8 Takte.
4. Dann gehst Du zu 2, sofern Du noch Daten hast.
5. In den 8 Registern steht nun Deine CRC.


Gruß
Jobst

: Bearbeitet durch User
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
Noch kein Account? Hier anmelden.