Forum: Mikrocontroller und Digitale Elektronik CAN-Bus, war: Adressierungsfragen


von Harald (Gast)


Lesenswert?

Hallo,

erst mal an alle ein Dankeschön für die zahlreichen Antworten im
anderen Thread.

Ich habe mir jetzt mal das CAN-Protokoll genauer angeschaut, und das
scheint zusammen mit Silicon Serial Number-ICs von Maxim (fast) die
Lösung meines Problems zu sein (MAW: Voraussichtlihc war der Vorschlag,
auf CAN zu wechseln das Ei des Kolumbus).
Jetzt hätte ich aber noch einige Fragen, die mir vielleicht
CAN-erfahrene Leute beantworten können.

Und so stelle ich mir das jetzt vor:

Also, ich hab jetzt eine Adresse mit 48 Bit, das CAN-Protokoll stellt
mir in Version 2.0 29 Arbitrierungsbits zur Verfügung.
Gut, ich nehme jetzt also die 29 niederwertigeren Bits aus meiner
Adresse und schreibe sie in den Arbitrierungsblock eines
Datentelegramms. In den Datenblock kommt die voll 48-Bit-Adresse. Nach
dem einschalten der Anlage fangen alle Controller an, zu senden und
nach der Arbitrierung bleibt der mit der kleinsten Adresse übrig und
teilt der Welt am Draht seine Adresse mit und tut dann erst mal nichts
mehr. Sind bei zwei Busteilnehmern jetzt die 29 Arbitrierungsbits
gleich, kommt es spätestens bei der Übertragung des Datenblocks zu
einem Bitfehler. Der Teilnehmer, der den Bitfehlere detektiert hat,
tauscht dann die unteren 29 Bit der Adresse gegen die oberen aus, und
versucht es nochmal. Was der andere Teilnehmer macht, ist mir noch
nicht ganz klar, da muß ich noch ein bischen Literatur studieren.

Frage: Kann das so was werden?

Und jetzt kommt das Problem:
Der (jetzt nur noch virtuell als solcher zu bezeichnende) Busmaster
müsste auf den Empfang von allen möglichen Identifiern programmiert
werden, damit die Nachrichten auch von ihm entgegengenommen werden.
Also müsste ich jetzt entweder zigtausend Nachrichtencodes im Master
hinterlegen, oder es gibt eine Möglichkeit, eine Art Broadcast
rückwärts zu programmieren (im Sinne von: Nimmt jede Nachricht
entgegen). Weiß da vielleicht jemand bescheid?

Gruß,
Harald

von rahul (Gast)


Lesenswert?

Durch das Maskieren der ID-Bits filtert man schon vor. Wenn man nicht
maskiert, dann empfängt der "Master" alles, was auf dem Bus
passiert.

Werden die 48 Adress-Bits willkürlich vergeben, oder ist da ein System
bzw. eine Gruppierung hinter?

Dann könnte man die oberen 29 Bit als Identifier der Gruppe nehmen und
die unteren 19 dann auf die restlichen Knoten/Teilnehmer verteilen.
(29+29 = 58...)

von Peter Dannegger (Gast)


Lesenswert?

Wie gesagt, ich würde nur 24 Bits nehmen, dann hat man noch 5 Bits, um
die Art des Pakets zu kennzeichnen und schließlich braucht der Master
ja auch eine Adresse.

Nimmt man die 24 niederwertigen Bits, dann ist die Chance der
Doppelbelegung sehr gering, aber nicht 0. In dem Fall denken beide, die
Arbitrierung hätte geklappt und es kommt zu einem Fehler im
Datenbereich, wenn dort alle 48 Bits gesendet werden.

Die Daten werden verworfen und beide wiederholen solange, bis deren
Errorcounter überläuft. Nun können alle die, die unterschiedlich sind,
ihre 24 Bits an den Master durchgeben und der trägt sie in seine Liste
ein und weist ihnen eine bestimmte Adresse zu.

Jetzt schickt der Master nochmal eine Seriennummer-Anfrage an alle noch
nicht zugewiesenen, aber diesmal sollen sie die höherwertigen 24 Bits
als Identifier nehmen. Nun melden sich nur noch die Module, bei denen
es zu Fehlern kam, weil die unteren 24 Bit gleich sind und diese werden
nun eingetragen und zugewiesen.


"Werden die 48 Adress-Bits willkürlich vergeben, oder ist da ein
System bzw. eine Gruppierung hinter?"

Im Prinzip ist es so, daß die Nummern je nach Herstellungsmonat/Jahr
langsam ansteigen.

Man kann auch bei Maxim anfragen, bei sehr großen Stückzahlen kann man
sich zusammenhängende Bereiche reservieren lassen.


Peter

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.