Forum: Mikrocontroller und Digitale Elektronik Frage zu CRC und 1-Wire Family Code


von Chris H. (xkris)


Lesenswert?

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

von John S. (linux_80)


Lesenswert?

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.

von Chris H. (xkris)


Lesenswert?

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.

von JoachimB (Gast)


Lesenswert?

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

von JoachimB (Gast)


Lesenswert?

Nachtrag:
hier kann man das genau nachlesen
http://www.maxim-ic.com/appnotes.cfm/an_pk/27

von Chris H. (xkris)


Lesenswert?

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

von JoachimB (Gast)


Lesenswert?

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

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.