Hallo, ich suche eine Möglichkeit im CAN Controller des AT90CAN128 einen CAN Overflow zu erkennen. Ich nutze die CAN Filter. Wird in einem Messageobjekt eine CAN Nachricht empfangen, deaktiviert sich diese automatisch. Kommt die gleiche Nachricht ein zweites Mal, bevor der Messagebuffer wieder aktiviert wurde, geht diese verloren. Ich würde gerne bemerken, wenn dies passiert. Andere CAN Controller haben hierfür Overflow Bits. Hier kann ich nichts finden. Hat jemand eine Idee?
Ich finde da auch gerade nichts, das Message-Objekt wird eben deakiviert nach erfolgreichem Empfang. Das sollte aber eigentlich kein Problem sein. Der Interrupt wird mit dem Ende des 6. Bits des EOF Feldes ausgelöst. Dann kommt noch das 7. Bit und 3 Bits Intermission. Bei 500kBit/s auf dem Bus hat man also mindestens 6µs Zeit bevor es überhaupt möglich ist, dass die nächste Botschaft auf dem Bus sein kann. Falls der Bus wirklich so voll ist, dass der nicht idlen kann und falls wirklich die nächste Botschaft auch eine für die Message-Box ist. Das ist doch gefühlt eine Ewigkeit um im Interrupt die Botschaft zu identifzieren und die Daten wegzuschaufeln. :-) Verarbeiten ist noch was anderes, okay. :-) Für die zahlreichen Fälle, dass der Controller doch nichts anderes machen muss als auf den CAN zu lauschen, haben die 90CAN doch gleich 15 MOBs eingebaut und man kann auf allen filtern. Solange ich mit den MOBs auskomme filtere ich auch nicht.
Nach dem Empfang schiebt man die CAN Nachricht direkt in ein Message Queue und reaktiviert dies MessageBox. In deinem Hauptprogramm arbeitest du das Queue ab und prüfst ob es hier einen Overflow gab.
Danke für Eure Bemühungen. Auf eine Fehlerbehandlung zu verzichten, weil nicht ist was nicht sein kann, ist aus meiner Sicht keine gute Herangehensweise. Daher wollte ich gern den Fehlerfall erkennen. TestX schrieb: > In deinem Hauptprogramm arbeitest du das Queue ab und prüfst ob es hier > einen Overflow gab. Wie ich schrieb, will ich den Hardware CAN Overflow erkennen, also dass der Interrupt nicht rechtzeitig aktiv war.
Du könntest für eine ID-Maske z.B. 4 MOBs enablen. Und wenn alle 4 MOBs gleichzeitig voll sind, heißt das, bei nur 3 MOBs Puffer hättest Du ein Paket verloren. Ich nehme immer 3 MOBs fürs Senden und die restlichen 12 MOBs als Empfangspuffer. Beachten muß man allerdings, daß immer das unterste freie MOB befüllt wird, d.h. die Reihenfolge in dem MOBs muß nicht der Empfangsreihenfolge entsprechen. Falls die Reihenfolge wichtig ist, muß man sie nach dem Timestamp sortiert auslesen.
Danke. Es geht um CANopen. Da sind die CANIDs leider nicht so günstig verteilt. Wenn ich die Filter nutzen möchte brauche ich schon einen Großteil der Puffer und kann nicht jeden doppelt anlegen. Aber wenn selbst du auf Tricks zurückgreifen mußt, scheint es wohl keine offizielle Möglichkeit zu geben.
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.