Forum: Mikrocontroller und Digitale Elektronik AT90CAN128 - CAN Overflow Erkennung


von Steffen R. (steffen_rose)


Lesenswert?

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?

von Rudolph (Gast)


Lesenswert?

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.

von TestX (Gast)


Lesenswert?

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.

von Steffen R. (steffen_rose)


Lesenswert?

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.

von Peter D. (peda)


Lesenswert?

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.

von Steffen R. (steffen_rose)


Lesenswert?

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