CRC16 in Java

SirOlix

Grünschnabel
Hallo zusammen,

ich bin auf der Suche nach dem richtigen Algorithmus für einen CRC16, bzw. suche ich das korrekte GeneratorPolynom.

Ich habe folgendes Problem:
Ich sende Daten über die serielle Schnittstelle an eine Wärmepumpe. Der Datenstrom ist wie folgt aufgebaut:

DLE STX <KOMMANDO> DLE ETX <CRC>

DLE = 0x10
STX = 0x02

<KOMMANDO> = <CMD> <ADR> <ANZ>
<CMD> = 0x01 0x15 //Lesen aus dem Gerät
<ADR> = 0x00 0x00 //Adresse, ab welcher gelesen werden soll
<ANZ> = 0x00 0x02 //Anzahl der Bytes die gelesen werden sollen

DLE = 0x10
ETX = 0x03

<CRC> = soll der CRC16 mit GeneratorPolynom 0x8005 sein. (init=0 und lsb=0), wobei mit die letzten Parameter nichts sagen ;-(

Der CRC soll angeblich über das <KOMMANDO> gebildet werden.

Es gibt bereits ein DEMO Programm unter Windows, welches mit der Wärmepumpe kommuniziert. Daher sind auch die bekannten CRCs.
Ich möchte die CRCs aber nicht hard codieren, da es noch andere Adressen gibt, für welche noch keine gesnifften CRCs existieren.

Hier aber ein Beispiel für ein funktionierendes CRC

0x10 0x02 0x01 0x15 0x00 0x00 0x00 0x02 0x10 0x03 0xFE 0x17

0xFE 0x17 ist die CRC.

Ich habe schon mehre Algorithmen gefunden, habe aber keinen Erfolg gehabt.
Kann mir einer von Euch sagen, wie der Algorithmus in Java richtig aussieht und was vielleicht das korrekte GeneratorPolynom ist.

Vielen Dank,
SirOlix
 
Hallo,

<CRC> = soll der CRC16 mit GeneratorPolynom 0x8005 sein. (init=0 und lsb=0), wobei mit die letzten Parameter nichts sagen ;-(
Also (AFAIK) steht init für den anfangswert mit dem der CRC Wert initialisiert wird und lsb steht für least significant bit -> http://de.wikipedia.org/wiki/Bitwertigkeit

Es gibt für Java zahlreiche CRC16 Implementierungen:
http://www.jonelo.de/java/jacksum/#FAQ
http://www.google.de/search?hl=de&q=java+crc16+8005&btnG=Suche&meta=

... ist aber scheinbar nicht so einfach da die richtigen Werte herauszubekommen...

Gruß Tom
 
Hallo zusammen,

vielen Dank für die Infos. Ich habe das Problem mit jacksum lösen können.
Das Tool kann mehr als es auf den ersten Blick verrät ;-)

Ich habe zwar das JAR File eingebunden, weil ich den Algorithmus nicht genauer unter die Lupe nehmen wollte, aber das führt auch zur Lösung meines Problems.

Viele Grüße
SirOlix
 

Neue Beiträge

Zurück