Forum: Mikrocontroller und Digitale Elektronik Can bus: Rückmeldung(ACK) während des Sendens?


von Heizer (Gast)


Lesenswert?

Hallo Leute,

in Can bus ist es ja so, dass zur gleicher Zeit immer nur ein Teilnehmer 
Sendet. Wenn er fertig ist, erst dann folgt die nächste Prüfung wer 
jetzt senden darf. Nun Ok, aber:
Ein Frame enthählt ja diese ACK, welche die Rückmeldung von anderen 
Teilnehmern bei korrektem Empfang der Nachricht ist.
Hier meine Frage:
Wie kann es sein, dass ein Teilnehmer, während des Sendens eine 
Rückmeldung empfangen kann? Was habe ich hier übersehen?

vielen Dank und Grüße

von Jürgen D. (poster)


Lesenswert?

Bei CAN kann es ja durchaus zu Kollisionen kommen. Das passiert ja wenn 
ausgehandelt wird wer den BUS als nächstes bekommt.
Da ist die "0" dominant. Wenn ein Teilnehmer die sendet ist der BUS auf 
"0". Das empfangen dann ja alle Sender und die mit einer "1" ziehen sich 
zurück.
Beim ACK wird das wohl genauso sein.
Ist bestimmt schon 20 Jahre her das ich mich mal mit CAN beschäftigt 
hatte.

: Bearbeitet durch User
von Volker Z. (vza)


Lesenswert?

Der Sender hält den Ack-Slot rezessiv. Die Empfänger überschreiben dann 
(dominanter Pegel).

von Dr. Sommer (Gast)


Lesenswert?

Ja, der Sender schaltet beim ACK Bit auf "empfangen" um, die die 
Empfänger schalten auf "Senden" um, und senden das ACK bit. Da das ACK 
bit automatisch vom CAN-Controller aller Empfänger gesendet wird, ist es 
keine Möglichkeit um festzustellen, ob die Nachricht beim gewünschten 
Ziel angekommen ist und ob das Ziel überhaupt noch "lebt".

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Heizer schrieb:
> Wie kann es sein, dass ein Teilnehmer, während des Sendens eine
> Rückmeldung empfangen kann? Was habe ich hier übersehen?

 Vielleicht RS485 und CAN verwechselt ?
 Natürlich kann beim CAN nicht gleichzeitig gesendet und empfangen
 werden. Aber Log.0 ist dominant, d.h. wer auch immer den CAN-Bus auf
 Log.0 zieht, hat gewonnen. ;-)
 So etwas nennt man Arbitration und deswegen verliert eine 0xFFF Adresse
 immer gegen eine 0x001 Adresse.

: Bearbeitet durch User
von Heizer (Gast)


Lesenswert?

Angenommen diese 3 Teilnehmer sind im Netz.

sie senden(die länge stimmt natürlich nicht aber nur als beispiel):

A 1 0 0 1 0 1 1
B 1 0 0 0 0 1 1
C 1 0 0 1 0 1 1

die letzten 2 Bits (1 1) sollen ACK sein.

B gewinnt ya ab der 4. Bitfolge. D.h B wird senden egal was die anderen 
haben. Wie kann es dann sein, dass ab der 6. bitfolge ACK von anderen 
überschrieben wird?

von Jürgen D. (poster)


Lesenswert?

A und C stellen sofort den Sendebetrieb ein wenn B die 0 sendet.
Und ein ACK wird nur nach einem kompletten gültigen Telegramm gesendet.

: Bearbeitet durch User
von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Heizer schrieb:
> B gewinnt ya ab der 4. Bitfolge. D.h B wird senden egal was die anderen
> haben. Wie kann es dann sein, dass ab der 6. bitfolge ACK von anderen
> überschrieben wird?

 Nein.
 Bit senden, CAN-Bus überprüfen.
 Wenn gleich, weitersenden.
 Wenn nicht, sofort aufhören.
 A und C kommen gar nicht bis ACK.
 Und nur der Empfänger auf B zieht beim ACK den CAN-Bus auf Log.0.
 Natürlich besteht da keine Möglichkeit festzustellen, wer nun den
 Empfang bestätigt hat, aber da A und C nicht zu Ende gesendet haben...

: Bearbeitet durch User
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.