Am CAN passiert folgendes am Ende: CANSetOperatingMode(canModule, CAN_NORMAL_OPERATION); while(CANGetOperatingMode(canModule) != CAN_NORMAL_OPERATION); Er bleibt dann in der while hängen. Einfach auskommentieren? Wie macht Ihr das?
Fehler behandeln. Falls ohne den CAN eh keine sinnvolle Restfunktion des Geräts möglich ist, wenigstens irgendwie anzeigen.
Aber wenn dann CAN nach dem Startup eingesteckt wird, muss man dann irgendwas besonderes machen? Oder kann man gar erkennen, wenn der CAN-Bus eingesteckt wird?
Jeder Teilnehmer am CAN Bus muss sich erst mit dem Bus synchronisieren. Wenn der Bus offen ist, wird das nicht gelingen und CANGetOperatingMode wird nie den gewünschten Mode liefern. Schau mal nach, was für Rückgabewerte definiert sind. Für sync fail sollte eigentlich einer dabei sein. Für bus off auf jeden fall. FYI : Zur Zeit arbeite ich mit dem XC167. Zum bit INIT im control register steht folgendes in der Fußnote versteck:
1 | After resetting bit INIT by software without being in the bus-off state (e.g. after power-on), a sequence of 11 |
2 | consecutive recessive bits (11*’1’) on the bus has to be monitored before the module takes part in the CAN |
3 | traffic. |
4 | During a bus-off recovery procedure, 128 sequences of 11 consecutive recessive bits (11 * ’1’) have to be |
5 | detected. The monitoring of the recessive bit sequences is immediately started by hardware after entering the |
6 | bus-off state. The number of already detected 11 * ’1’ sequences is indicated by the receive error counter. |
7 | At the end of the bus-off recovery sequence, bit INIT is tested by hardware. If INIT is still set, the affected ASC |
8 | node controller waits until INIT is cleared and 11 consecutive recessive bits (11 * ’1’) are detected on the CAN |
9 | bus, before the node takes part in CAN traffic again. If INIT has been already cleared, the message transfer |
10 | between the affected ASC node controller and its associated CAN bus is immediately enabled. |
Hallo Heribert, die Library kenne ich nicht und weiss nicht, ob sie nur den Treiber anknipst oder einen halben CANopen-Stack bewegt. Ich rate mal: Dein Geraet versucht, etwas auf dem CAN zu senden, Heartbeat oder so? Ohne Gegenstelle, die ACKt, sendet der CAN-Controller sich den TX-Pin wund und geht dann nach paar Dutzend Versuchen in den Error-Passive-Zustand. Pruef auf alle Faelle, was fuer ein Fehlerwert von CANGetOperatingMode zurueckgeliefert wird. --Konrad
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.