Forum: Mikrocontroller und Digitale Elektronik CAN hängt beim Hochfahren, wenn kein CAN-Bus angeschlossen (PIC32MX)


von Heribert (Gast)


Lesenswert?

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?

von H.Joachim S. (crazyhorse)


Lesenswert?

Fehler behandeln.
Falls ohne den CAN eh keine sinnvolle Restfunktion des Geräts möglich 
ist, wenigstens irgendwie anzeigen.

von Heribert (Gast)


Lesenswert?

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?

von Softwareverwickler (Gast)


Lesenswert?

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.

von Konrad (Gast)


Lesenswert?

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