crc16 Berechnen

M

miki

Jungspund
Ich versuche per Netzwerk die Kommunikation mit einem Gerät herzustellen. Dafür nutze ich QTcpSocket, was soweit auch klappt.

Die Übertragungspackete beinhalten eine Checksumme. Laut Beschreibung soll das crc16 sein. Jedoch schaffe ich es nicht auf das gleiche Ergebnis zu kommen, wie in den Beispielen gegeben sind.

Wenn ich folgendes übertrage:
Code:
00:00:00:0e:7d:98:b2:00:ce:64:00:00:00:00:01:01:01:01
Bekomme ich als Antwort:
Code:
00:00:00:0e:00:31:16:80:b6:b2:7d:98:b2:01:02:01:01:01
Wobei die Checksumme bei der Übertragung ce:64 9. und 10. Byte sind.
Beim Antwort die gleiche Bytestellen, b6:b2 sind.

L.t. Anleitung wird die Checksumme berechnet, indem man die erste vier Bytes weg lässt, d.h. 00:00:00:0e wird nicht beachtet. Die Stelle von der Checksumme mit 00:00 überschreibt. Also von folgende Bytes soll die Checksumme berechnet werden:
Code:
7d:98:b2:00:00:00:00:00:00:00:01:01:01:01
und Ergebnis ce:64 erscheinen.
Oder von
Code:
00:31:16:80:00:00:7d:98:b2:01:02:01:01:01
Checksumme b6:b2.

Ich hatte das mit qChecksum unter QT versucht. Dabei wird CRC-16-CCITT verwendet. Das Ergebnis ist jedoch anderes.
Auch das hier hatte ich versucht
http://www.mikrocontroller.net/topic/12177
jedoch ergibt das dortige auch was anderes, als erwünscht.

Daher die Frage, kann mir jemand sagen, wie ich zu obige Checksummen komme?
 
Bei den CRC-Beispielen sind of die Bits und Bytes vertauscht. Habe mich auch damit schon mehrfach abgequält. Versuche mal, die Bits innerhalb eines Bytes zu drehen, bevor Du sie in den CRC einspeist.
 
Danke für die Antwort,

das Problem hat sich erledigt.
Es war kein crc16 (wie die Doku es beschrieb), sondern Checksumme nach RFC1071.

Mangelhafte Dokumentationen, die auch noch Geld kosten sind echt zum :headup:
 

Ähnliche Themen

Festplatte stirbt, dd funktioniert nicht

Wo sind die Geräte?

Modulfehler?

Festplatte friert ein nach suspend/resume

Ubuntu X / dbus problem

Zurück
Oben