Forum: Mikrocontroller und Digitale Elektronik CRC / Prüfsumme knacken


von Ingo F. (ingof)


Angehängte Dateien:

Lesenswert?

Hallo,

ich habe mir für viel Geld einen SMI-Controller und die dazugehöhrigen 
Schaltaktoren gekauft.

Die Einheit hat 600 Euro gekostet. Scheint aber für den Hersteller wohl 
zuwenig zu sein. Support gibt es jedenfalls keinen. Versuche schon seit 
zwei Jahren das Sommerzeitproblem zu lösen. Statt nur zu sagen Jetzt ist 
Sommerzeit muss ich auch noch alle Schaltzeiten und die Uhrzeit ändern.

Es heisst immer dass ich bald eine Antwort bekomme.. Aber nach 
mehrfachen Nachfragen sollte es doch nach etwa 1,5 Jahren doch zumindest 
irgendeine Antwort geben!

Da ich also kein Support bekomme will ich das Teil entsorgen und nur 
noch die Schaltaktoren verwenden. Alternativee wäre alle Rollokästen 
wieder zu öffnen und eigene Aktoren zu basteln. Das gäb aber zuviel 
Sauerrei. AUßerdem sind die Kästen beim renovieren noch mal überstrichen 
worden und wollte jetzt nicht schon wieder von vorne anfangen.

Nur scheint es an der Prüfsumme zu scheitern.
Ich vermute eine eine CRC16 komme aber auf keinen grünen Zweig.

Im internet habe ich einen Test gefunden der bei mir nicht so ganz 
funktioniert:
http://code.google.com/p/intelligent-level-editor/wiki/CRCReverseEngineering

Mein Check an drei aufgeschnappten Telegramme funktionierte nicht.
Habe mal den Versuch in der PDF angehangen.

Unter "Punkt 3. CRC?" der Test funktioniert nicht Wenn es ja keine 
"echte" CRC wäre müssten doch zumindest die XOR-Test der Daten gleich 
positiv sein. Vermute dass ich dort irgendwas falsch verstanden habe.

Kann mir irgendjemand eine Tipp geben was da falsch läuft?

Oder wie bekomme ich raus ob es eine CRC ist oder nicht?

: Verschoben durch User
von Wegstaben V. (wegstabenverbuchsler)


Lesenswert?

um welchen Hersteller bzw. um welches Produkt handelt es sich denn?

von Ingo F. (ingof)


Lesenswert?

Wegstaben Verbuchsler schrieb:
> um welchen Hersteller bzw. um welches Produkt handelt es sich
> denn?

Keine Ahnung ob ich den Hersteller nennen darf. Außerdem ist dieser 
SMI-Controller für mich zu unflexible. Und auf die Dauer muss das "Ding" 
sowieso raus.

Ist mir nur unvertändlich warum ich einfach keinen Support bekomme.

von Tüftleer (Gast)


Lesenswert?

Ingo F. schrieb:
> Wegstaben Verbuchsler schrieb:
>> um welchen Hersteller bzw. um welches Produkt handelt es sich
>> denn?
>
> Keine Ahnung ob ich den Hersteller nennen darf. Außerdem ist dieser
> SMI-Controller für mich zu unflexible. Und auf die Dauer muss das "Ding"
> sowieso raus.
>
> Ist mir nur unvertändlich warum ich einfach keinen Support bekomme.

Doch, darfst du!

Ohne den Hersteller und den Typ des Moduls kann dir keiner helfen!
Dein Problem haben mehrere und ich vermute es gibt ne lösung!

von Wegstaben V. (wegstabenverbuchsler)


Lesenswert?

Ingo F. schrieb:
> Keine Ahnung ob ich den Hersteller nennen darf.

Wer sollte das dir verweigern, und aus welchem vermuteten Grund?

> Außerdem ist dieser SMI-Controller für mich zu unflexible.

weil er nicht gescheit Sommerzeit berücksichtigt?

> Und auf die Dauer muss das "Ding" sowieso raus.

weil er nicht gescheit Sommerzeit berücksichtigt?

> Ist mir nur unvertändlich warum ich einfach keinen Support bekomme.

vielleicht kannst du dein Problem nicht geeignet adressieren beim 
Hersteller ....



wg. deinem CRC-Problem: Ich dachte, die Komponenten sind untereinander 
kompatibel ... gibt es denn keine technische Spezifikation des 
Protokolls, an dem sich alle Herstelelr halten (müssen)?

: Bearbeitet durch User
von Ingo F. (ingof)


Lesenswert?

Wegstaben Verbuchsler schrieb:
>> Außerdem ist dieser SMI-Controller für mich zu unflexible.
> weil er nicht gescheit Sommerzeit berücksichtigt?
>
>> Und auf die Dauer muss das "Ding" sowieso raus.
> weil er nicht gescheit Sommerzeit berücksichtigt?

Bei der SMI-Control Unit kann man nur eine Sperrzeit für das öffnen und 
schließen der Rolladen angeben.

Außerdem habe ich die Idee meinen Rolladen den Sonnenstand zu folgen.
Wenn also die Sonne von Norden scheint. Warum sollen dann die Rolladen 
im Süden auf verdunnkeln.

Ganz nett wäre es auch einige bestimmte Rolladen erst mal leicht zu 
öffnen und dann alle paar Minuten etwas weiter zu öffnen. Also nicht von 
komplett dunkel auf Tag hell innerhalb von wenigen Sekunden.

Andere Spielereien wie z.B. Beim offnen eines Fensters auf Kipp geht das 
Rollo soweit los dass die Schlitze nur zu sehen sind. Wenn man es ganz 
aufmacht soll es ganz losgehen. Ohne noch erst zum Schalter zu gehen.

Das ganze Geraffel mit Fenster öffnen ist kein Problem und die Hardware 
wurde auch schon eingebaut.

Wegstaben Verbuchsler schrieb:
> vielleicht kannst du dein Problem nicht geeignet adressieren beim
> Hersteller ....

Wie meinst Du das?

Ich habe bei der Technikabteilung angerufen habe mein Problem 
geschildert. Denke das war auch verständlich für den Ansprechpartner. 
Selbst wenn er es nicht verstanden hat könnte man ja noch nachfragen. 
Habe es auch vorher über das Kontaktformular der Webseite probiert. 
Hatte aber auch nichts gebracht.

Meiner Einschätzung nach ist ein Endkunde der etwa 3000€ augegeben hat 
kein Grund mal irgendwie zu antworten. Bin wohl nicht die Zielgruppe. 
Eine andere Erklärung habe ich im Moment nicht.

: Bearbeitet durch User
von Ingo F. (ingof)


Lesenswert?

Wegstaben Verbuchsler schrieb:
> weil er nicht gescheit Sommerzeit berücksichtigt?

Ja, das auch.

Es gibt eine Automatik für Sommer/Winterzeit die bei mir nicht 
funktioniert.

Wenn ich die Manuell auf Sommerezit oder Winterzeit umschalte 
funktioniert es auch nicht. Die Uhrzeit umstellen klappt wohl. Dann 
stimmen aber die Zeitschalten und oder die Berechnung des Sonnenaufgangs 
oder des Sonnenuntergangs nicht mehr.

Es gibt ja auch Probleme dass Aktoren nachträglich nicht angelernt 
werden können. Wenn ich z.B. mal einen Schalter unbenutzt lasse ist er 
aus der Control Unit heraus und ich muss noch mal komplett mit dem 
Wizard anfangen. Allso ALLE Schalter wieder zu jedem einzelnen Rollo 
zuordnen.

Es gibt zwar einen Menüpunkt dafür, aber der Funktioniert nicht richtig. 
Oder besser gesagt garnicht..

Also eigentlich viel Geld für keinen Support und einige Bugs.

: Bearbeitet durch User
von NaNa_JaJa (Gast)


Lesenswert?

>>Wenn also die Sonne von Norden scheint. Warum sollen dann die Rolladen
im Süden auf verdunnkeln.<<

Wo wohnst du denn ?
Bei mir geht die Sonne  im Osten auf,steht Mittags im Süden und geht im 
Westen unter.

von IngoF (Gast)


Lesenswert?

NaNa_JaJa schrieb:
> Wo wohnst du denn ?
> Bei mir geht die Sonne  im Osten auf,steht Mittags im Süden und geht im
> Westen unter

Ups...
War für meinen Wohnort wohl falsch. ...Wohne auch auf der Nordhalbkugel 
;-)

Also:
Wenn also die Sonne von Süden scheint. Warum sollen dann die Rolladen
im Norden auch verdunkeln.


Aber eigentlich bin ich jetzt von meinen CRC-knacken Problem wohl etwas 
zu weit abgeschweift...

von Werner M. (Gast)


Lesenswert?

IngoF schrieb:
> Aber eigentlich bin ich jetzt von meinen CRC-knacken Problem wohl etwas
> zu weit abgeschweift...

... und hast dabei ganz vergessen, dass du noch Hersteller und 
Produktbezeichnung kund tun wolltest, um mit dem eigentlichen Problem 
weiter zu kommen.

von Ingo F. (ingof)


Lesenswert?

Werner M. schrieb:
> ... und hast dabei ganz vergessen

Nein, nicht vergessen...
Nur beim "umbauen" der Antwort irgendwie wohl wieder verschwunden.

Es ist die "SMI-Control Unit" mit Massenhaft "SMI-Switch-Bus Connector" 
und entsprechenden SMI-Antrieben.
Alles von SELVE

Wegstaben Verbuchsler schrieb:
> wg. deinem CRC-Problem: Ich dachte, die Komponenten sind untereinander
> kompatibel ... gibt es denn keine technische Spezifikation des
> Protokolls, an dem sich alle Herstelelr halten (müssen)?

Wenn das nicht sogar bei einem Hersteller kompatibel ist, wo dann.

Der SMI-Bus ist ja durch die SMI-Group dokumentiert, Aber auch nur für 
"Mitglieder" zugänglich. Aber darum geht es mir nicht.
Mir geht es um die Switch-Bus-Connectoren.. Irgendwie ist dort nur noch 
die Prüfsumme für mich rätselhaft. Der Rest ist schon so gut wie klar.

Die Switch-Bus-Connectoren sind eine Eigenentwicklung von SELVE. 
Natürlich werden die mir wohl nicht das Protokoll verraten...

von Konrad S. (maybee)


Lesenswert?

Ingo F. schrieb:
> Das ganze Geraffel mit Fenster öffnen ist kein Problem und die Hardware
> wurde auch schon eingebaut.

Nicht dass es zum Thema passen würde oder gar dir ;-) weiterhelfen 
würde, aber mich interessiert, wie deine Lösung dafür aussieht. Magst du 
etwas dazu sagen?

von Thomas (kosmos)


Lesenswert?

werden da immer 3 Nachrichten übertragen? Kannst du 2 mal die gleichen 
Daten übertragen um zu sehen ob die Prüfsumme gleich bleibt, könnte sein 
das sich das Polynom ändert welches du eh nicht kennst.

von IngoF (Gast)


Lesenswert?

Konrad S. schrieb:
> Ingo F. schrieb:
>> Das ganze Geraffel mit Fenster öffnen ist kein Problem und die Hardware
>> wurde auch schon eingebaut.
>
> Nicht dass es zum Thema passen würde oder gar dir ;-) weiterhelfen
> würde, aber mich interessiert, wie deine Lösung dafür aussieht. Magst du
> etwas dazu sagen?

Eine Platine mit einem PIC18F2680.

Mit:
1
24V/5V Wandler   (für Switchbus und Stromversorgung
2
5V-Ausgang        (zur Versorgung evtl. anderer Baugruppen wie z.B. Switchbus Connector)
3
RS485             (für Switchbus)
4
CAN (isoliert)    (für die Kommunikation mit Server)
5
"230V-Schalter"   (für PWM (Heizkörper Thermostat)
6
1-Wire            (für 18B20)
7
4 Fensterkontakte (zwei Fenster mit Auf-/Kipperkennung)
8
Lochrasterteil    (für Erweiterung)

Sicher könnte ich damit die Switchbus-Connectoren ganz erzestzen...

Hat aber den Nachteil dass ich wieder an die Rolladenkästen müsste...

Gruß
IngoF

von IngoF (Gast)


Lesenswert?

IngoF schrieb:
> Mit:
1
S=-Bus     (für Stromzähler)

noch vergessen...

von IngoF (Gast)


Lesenswert?

IngoF schrieb:
> IngoF schrieb:
>> Mit:S=-Bus     (für Stromzähler)
> noch vergessen...

... Sollte S0-Bus heissen

von c-hater (Gast)


Lesenswert?

Ingo F. schrieb:

> Wenn also die Sonne von Norden scheint.

Das tut sie nur an einem einzigen Punkt der Erde, und zwar am Südpol, 
soviel ist mal sicher. Ist aber auch dort kein Problem, denn an dieser 
Singulariät zeigt auch jede Wand des notwendigerweise infinitiv kleinen 
Hauses nach Norden und außerdem scheint die Sonne, wenn sie denn 
scheint, dort auch immer von Norden...

Das liegt allerdings nur daran, daß es dort eben nur eine Richtung gibt. 
An jedem anderen Punkt der Erde hingegen scheint die Sonne niemals von 
Norden.

von IngoF (Gast)


Angehängte Dateien:

Lesenswert?

Thomas O. schrieb:
> werden da immer 3 Nachrichten übertragen? Kannst du 2 mal die gleichen
> Daten übertragen um zu sehen ob die Prüfsumme gleich bleibt

Nein, die drei Telegramme sind nur Beispiele um zu erkennen ob es eine 
"echte" CRC ist. Aber die Methode scheint bei meinem Beispiel nicht zu 
klappen.

Die Methode habe ich aus dem dort angegebenen Link.

Es wird immer ein Telegramm übertragen und vom Master beantwortet.
Die Prüfsumme bleibt immer gleich.

Habe mal alle Telegramm mitgeschnitten und die doppelten Einträge 
rausgeschmissen.

Hänge ich einfach mal an..

von Werner M. (Gast)


Lesenswert?

Ingo F. schrieb:
> Natürlich werden die mir wohl nicht das Protokoll verraten...

Bist du dir mit der Interpretation des Datenstromes sicher.
Hier sieht das etwas anders aus
Beitrag "Re: Gibt es irgendwo brauchbare Infos zu SMI ?"
Und dort läuft es auf eine Prüfsumme mit Byteaddition hinaus.

von IngoF (Gast)


Lesenswert?

c-hater schrieb:
> Das tut sie nur an einem einzigen Punkt der Erde,

gut dann eben aus "Richtung" Norden :-P

Aber darum geht es hier eigentlich.

Und die möglichkeit dass von allen Seiten gleich viel Licht 
hereinstrahlt (starker Nebel) möchte ich auch mal vernachlässigen. Dann 
benötigt man eh keine Verdunklung).

Es sei denn ich hau mich aufs Ohr...

von IngoF (Gast)


Lesenswert?

IngoF schrieb:
> Aber darum geht es hier eigentlich. NICHT

von Thomas (kosmos)


Lesenswert?

ich würde deine Nachrichten mal durch ein paar Online CRC Rechner jagen, 
mit etwas Glück verwenden die ein gängiges Polynom und machen keine 
Bitmanipulationen bevor es in den CRC Rechner geht.

von Georg G. (df2au)


Lesenswert?

c-hater schrieb:
>> Wenn also die Sonne von Norden scheint.
>
> Das tut sie nur an einem einzigen Punkt der Erde

Kriech mal aus deinem Keller. Nördlich des Polarkreises scheint die 
Sonne im Sommer auch aus Norden.

von Konrad S. (maybee)


Lesenswert?

IngoF schrieb:
> Eine Platine mit ...

Danke!

von Mike (Gast)


Lesenswert?

c-hater schrieb:
> Das tut sie nur an einem einzigen Punkt der Erde, und zwar am Südpol,
> soviel ist mal sicher.

Und auf der Nordhalbkugel (bis auf den Pol) scheint sie nie aus dem 
Süden?

Halte es doch einfach mal mit Dieter Nuhr ...

von Carsten S. (dg3ycs)


Lesenswert?

Hi,

mal als kurzen Einwurf zwischendurch:
Wenn ich das richtig verstanden habe hast du zu jedem Telegramm eine 
feste Prüfsumme die immer gleich bleibt.

Wenn du also mit der vorhandenen Steuerung an den Aktor des 
Küchenfensterrolos den Befehls zum öffnen incl. Prüfsumme mitschneidest 
und dann die Steuerung abklemmst und das komplette mitgeschnittene 
Telegramm samt mitgeloggter Prüfsumme durch einen eigenen Controller 
sendest würde ebenfalls eine Öffnung erfolgen?

Natürlich ist es schöner wenn man die Prüfsumme selbst erzeugen kann da 
damit die beliebige Generierung des Telegramms möglich wird was Speicher 
spart und die Programmierung erleichtert.

Wenn es aber so wie von mir vermutet ist wäre es aber, sofern die 
Ermittlung des algorythmus nicht gelingt, einmal sämtliche Benötigten 
Telegramme auszugeben und diese in einer Tabelle abzulegen.
Ist natürlich in gewisser weise eine Strafarbeit, aber möglich. So viele 
genutzte Schalter und Aktionscodes wird man in einem EFH normalerweise 
ja auch nicht haben. (Oder geht es um ein Firmengebäude?)

Nur mal als Alternativvorschlag -PLAN B- falls du nicht dahinter kommst 
wie die Prüfsumme generiert wird. Allerdings würde ich auch erst einmal 
dem Versuch diese selbst zu generieren auf jeden Fall vorrang einräumen.
(Dazu fällt mir gerade aus dem Stehgreif leider auch nichts ein.)

Gruß
Carsten

von Edi R. (edi_r)


Lesenswert?

Georg G. schrieb:
> Kriech mal aus deinem Keller. Nördlich des Polarkreises scheint die
> Sonne im Sommer auch aus Norden.

Kühne Behauptung...

von Thomas (kosmos)


Lesenswert?

wäre es nicht besser die Telegramme die du ja hast inkl. Checksumme 
selber auf Reise zu den Aktoren zu schicken und den Master 
rauszuschmeißen?

von Georg G. (df2au)


Lesenswert?

Edi R. schrieb:
> Kühne Behauptung...

Inwiefern? Ich war dort schon des öfteren. Im Juni, nachts um 24:00 
steht in Kirkenes die Sonne im Norden. Dafür ist es im Dezember 24 
Stunden am Tag duster. Fahr mal hin, ist eine interessante Gegend.

Noch ein Tipp: https://de.wikipedia.org/wiki/Mitternachtssonne

: Bearbeitet durch User
von Stefan W. (dl6dx)


Lesenswert?

Ingo F. schrieb:
> Nur scheint es an der Prüfsumme zu scheitern.
> Ich vermute eine eine CRC16 komme aber auf keinen grünen Zweig.

Beitrag "Re: Gibt es irgendwo brauchbare Infos zu SMI ?"

hat du schon gelesen?

Grüße

Stefan

von und nun (Gast)


Lesenswert?

Einen solchen CRC zu Knacken kann je nachdem einfach sein. Ich hatte 
auch kuerzlich so ein Problem. Die Menge an verschiedenen Meldungen, die 
ich brauchte war bescheiden. Und, wichtig ... eine Meldung mit falschem 
CRC bewirkte nichts. Ein CRC16 sind also nur 65k Moeglichkeiten. Mit 
einem Computer sind die schnell durchgelassen. Bis eben wieder eine 
Antwort kommt.

von IngoF (Gast)


Lesenswert?

Werner M. schrieb:
> Bist du dir mit der Interpretation des Datenstromes sicher.
> Hier sieht das etwas anders aus

Ja, Da habe ich auch fleissig mitgeschrieben...

Da geht es aber um den SMI-Bus. hier geht es um den Switch-Bus der auch 
an der SMI-Control-Unit hängt

Carsten Sch. schrieb:
> Wenn ich das richtig verstanden habe hast du zu jedem Telegramm eine
> feste Prüfsumme die immer gleich bleibt.

Ja, ich könnte wirklich alle mitschneiden. Allerdings sind noch nicht 
alle verbaut. Wäre aber möglich.

Wenn ich das aber so machen würde hätte ich das Problem dass ich 
eventuell nachträglich keine mehr anschließen könnte (Erweiterung)

Notfalls alle rausschmeissen und meine Platine die Arbeit übernehmen 
lassen..

Würde heissen alle frisch gestrichenen Rolladenkästen wieder aufmachen..

Gruß
IngoF

von Stefan W. (dl6dx)


Lesenswert?

Stefan Wagner schrieb:
> Beitrag "Re: Gibt es irgendwo brauchbare Infos zu SMI ?"

Du hättest doch mal hineinschauen sollen.

Der Autor gibt nämlich an, er habe das Verfahren bereits als eine 
einfache Prüfsumme identifiziert, nämlich als das Zweierkomplement der 
8-bit breiten Summe der Bytewerte.

Prüf das doch mal anhand deiner Daten.

Grüße

Stefan

von Ingo F. (ingof)


Lesenswert?

Stefan Wagner schrieb:
> Der Autor gibt nämlich an, er habe das Verfahren bereits als eine
> einfache Prüfsumme identifiziert

JAIN,

Die Prüfsumme funktioniert auch für den "SMI-Bus".
Hier geht es aber um den "Switch-Bus"

Der SMI-Bus ist nur für die Steuerung der Rolladenantriebe geeignet.
Das geht auch alles über die SMI-Control-Unit.

Das hat nichts mit den Schaltern zu tun. Man kann also nur nach Programm 
die Rolladen fahren lassen. Um Schalter anzuschließen ist bei der 
SMI-Control-Unit ein RS485-Bus vorgesehen. Dort werden über 
Switch-Bus-Connectoren die Schalter angeschlossen.

Diese haben 4 Schalter (Hoch, Runter, Stop, Automatik). Diese 
"Switch-Bus-Connectoren" haben ein eigenes Protokoll mit anderer 
Prüfsumme.

Und um diese geht es hier. Der SMI-Bus ist für mich schon erledigt.



Ich habe jetzt gerade noch mal einen Online-CRC-Calculator getestet. 
Aber irgendwie scheint der nicht zu funktionieren.

Bei einer CRC-Berechnung werden bei einer 16Bit CRC erst 16 "0"-Bits 
angehangen und die CRC-berechnet. Dann werden diese "Platzhalter" durch 
die CRC ersetzt. Wenn man dann eine CRC über die Daten incl. der 
errechneten CRC berechnet sollte 0 herauskommen.

Bei dem CRC-Calculator klappt das aber nicht. Habe auch den HEX-Knopf 
unten gesehen. Bringt aber keine Besserung.

Ist der Calculator buggy oder habe ich da was falsch verstanden?

Um den geht es hier:
http://www.lammertbies.nl/comm/info/crc-calculation.html

Habe zwei verschiedene Telegramme ausprobiert und auch keine ähnliche 
Prüfsumme herausbekommen...

Gruß
IngoF

von Stefan W. (dl6dx)


Lesenswert?

Ingo F. schrieb:
> Hier geht es aber um den "Switch-Bus"

Ok, das war mir entgangen.

Bist du denn sicher, dass es ein CRC sein muss? Ich habe über die Jahre 
die unterschiedlichsten Verfahren gesehen.
Was du z.B. prüfen könntest:

LRC:
Checksummenberechnung: Alle Bytes der Nachricht werden XOR-verknüpft und 
angehängt.
Checksummenprüfung: Alle Bytes der empfangenen Nachricht werden 
XOR-verknüpft, das Ergebnis muss 0 (0x00) sein.

Das habe ich schon an verschiedenen Stellen so gefunden.

Beim NMEA-Protokoll wird dieses Verfahren auch eingesetzt, jedoch wird 
der Wert als "ASCII-HEX" übertragen.

Die einfache 8-Bit-Checksumme hatte ich ja schon genannt.

Dann habe ich beim Stöbern in alten Sourcen noch diesen Exoten gefunden:
1
/*==========================================================================*/
2
/*                              append_checksum                             */
3
/*==========================================================================*/
4
/* Haengt an ein Telegramm der Laenge 'length' eine Checksumme an. Dies ist */
5
/* eine 1-Byte Checksumme, die aber als 2-Byte Hexadezimaldarstellung an    */
6
/* den String angehaengt wird, d.h. wenn die Checksumme 31 (dezimal) waere, */
7
/* werden die beiden Bytes '1F' (=31) angehaengt.                           */

Kannst du nicht mal ein paar Beispieltelegramme bereit stellen?

Grüße

Stefan

von Stefan W. (dl6dx)


Lesenswert?

Ingo F. schrieb:
> Bei einer CRC-Berechnung werden bei einer 16Bit CRC erst 16 "0"-Bits
> angehangen und die CRC-berechnet. Dann werden diese "Platzhalter" durch
> die CRC ersetzt. Wenn man dann eine CRC über die Daten incl. der
> errechneten CRC berechnet sollte 0 herauskommen.

Nein, das muss nicht so sein. Siehe z.B. den CCITT-CRC (HDLC):
1
/* ------------------------------------------------------------------------
2
  CCITT-CRC berechnen.
3
  Der Initialwert von crc ist 0xFFFF, für jedes Byte der Nachricht wird
4
  der CRC weitergerechnet. Der über alle Bytes der Nachricht berechnete
5
  CRC wird invertiert (Einerkomplement!) und in der Reihenfolge low byte,
6
  high byte übertragen.
7
  Der Empfänger berechnet den CRC über alle empfangenen Zeichen ein-
8
  schliesslich der beiden übertragenen CRC-Bytes, das Ergebnis der
9
  Berechnung muss 0xF0B8 sein.
10
   ------------------------------------------------------------------------  */

Wie man sieht, kommt es neben dem Generatorpolynom auch auf den 
Startwert und die Übertragung des CRC (MSB/LSB, invertiert/nicht 
invertiert) an.

Grüße

Stefan

von (prx) A. K. (prx)


Lesenswert?

Es gibt auch CRCs, die bitreversed übertragen werden.

von Konrad S. (maybee)


Lesenswert?

Weder Initialwert 0 oder 0xffff, noch bitreversed bringt ein brauchbares 
Ergebnis. Es gibt auch kein Generator-Polynom, das für die Beispiele 
hier Beitrag "Re: CRC / Prüfsumme knacken" 
funktionieren würde.

von Ingo F. (ingof)


Lesenswert?

Stefan Wagner schrieb:
> Bist du denn sicher, dass es ein CRC sein muss?

Nein, ich habe keine Ahnung was das ist.. Aber wenn sich auch nur ein 
einziges Bit ändert ändert sich in der Prüfsumme gleich mehrere Bits.

Habe es jetzt gerade mal probiert:
1
F0 23 36 81 14 (89 69)
2
F0 23 36 81 15 (00 78)
3
4
F0 23 44 81 14 (E9 5C)
5
F0 23 44 81 15 (60 4D)
6
7
F0 23 44 81 04 (68 4C)
8
F0 23 44 81 05 (E1 5D)

Bei den drei Telegrammenpaaren ändert sich nur das niedrigste Bit im 
letzten Datenbyte.

Bei allen Telegrammenpärchen ändert sich aber in der Prüfsumme gleich 5 
Bits.

Seltsamerweise toggelt aber jedesmal genau die selben Bits:
1
10001001 00010001 (89 11)

Bei Bit4 von Byte3 zwei ändern sich gleich 7 Bits:
1
F0 23 44 81 03 (D7 38)
2
F0 23 54 81 03 (42 BD)
3
4
F0 23 44 81 00 (4C 0A)
5
F0 23 54 81 00 (D9 8F)
6
7
F0 23 44 01 02 (92 A5)
8
F0 23 54 01 02 (07 20)

auch jedesmal die selben Bits in der Prüfsumme:
1
10010101 10000101 (95 85)

Dann dürfte es ja eigentlich keine richtige CRC sein, oder. Durch die 
anderen Bytes müsste ja bei einer "echten" CRC eine ganz andere Bitfolge 
herauskommen. Und zwar eine die bei unterschiedlichen Telegrammen nicht 
die selben Bits ändert, oder?

Also wohl eine vermutlich für jedes Byte eine eigenes Bitmuster das 
irgendwie ja nach Position berechnet wird.
Oder sogar für jedes Bit.

Stefan Wagner schrieb:
> Nein, das muss nicht so sein. Siehe z.B. den CCITT-CRC (HDLC):

ist klar. Aber wenn ich eine Beliebige Bitfolge nehme und die Prüfsumme 
berechnen lasse. Z.B. mit dem von mir verlinkten CRC-Generator.
Dann muss sich die CRC auch mit den selben Seinstellungen überprüfen 
lassen können
 Also z.B.
(F023540102) bekomme ich die CRC xxxx wenn ich diese anhänge
(F023540102xxxx) sollte die Prüfsumme 00 sein oder zumindest falls noch 
mal ein XOR kommt zumindest den selben Wert.

Habe das auch mal mit F0235401020000 probiert und die 0000 durch die 
Prüfsumme xxxx ersetzte. Also F023540102xxxx aber da kommt immer wieder 
was ganz anderes heraus.

Oder liege ich da falsch?


Aber nach meinen vorherigen Beispiel kann es ja dann wohl keine "echte" 
CRC sein.


Den Abschnitt 3 aus meinem ersten Link kann ich wohl nur verwenden wenn 
ich vorher drei Telegramme erzeuge die jeweils nur drei 
aufeinanderfolgende Bits ändere. Also die vorgeschlagenen Buchstaben 
einfüge und dann noch den Schritt 2 durchgeführt habe.

Dummerweise kann ich das leider nicht hinbekommen.

Gruß
IngoF

von Sebastian (Gast)


Lesenswert?

Ich denke, die zwei Prüfbytes müssen nicht unbedingt ein Hinweis auf ein 
CRC-Verfahren sein. Man kann Prüfsummen auch anders bilden, siehe LRC 
(Wikipedia): http://en.wikipedia.org/wiki/Longitudinal_redundancy_check 
und BCC: http://automationwiki.com/index.php?title=BCC

von oha (Gast)


Lesenswert?

Auch wenn das CRC Polynom vorgegeben ist, kann man's noch verschieden 
machen. zB die beiden Bytes vertauschen. Oder nach links anstelle von 
nach rechts schieben. Und dann gibt's noch Leute, die ver-XOR-en das 
Resultat auf beiden Seiten, um auf der "geheimen" Seite zu bleiben.

von IngoF (Gast)


Angehängte Dateien:

Lesenswert?

Bin noch nicht viel weiter gekommen.

Bin mir aber jetzt sicher dass es keine "richtige" CRC ist.

Ich habe alle 185 Telegramme die ich gefunden habe miteinander 
vergleichen lassen.

Wenn sich im Telegramm ein einziges Bit verändert ändern sich in der 
Prüfsumme immer die selben Bits.

Mal als PDF-Beispiel alle Telegrammpärchen indem sich nur im Byte 5 das 
Bit 0 ändert.

Denke damit ist schon mal ziemlich sicher das es keine "richtige" CRC 
sein kann, oder?

von Nosnibor (Gast)


Lesenswert?

Aber Linearität ist doch eine typische Eigenschaft von CRCs.
Also CRC(x exor y) = CRC(x) exor CRC(y)
Man kann also z.B. eine Tabelle bauen (z.B. aus beobachteten 
Beispielnachrichten rekonstruieren), die für jedes mögliche Bit der 
Nachricht den entsprechenden CRC-Code enthält. Und mit der Tabelle kann 
man dann zu jeder beliebigen Nachricht den richtigen CRC-Wert bestimmen.

von Stefan (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

die Berechnung deiner CRC ist eine ganz gewöhnliche "reverse" Berechnung 
mit dem Polynom CRC-16-CCITT wie man sie auch bei HDLC benutzt.

siehe hier: http://en.wikipedia.org/wiki/Cyclic_redundancy_check
(auf der englischen Seite sind mehr Polynome aufgeführt!)


zunächst wird die CRC mit 0xffff vorbelegt, dann ganz normal reverse 
durchgerechnet und dann zum Schluss das Komplement der CRC an die Msg 
angehängt.
Um zu sehen wie das genau geht habe ich dir ein Beispielprgramm für die 
drei Beispiel Msg's angeängt!


Gruss

von Simplizissimus (Gast)


Lesenswert?

Wie war das Leben damals komfortabel, als man den Rolladen per Gurt noch 
präzise unter seiner Kontrolle hatte. :-D

von :-) (Gast)


Lesenswert?

Simplizissimus schrieb:
> Wie war das Leben damals komfortabel, als man den Rolladen per Gurt noch
> präzise unter seiner Kontrolle hatte. :-D

Und wenn mal ein Gurt gerissen ist, konnte man noch einen echten 
Hardware-Hack anwenden! Knoten im Gurt und irgendwo einhängen damit der 
Rolladen offen blieb :-)

von Ingo F. (ingof)


Lesenswert?

Nosnibor schrieb:
> Aber Linearität ist doch eine typische Eigenschaft von CRCs.

Hatte es gestern abend auch noch mal testweise mit einem CRC-Generator 
getestet. Es kamen zwar andere Prüfsummen heruas. Aber das Verhalten war 
das selbe. Hatte irgendwie im Hinterkopf dass bei ändern eines 
bestimmten Bits die CRC sich nicht immer gleich verändert.

Ist aber wohl falsch...

Stefan schrieb:
> die Berechnung deiner CRC ist eine ganz gewöhnliche "reverse" Berechnung
> mit dem Polynom CRC-16-CCITT

Na dann habe ich schon mal die Erklärung warum die beiden Online-CRC 
Berechnungstools nicht funktioniert haben.

Der eine kann keine reversed CRC. Und der andere hat einen Bug bei genau 
dieser CRC mti dem Polynom 0x8408.

DANKE....

Konnte mir nicht mehr erträumen.. Die richtige CRC-Berechnung und schon 
fertigen C-Code den ich schon fast per Copy&Paste übernehmen kann.

Habe es jetzt noch nicht testen können. Werde wohl erst am Wochende dazu 
kommen...

Simplizissimus schrieb:
> Wie war das Leben damals komfortabel, als man den Rolladen per Gurt noch
> präzise unter seiner Kontrolle hatte.

Noch habe ich das. Allerdings war ich abends immer zu faul jede Rolladen 
am Abend herunterzulassen. Im Winter könnte das vorteilhaft für die 
Heizkostenrechnung sein.

Hat natürlich einen Nachteil bei Stromausfall...

von Johannes S. (demofreak)


Lesenswert?

Ingo F. schrieb:
> Hat natürlich einen Nachteil bei Stromausfall...

Nicht, wenn die Gurte als Fallback dran bleiben.

von Ingo F. (ingof)


Lesenswert?

Stefan schrieb:
> habe ich dir ein Beispielprgramm

DANKE!
Copy&Paste mit kleinen Anpassungen hat perfekt funktioniert.

Wie hast Du das den herausbekommen? Einfach ausprobiert? Womit hast Du 
die denn berechnen lassen?

Johannes S. schrieb:
> Nicht, wenn die Gurte als Fallback dran bleiben.

Theoretisch mag das möglich sein....

Man müsste die Sperrfunktion vom Gurtabwickler ausbauen damit sich der 
Gurt mitdrehen könnte.

Soweit ich weiss bleibt nur noch das Problem dass man die Motoren nicht 
so einfach, z.B. über den Gurt, drehen kann. Auch nicht im stromlosen 
Zustand...

Habe jetzt keinen Motor zur Hand mit dem ich das so auf die Schnelle 
testen könnte.

: Bearbeitet durch User
von D. V. (mazze69)


Lesenswert?

Der moderne Schei* fördert nur den Muskelschwund und die Hersteller 
dieser bequemen Gimmicks zahlen auch nicht mehr in die Kassen,als 
üblich, die den oberfaulen Gurtmuffeln später die Reha finanzieren.

von Stefan (Gast)


Lesenswert?

Hallo,

Ingo F. schrieb:
> Wie hast Du das den herausbekommen? Einfach ausprobiert? Womit hast Du
> die denn berechnen lassen?

Ich hab mich vor sehr langer Zeit einmal sehr intensiv mit CRC-Routinen 
beschäftigt und hab daher noch einige selbstgechriebene Testroutinen. In 
deinem Fall hat die 7. (glaube ich) die ich ausprobiert habe ein 
Ergebnis gebracht. Das hat gerade mal 10 Minuten gedauert. Ich hätte 
noch weitere 10 bis 15 Polynome und Methoden ausprobiert und hätte dann 
keine gepasst hättest du es nie erfahren.

Zur Erinnerung: Jeder Funkamateur der sich mal mit "Packerl Radio" 
(AX.25) beschäftigt hat kennt genau dieses CRC16-CCITT Polynom und die 
Art und Weise wie man es benützt und die errechnete CRC an die Msg 
anfügt.

Du musst dich allerdings jetzt mit der Bedeutung der einzelnen 
Telegramme noch auseinandersetzen.

viel Spass
Stefan

von ich (Gast)


Lesenswert?

D. V. schrieb:
> die den oberfaulen Gurtmuffeln später die Reha finanzieren.

Hallo, klopf klopf. Aufwachen! Es geht bei den Gurten um Rolläden. :-))

von IngoF (Gast)


Lesenswert?

Stefan schrieb:
> und hätte dann
> keine gepasst hättest du es nie erfahren.

Naja, notfalls hätte ich es mit BruteForce probiert.
Hatte das damals bei einer anderen "CRC" probiert. Dummerweise war das 
dann keine CRC.

Überlege schon seit zwei Tagen wie das Programm hieß. War irgendeins für 
die CommandLine von Windows.

Stefan schrieb:
> Du musst dich allerdings jetzt mit der Bedeutung der einzelnen
> Telegramme noch auseinandersetzen

Brauch ich nicht mehr...

1. Byte immer 0xF0
2. Byte Adresse High
3. Byte Adresse Low
4. Byte immer abwechselnd 0x01 oder 0x81. Bei der Antwort wird das Bit7 
immer invertiert.
5. Byte AktionsCode:
6. Byte CRC High
7. Byte CRC Low

Hoch: 0x03, 0x04, 0x005
Runter: 0x013, 0x014, 0x015
Stop:  0x023
Automatik EIN/AUS: 0x37, 0x36

Das Low-Nibble hat bei hoch und runter folgende Bedeutung:

3: Kurzer Tastendruck
4: Langer Tastendruck
5: Doppelter kurzer Tastendruck.

Wird mit 19200 8N1 über RS485 übertragen
Der Master wiederholt die Telegramme immer mit Aktionscode 0x00

Beim Tastendruck wird erst einmal 0x02 für Hoch und 0x12 für Runter 
gesendet. nach etwa 250ms kommt dann das Byte mit dem "Aktionscode"

Nur die Tastercheck vom Master hat noch ein Byte mehr. Aber das scheint 
keine große Bedeutung haben.

Also eigentlich recht einfach aufgebaut...

Gruß
Ingo

von D. V. (mazze69)


Lesenswert?

ich schrieb:
> Hallo, klopf klopf. Aufwachen! Es geht bei den Gurten um Rolläden. :-))

Du hast den Gag nicht inhaliert.
Der Standard-Sack sitzt auf dem Sofa und macht per Knopfdruck die 
Rouladen zu und wundert sich, warum er keinen mehr hoch bekommt...

von ich (Gast)


Lesenswert?

D. V. schrieb:
> ich schrieb:
>> Hallo, klopf klopf. Aufwachen! Es geht bei den Gurten um Rolläden. :-))
>
> Du hast den Gag nicht inhaliert.
> Der Standard-Sack sitzt auf dem Sofa und macht per Knopfdruck die
> Rouladen zu und wundert sich, warum er keinen mehr hoch bekommt...

Okay. Und ich dachte, wenn du von Kassen, Gurtmuffeln und Reha sprichst, 
meinst du die Gurte im Auto. Deswegen mein Kommentar.

Nichts für ungut... :-)

von IngoF (Gast)


Lesenswert?

D. V. schrieb:
> Der Standard-Sack sitzt auf dem Sofa und macht per Knopfdruck die
> Rouladen zu und wundert sich, warum er keinen mehr hoch bekommt...

Naja, wer den Gurt benutzen muss um körperlich Fit zu bleiben hat auch 
noch ganz andere Probleme :-P

von IngoF (Gast)


Lesenswert?

Ingo F. schrieb:
> Und der andere hat einen Bug bei genau
> dieser CRC mti dem Polynom 0x8408

Vielleicht ist der "Fehler" ja bald nicht mehr in dem Online-Tool für 
die CRC Berechnung... Habe gerade erst mal den Code weitergeleitet...

DANKE noch mal für den Hinweis und den Quelltext.

von IngoF (Gast)


Lesenswert?

IngoF schrieb:
> Habe gerade erst mal den Code weitergeleitet...

Das war wohl nichts.. Die Mail existiert nicht mehr...

von Konrad S. (maybee)


Lesenswert?

Durch Stefans Informationen habe ich jetzt auch die richtigen Parameter 
für die CRC-Berechnung in Perl herausgefunden.
1
use Digest::CRC qw( crc );
2
my $input = "\xf0\x23\x36\x01\x00";
3
my $crc = crc( $input, 16, 0xffff, 0xffff, 1, 0x1021, 1 );
4
printf "%02x %02x\n", $crc & 0xff, $crc >> 8;

Vielen Dank dafür!

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.