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
- 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.
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?
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.
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.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.