Forum: Mikrocontroller und Digitale Elektronik one byte checksum


von Herbert A. (onlineuser)


Lesenswert?

Hallo,

habe folgendes Problem. Möchte eine serielle Verbindung zur Wärmepumpe 
nachbauen.

Nun hab ich das Problem, eine Checksumme für die diversen Befehle zu 
berechen. Hier mal ein Beispiel:

Ein Paket wäre:

~RID;p      02 fd d0 e0 00 00 05 7e 52 49 44 3b     70
(das wäre das gesamte Paket)

Die Nutzdaten sind:

                                 7e 52 49 44 3b     70

Bei diesem Datenpaket ist die Checksumme 70 (alle Werte in hex).

Nun die Frage, wie man diese berechnet?

(Zeichensumme MOD 256 hab ich probiert und alle Zeichen miteinander mit 
XOR). Kommt aber etwas anderes raus.

Hoffe, mir kann hier jemand helfen.

Liebe Grüsse.

von (prx) A. K. (prx)


Lesenswert?

8-Bit CRC?

von Herbert A. (onlineuser)


Lesenswert?

Naja aber es gibt auch Pakete, die mehr als 8 Byte Nutzdaten beinhalten. 
Dann kann man ja keine "one-byte-checksum" mehr berechnen!?

von (prx) A. K. (prx)


Lesenswert?

Wenn man fehlerkorrigierende Codes mal aussen vor lässt, dann gibt es 
keinen Zusammenhang zwischen Länge des Pakets und Länge der Prüfsumme, 
egal wie die ermittelt wird. Nur die Wahrscheinlichkeit eines 
unerkannten Übertragungsfehlers wächst.

von Herbert A. (onlineuser)


Lesenswert?

Ja, ob es in dem Falle sinnvoll ist oder nicht, ist egal, weil ich 
versuche diese Verbindung nur nachzubauen, jedoch, wenn ich neue Befehle 
an die Wärmepumpe schicken möchte, muss ich halt genauso nach diesem 
Schema meine Checksummen generieren können.

von Gast (Gast)


Lesenswert?

das Problem dürfte wohl sein, dass hier jeder Entwickler seine eigene 
Methode verwirklichen kann.

Hab auch schon CRC's gesehen bei dennen das Byte mit 0xAA vorgeladen 
wurde, anschließen wurden die Nutzdaten Byte für Byte verundet und 
darauf wurde nochmals 0x55 dazugezählt!

Wenn Du nicht weißt wie das CRC erstellt wird dürfte es sehr schwierig 
sein. Hast Du denn die Möglichkeit die Nutzdaten zu beeinflußen? evt. 
kommst Du drauf wenn Du die Nutzdaten immer um "1" erhöhst!

von Herbert A. (onlineuser)


Lesenswert?

Ja, ich hab folgendes Paket gesnifft.

~RID,44556;        Checksum O

Dann hab ich mal ~RID,55446; mit Checksum O abgesetzt und es hat auch 
funktioniert.

Dann hab ich mir die Summe von 55446 berechnet (53+53+52+52+54=264) und 
dann durch 33864 (51*2+56+54+52=264) ersetzt und siehe da, dann wurde 
das Paket nicht mehr angenommen -> also war die Prüfsumme falsch, obwohl 
die Summe der Nutzdaten noch gepasst hat. Aber eine Durchmischung hat 
die Prüfsumme nicht geändert.

Ich weiss wohl, dass es schwer ist, das zurückzurechnen, jedoch die 
Wärmepumpe setzt sicher einen Standard RS232 Bauteil ein und daher 
glaube ich, sollte es machbar sein. Werde mal versuchen rauszufinden, 
welcher IC das ist. Aber hat vielleicht sonst noch jemand eine Idee?

von (prx) A. K. (prx)


Lesenswert?

Wenn dass die Prüfsumme nicht in Hardware ("Standard RS232 Bauteil") 
berechnet wird?

von Herbert A. (onlineuser)


Lesenswert?

Aber die meisten RS232-ICs werden wohl einen anerkannten Standard bei 
der Prüfsummenberechnung einsetzen!?

von Sebastian (Gast)


Lesenswert?

Aber nein. Denn die Prüfsummenberechnung wird praktisch immer in 
Software gemacht. Und die Firmware der Wärmepumpe hat ein Entwickler der 
entsprechenden Herstellerfirma geschrieben, nach Vorgaben seines 
Arbeitgebers und einem gewissen Anteil eigenem Ermessen.

Man kann eine Prüfsumme auf die unterschiedlichsten Arten bilden, 
Aufsummieren aller Bytes ohne Übertrag, Exklusiv-Oder-Verknüpfung aller 
gesendeten Bytes, CRC8...

von Herbert A. (onlineuser)


Lesenswert?

Achso meinst du - ja ok.

Gibts eigentlich kein Reverse Ingeneering Tool für solche Aufgaben? ;)

von (prx) A. K. (prx)


Lesenswert?

Herbert A....... wrote:

> Aber die meisten RS232-ICs werden wohl einen anerkannten Standard bei
> der Prüfsummenberechnung einsetzen!?

Asychrone RS232 Hardware mit integrierter Prüfsumme ist mir noch nicht 
untergekommen. Üblich ist das nur bei synchroner Kommunikation, und dann 
als 16 Bit CRC.

von Marcus H. (mharnisch) Benutzerseite


Lesenswert?

Herbert A....... wrote:
> Aber die meisten RS232-ICs werden wohl einen anerkannten Standard bei
> der Prüfsummenberechnung einsetzen!?

Versuch's doch mal mit den üblichen Polynomen:
http://en.wikipedia.org/wiki/Cyclic_redundancy_check#Commonly_used_and_standardized_CRCs

Gruß
Marcus
http://www.doulos.com/

von noch_ein_gast (Gast)


Lesenswert?

Am leichtesten ;-) nimmst du mehrere Sequenzen auf und
erstellst ein Gleichungssystem. Ist zwar auch nur trial and error aber 
du hast vielleicht Glück und triffst das Richtige!

Halte ich persönlich aber für sehr Aussichtslos... Am Besten mal lieb 
beim Hersteller anfragen, vielleicht hast du ja Erfolg (mit Verweis auf 
Garantieverlust usw.)

LG

von Herbert A. (onlineuser)


Lesenswert?

Danke für die Hinweise. Wer mal weiterprobieren! :)

von LinkBot (Gast)


Lesenswert?


von Herbert A. (onlineuser)


Lesenswert?

Na halt durch! dort reden die ja genau über dasselbe Gerät! :)

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.