Seb

01.01.2014, 14:50 |
CAN-Bus Bit-Arbitrierung (Elektronik) |
Hallo,
ich habe mal eine Frage zum CDMA/CR beim CAN-Bus. Ich habe gehört das der Mehrfachzugriff durch Bitweise - Arbitrierung gelöst wird. Nun Frage ich mich aber gerade was passiert, wenn nicht beide CAN-Controller zur gleichen Zeit sondern ein Bit versetzt senden? Also z.B. ein Knoten mit ID 0x1 und einer mit 0x2: (letztes Bit Remote-Flag):
0000 0000 010
0000 0000 100
Wenn sie rein zufällig genau ein Bit versetzt senden wird doch kein Bit durch ein rezessives überschrieben und beide Controller denken sie könnten doch schreiben, oder?
Also wenn beide genau zur selben Zeit senden würden, würde das ja noch funktionieren, oder? Aber was macht man in diesem Fall, oder was hab ich nicht beachtet?
Gruß Seb |
Seb

01.01.2014, 14:50
@ Seb
|
CAN-Bus Bit-Arbitrierung |
Sry, er hat meine Leerzeichen nicht übernommen, eigentlich sollte das dort stehen:
» 0000 0000 010
» 0000 0000 100 |
hws

59425 Unna, 01.01.2014, 15:31
@ Seb
|
CAN-Bus Bit-Arbitrierung |
» Also wenn beide genau zur selben Zeit senden würden, würde das ja noch
» funktionieren, oder? Aber was macht man in diesem Fall, oder was hab ich
» nicht beachtet?
Der "Busverkehr" läuft schon synchronisiert ab. Da läuft nix mit "ein Bit versetzt". Sonst würde es tatsächlich nicht funktionieren.
hws |
Seb

01.01.2014, 19:43
@ hws
|
CAN-Bus Bit-Arbitrierung |
» » Also wenn beide genau zur selben Zeit senden würden, würde das ja noch
» » funktionieren, oder? Aber was macht man in diesem Fall, oder was hab ich
» » nicht beachtet?
»
» Der "Busverkehr" läuft schon synchronisiert ab. Da läuft nix mit "ein Bit
» versetzt". Sonst würde es tatsächlich nicht funktionieren.
»
» hws
Aber dann müssten ja alle zum gleichen Zeitpunkt ihre Adresse auf den Bus legen. Aber es gibt doch unterschiedliche Zeitpunkte, wann ein Controller was senden will, und woher wissen die Controller dann, ab welchem Zeitpunkt sie ihre Adresse auf den Bus legen sollen?
Also laut diesem PDF, was ich bei der Suche nach CAN-Bus in Google gefunden habt, ist das rein zufällig wann sie zugreifen:
http://prof.beuth-hochschule.de/uploads/media/AusarbeitungCAN-Bus.pdf
Seite 33, Abbildung 25 |
hws

59425 Unna, 01.01.2014, 20:13
@ Seb
|
CAN-Bus Bit-Arbitrierung |
» http://prof.beuth-hochschule.de/uploads/media/AusarbeitungCAN-Bus.pdf
Siehe Kapitel 7:
warum das Thema Bit Timing im CAN Bus so wichtig ist.
Da wird synchronisiert. Das Sync Segment ist dazu da.
hws |
Seb

01.01.2014, 22:03
@ hws
|
CAN-Bus Bit-Arbitrierung |
» » http://prof.beuth-hochschule.de/uploads/media/AusarbeitungCAN-Bus.pdf
»
» Siehe Kapitel 7:
» warum das Thema Bit Timing im CAN Bus so wichtig ist.
»
» Da wird synchronisiert. Das Sync Segment ist dazu da.
»
» hws
Das hatte ich mir mal durchgelesen, aber ich denk da geht es nur um die korrekte Abtastung der einzelnen Bits. Aber ich versteh nicht in wie fern das mit den Zeitpunkten zu tun hat, wann ein Frame auf den Bus gelegt wird. Der CAN-Bus ist doch ein asynchroner Bus. Zumindest habe ich das gelesen und unter asynchron versteh ich das Nachrichten zu jedem Zeitpunkt gesendet werden könne. Mir ist klar, das zwar die Clocks der einzelnen Controller so synchronisiert werden können, aber laut der Abbildung die ich gezeigt hab, kann es doch passieren das ein Controller während ein anderer Knoten schon den halben Frame auf den Bus gelegt hat eine Nachricht senden will. Zumindest suggeriert das diese Abbildung aus dem Heft.
So wie ich dich jetzt verstehe, gibt es feste Zeitrahmen indem die Controller nur Nachrichten senden dürfen. Was weis ich alle x-Bits oder so und zwischendrin darf keine Adresse auf dem Bus liegen. Also etwa so:
| Frame A - Knoten A | Frame B - Knoten A |
| - - - - - - - - - -| Frame C - Knoten B |
Und das dürfte dann ja nicht passieren:
| Frame A - Knoten A | Frame B - Knoten A |
| - - - | Frame C - Knoten B | - - - - - -|
Aber in etwa so ist es auf der Abbildung dargestellt wie im zweiten Beispiel von mir. |
otti

D, 02.01.2014, 00:38 (editiert von otti am 02.01.2014 um 00:39)
@ Seb
|
CAN-Bus Bit-Arbitrierung |
» Sry, er hat meine Leerzeichen nicht übernommen, eigentlich sollte das dort
» stehen:
0000 0000 010 -> A
0000 0000 100 -> B
Ich habe das so verstanden:
Für die Arbitrierungsphase ist das m. E. ja auch so richtig wie man es hier sieht. Eine Versatz in dieser Form gibt es nicht, da A dann schon am Senden wäre und B das Ende abwarten müsste.
Auf dem Bus darf immer nur einer eine GANZE Nachricht senden. Dazu überwachen die potentiellen Sender den Bus und warten ggf. auf das Ende einer Nachricht.
Dann beginnt die Arbitrierungsphase bitweise und dort gewinnt jeweils das dominantere "0"-Bit.
In Deinem Beispiel ist der Zweite (B) der Looser, da das drittletzte Bit vom Ersten (A) das Gleichwertige des Zweiten überschreibt.
B darf somit nicht senden. -- Gruß
otti
_____________________________________
E-Laie aber vielleicht noch lernfähig |
Seb

02.01.2014, 12:09
@ otti
|
CAN-Bus Bit-Arbitrierung |
» » Sry, er hat meine Leerzeichen nicht übernommen, eigentlich sollte das
» dort
» » stehen:
» 0000 0000 010 -> A
» 0000 0000 100 -> B
»
» Ich habe das so verstanden:
»
» Für die Arbitrierungsphase ist das m. E. ja auch so richtig wie man es hier
» sieht. Eine Versatz in dieser Form gibt es nicht, da A dann schon am Senden
» wäre und B das Ende abwarten müsste.
»
» Auf dem Bus darf immer nur einer eine GANZE Nachricht senden. Dazu
» überwachen die potentiellen Sender den Bus und warten ggf. auf das Ende
» einer Nachricht.
» Dann beginnt die Arbitrierungsphase bitweise und dort gewinnt jeweils das
» dominantere "0"-Bit.
» In Deinem Beispiel ist der Zweite (B) der Looser, da das drittletzte Bit
» vom Ersten (A) das Gleichwertige des Zweiten überschreibt.
» B darf somit nicht senden.
Ja gut nur frag ich mich wie beide Controller genau zum selben Zeitpunkt senden wollen und genau wissen das ein anderer jetzt anfängt. Weil das muss doch der eine Controller wissen, das ein anderer jetzt anfangen will zu senden, damit sie quasi Zeitgleich die Adresse auf den Bus legen und nicht versetzt. |
hws

59425 Unna, 02.01.2014, 17:09
@ Seb
|
CAN-Bus Bit-Arbitrierung |
...
» kann es doch passieren das ein Controller während ein anderer Knoten schon
» den halben Frame auf den Bus gelegt hat eine Nachricht senden will.
Dazu siehe Kapitel 7.
CSMA/CA heißt Carrier Sense Multiple Access/Collision Avoidance
Es wird auf dem Bus detektiert, ob da gerade schon jemand anderes sendet. Das geschieht aber schon auf dem Physical Layer (OSI Schicht 7) auf die du vom µC aus selbst keinen Zugriff hast - wenn du den Controller nicht selbst bauen willst.
Ähnlich gibt es beim Ethernet - YelloCable eine max Leitungslänge. Eben damit ein fremdes Paket weit entfernt erkannt werden kann. (hier heißt es dann ../CD = Collision Detection. Alle Sender brechen ihre Sendung ab und versuchen es nach einer zufälligen Zeit nochmal).
hws |
hws

59425 Unna, 02.01.2014, 17:17
@ Seb
|
CAN-Bus Bit-Arbitrierung |
» ..Weil das muss doch der eine Controller wissen, das ein anderer jetzt anfangen will zu senden,
Der kann nicht hellsehen, aber er hört auf dem Bus mit.
Und bei den entsprechend auf dem Bus angelegten Adreßbits legtauch der zweite seine (synchronisierten) Adreßbits auf den Bus. Und dann sieht er, wer die höhere Priorität hat und wer weitersenden darf und wer nicht.
Worum geht es dir eigentlich? Verstehen der Vorlesung? Schon mal den Assi/HiWi oder Prof gefragt?
hws |
otti

D, 02.01.2014, 18:22
@ hws
|
CAN-Bus Bit-Arbitrierung |
» Das geschieht aber schon auf dem Physical Layer (OSI Schicht 7) auf die du
» vom µC aus selbst keinen Zugriff hast - wenn du den Controller nicht selbst
» bauen willst.
» hws
Du meinst wahrscheinlich Schicht 1.  -- Gruß
otti
_____________________________________
E-Laie aber vielleicht noch lernfähig |
hws

59425 Unna, 02.01.2014, 18:40
@ otti
|
CAN-Bus Bit-Arbitrierung |
» Du meinst wahrscheinlich Schicht 1. 
So isses. Physical Layer = 1,
Schicht 7 = Application Layer.
hws |