Frage zu CRC und 1-Wire Family Code

OP #1021526
Hallo,

ich bin grad dabei einen 1-Wire Slave per Software in einen PIC 
Controller zu implementieren. Zur Identifikation gehört ja zu jedem 
device ein 64bit Code, bestehend aus 8bit CRC, 48bit serial number und 
8bit family code. Ich dachte , ich kann mir einen beliebigen Code 
einfallen lassen und senden, aber jetzt bezweifel ich, dass das 
funktioniert. Da ich keine Ahnung von CRC hab, hab ich mir mal das 
Beispiel bei Wikipedia angeschaut. Demnach müßte ich 7 Nullen (wegen 
8bit CRC) an die eigentlichen Nutzdaten dranhängen und diese Bitfolge 
(als Polynom interpretiert) dann mit der CRC Bitfolge (ebenfalls als 
Polynom interpretiert) dividieren und das was als Rest bleibt häng ich 
an die Nutzdaten dran. Ist das richtig so?
Die erste Frage wäre, was sind die Nutzdaten? Nur die 48bit serial 
number oder auch der 8bit family code, also 56bit Nutzdaten?
Und dann übertrage ich die Nutzdaten + den Rest der sich aus der 
Polynomdivision ergibt und anschliessend noch die CRC Bitfolge? Also 
würde ich mehr als 64Bits übertragen, richtig?
Könnte mir hier jemand behilflich sein?

Gruß
Kristian
Hallo,

Es werden insgesamt 8 Byte übertragen, 7 Nutzdaten, plus das CRC-Byte 
über die 7 ersten Bytes.

Wenns mal 8 Byte Nutzdaten werden, kommt halt ein 9. CRC-Byte dazu.
zB. beim DS18S20 beim Temperatur auslesen.

Wenn Du nur sleber den 1W-Slave verwendest, kannst Du dir eine SerialNr 
aussuchen und die ganzen 8 Byte vorher ausrechnen incl. dem CRC, und im 
Programm fest hinterlegen, das ändert sich nie bei der Übertragung der 
SerienNr.
Beim übertragen von veränderlichen Daten muss man den CRC immer neu 
berechnen.
OP
Hallo und vielen Dank,

wenn ich dich richtig vertanden habe handelt es sich bei der CRC 
Bitfolge (die Teil der Registration number ist) um den "CRC-Wert" und 
nicht um das CRC-Polynom. Jetzt könnte ich mir wahrscheinlich das 
dazugehörige CRC Polynom ausrechnen aber woher kennt der Empfänger (also 
der Master in diesem Fall) das CRC Polynom? Dieses wird ja nicht mit 
übertragen.
Gast
Das CRC-Polynom ist bei Dallas konstant und wird nicht übertragen.
Es wird der letzte Stand des "Schieberegisters" übertragen.
Wenn man beim Prüfen alle Bytes, also auch die CRC-Summe, durch den 
CRC-Test schickt, kommt als Ergebnis 0 heraus.

Gruß
Joachim
OP
Das bedeutet, ich muss eine Bitfolge x finden, die die Bedingung

(64Bit registration number)  %   x  =   0

erfüllt, und dann hab ich das CRC polynom, das dem Master bereits 
bekannt ist, weil es allen (ausser mir) bekannt ist. Und mit diesem CRC 
Polynom (wenn ich es herausgefunden habe) kann ich mir dann jede Menge 
eigene Registration-Codes basteln, richtig?

Nachtrag: Danke für den Link und für die Erklärung
Gast
Hallo Kristian,

so wie ich das sehe, hast Du recht.
Du kannst aber auch, mit dem oben stehenden Link zur Applikation Note, 
das CRC Polynom auf "unsportliche" Weise durch nachlesen erlangen.

Gruß
Joachim

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.