Forum: Mikrocontroller und Digitale Elektronik CAN ACK Slot


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Hans (Gast)


Lesenswert?

Hallo zusammen,
ich habe eine kleine CAN Grundlagen Frage.

Folgende Behauptungen:

 - Jeder CAN Contoller (z.B. TJA1040) setzt beim korrekten Empfang einer 
CAN Nachricht das ACK Bit
 - Dies erfolgt unabhängig vom µC
 - Evtl. vorhandene Filter haben darauf keinen Einfluss
 - Wenn der Sender kein ACK bekommt sollte nach einer bestimmten Zeit 
ein Fehler erkannt werden

Ist das so korrekt oder gibt es Abweichungen?

Gruß Hans

von Thomas F. (igel)


Lesenswert?

- Der TJA 1040 ist ein Tranceiver, kein Controller.

- Ein Controller, z.B. MCP2515, sendet selbstständig das ACK, ausser er 
wurde als Listen-Only initialisiert.

von Könner (Gast)


Lesenswert?

Hans schrieb:
>  - Jeder CAN Contoller (z.B. TJA1040) setzt beim korrekten Empfang einer
> CAN Nachricht das ACK Bit
falsch

>  - Dies erfolgt unabhängig vom µC
CAN Controller kann bestandteil des µC sein, muss aber nicht

>  - Evtl. vorhandene Filter haben darauf keinen Einfluss
falsch

>  - Wenn der Sender kein ACK bekommt sollte nach einer bestimmten Zeit
> ein Fehler erkannt werden
falsch, nach einer bestimmten Anzahl Wiederholungen

> Ist das so korrekt oder gibt es Abweichungen?
Es gibt Abweichungen

Hast du noch weitere Behauptungen oder Rückfragen?

von Hans (Gast)


Lesenswert?

Würde mich über die korrekten Antworten freuen.

von Könner (Gast)


Lesenswert?

Kein Problem.

Hans schrieb:
> - Jeder CAN Contoller (z.B. TJA1040) setzt beim korrekten Empfang einer
> CAN Nachricht das ACK Bit

TJA1040 ist wie beschrieben kein Controller sondern ein Transceiver. Der 
Controller setzt das ACK Bit wenn er die Nachricht korrekt empfangen hat 
und wenn sie für ihn bestimmt war.

>  - Dies erfolgt unabhängig vom µC
Ja, wobei wie beschrieben der CAN Controller immer öfter in den µC 
integriert ist.

>  - Evtl. vorhandene Filter haben darauf keinen Einfluss
Doch haben Sie. In den mir bekannten CAN Controllern wird das ACK Bit 
nur gesetzt wenn die Adresse durch die Filter durchkommt.

>  - Wenn der Sender kein ACK bekommt sollte nach einer bestimmten Zeit
> ein Fehler erkannt werden
Der Sender Wiederholt so lange die Nachricht bis er in den CAN Passive 
Zustand wechselt. Die Grenze dafür kann man meistens einstellen. Danach 
hört er nur noch passiv zu, deswegen der Name passiv. Kommen dann 
genügend korrekte Nachrichten vorbei geht er wieder in den normalen 
Modus und kann wieder senden.

von Hans (Gast)


Lesenswert?

Vielen Dank für die schnelle Antwort.
Gruß Hans

von Thomas F. (igel)


Lesenswert?

Aus dem Datenblatt des MCP2515:
Any node that has received an
error-free frame acknowledges the correct reception of
the frame by sending back a dominant bit (regardless
of whether the node is configured to accept that
specific message or not).

Beim AT90CAN128 findet man:
Correct messages are acknowledged by the receivers regardless of the 
result of the acceptance test.

Zumindest diese beiden senden ein ACK unabhängig von den 
Filtereinstellungen.

von Μαtthias W. (matthias) Benutzerseite


Lesenswert?

Und aus der CAN Spec von Bosch

Thomas Forster schrieb:
> Zumindest diese beiden senden ein ACK unabhängig von den
> Filtereinstellungen.

So ist es. Boschs C_CAN und Freescales FlexCAN tun das auch. Sollten sie 
auch den CAN verlangt das explizit. Mich würde interessieren welche 
CAN-Controller das nicht so machen -> Könner?

Matthias

von Steffen R. (steffen_rose)


Lesenswert?

Könner schrieb:
>>  - Evtl. vorhandene Filter haben darauf keinen Einfluss
> Doch haben Sie. In den mir bekannten CAN Controllern wird das ACK Bit
> nur gesetzt wenn die Adresse durch die Filter durchkommt.

Auch alle mir bekannten CAN Controller senden das Ack Bit unabhängig vom 
Filter. Die CAN ID darf er ja erst auswerten, wenn die Nachricht von 
allen Teilnehmern fehlerfrei empfangen wurde. Oder sie würde immer 
wiederholt werden, wenn sich niemand hierfür interessiert.


>>  - Wenn der Sender kein ACK bekommt sollte nach einer bestimmten Zeit
>> ein Fehler erkannt werden
> Der Sender Wiederholt so lange die Nachricht bis er in den CAN Passive
> Zustand wechselt. Die Grenze dafür kann man meistens einstellen. Danach
> hört er nur noch passiv zu, deswegen der Name passiv. Kommen dann
> genügend korrekte Nachrichten vorbei geht er wieder in den normalen
> Modus und kann wieder senden.

Der Sender merkt bei jedem fehlenden Ack einen Fehler (Acknowledge 
Error) und sendet aufgrund dieses Fehlers die Nachricht erneut.

Richtig ist, dass bei zuvielen Fehlern der Zustand aufgrund der Error 
Counter gewechselt wird. Falsch ist an dieser Aussage, dass ein Error 
Passive Knoten nicht sendet. Er nimmt weiter an der Kommunikation teil.

Erst, wenn ein Wechseln in den Bus Off state erfolgt, sendet er nicht 
mehr.

'Error Passive' heißt es, weil der Knoten den Bus nicht mehr mit aktiven 
Error Flags stört. Egal, ob er recht hat oder nicht.

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.