Hallo zusammen,
ich habe hier ein Problem mit dem SJA1000. Meistens funktioniert alles
einwandfrei, aber ab und zu läßt sich der Controller nicht zum Senden
überreden. Beim ersten Sendeversuch geht er gleich auf "bus off". Das
ist auch unabhänging davon, ob andere Busteilnehmer angeschlossen sind.
Nach einer Neuinitialisierung passiert beim nächsten Sendeversuch wieder
dasselbe. Nur von der Stromversorgung ab- und wieder anklemmen bringt
was. Danach tut er dann meistens, als sei nichts gewesen. Wenn er einmal
funktioniert, arbeitet er auch tagelang ohne einen Fehler.
Woran kann das liegen?
wenn er in bus-off schält, liegt es meist an einem topologischen Fehler
des busses, kontrolliere mal Deine Terminierungswiderstände und schaue
(mit dem Oszi), wie das Signal auf dem Bus liegt.
Könnte sein dass Deine Busauslastung zu groß ist, mit einer hohen COB-ID
kann sich der controller (bei hoher Busauslastung) nicht durchsetzten
und der Sendeversuch geht schief - der daraus resultierende bus-off
lässt sich dann i.d.R. nur mit einer Neuinitialisierung beheben!
Oder aber Du hast ein Hardwarefehler, Stecker und Kabel kontrollieren.
Ein Softwareproblem (falsch initialisierte Baudrate, Tseg1, Tseg2,
Synchronization Jumpwidth...) würde ich ausschließen da Du ja sagst,
dass das device z.T. auch tagelang ohne Fehler am bus läuft!
Danke erstmal für die Antworten.
> Schwer zu sagen.
Jo, das ist mein Problem.
> Eventuell fehlende Terminierung.
Nein, die ist in Ordnung.
> Wie sieht denn Deine Schaltung so aus?
Der Controller steckt in einem Komplettgerät, das von einem Zulieferer
kommt. Außer Kabel, Terminierung und einem Peak-Adapter zum mithören
hängt nix dran. Ich habe auch verschiedene Kabel ausprobiert. Immer
dasselbe Ergebnis. Das Problem ist auch schon bei mehreren Geräten, die
komplett unterschiedlich verkabelt sind, aufgetreten. Ein defektes Gerät
oder falsche Verkabelung kann also ausgeschlossen werden.
> Ein Softwareproblem (falsch initialisierte Baudrate, Tseg1, Tseg2,> Synchronization Jumpwidth...) würde ich ausschließen da Du ja sagst,> dass das device z.T. auch tagelang ohne Fehler am bus läuft!
Ja. Es läuft aber, nachdem der Fehler aufgetreten ist, auch nach dem
Aus- und Einschalten der Versorgung problemlos, ohne daß ich den Bus
dabei auch nur berührt hätte. Keine Fehler - nichts. Das Verhalten ist
übrigens auch bei komplett getrenntem Bus (keine Terminierung, kein
anderer Busteilnehmer) gegeben. Meistens geht er - wie ich es erwarten
würde - auf "error passive" und läuft dann nach Anschließen des Busses
problemlos an, manchmal geht er aber auch hier auf "bus off" und ist
dann generell nicht mehr zur Mitarbeit zu überreden.
Vielleicht liegt es auch am Bus-Treiber-IC: der hat ein "ChipSelect",
ist das in Ordnung?
Kannst Du den SJA noch ansprechen, wenn der Fehler da ist?
Latch-Up?
Wie sind die Kabel angeschlossen? CAN-Gnd verbunden?
Masseschleife (Querströme) über den PEAK?
> Vielleicht liegt es auch am Bus-Treiber-IC: der hat ein "ChipSelect",> ist das in Ordnung?
Sieht eigentlich alles ok aus.
> Kannst Du den SJA noch ansprechen, wenn der Fehler da ist?
Ja, ansprechen geht noch. Es zeigt sich, daß er im Reset-Modus ist. Ich
kann ihn auch wie im Datenblatt beschrieben wieder zurück in den
normalen Modus schalten, aber sobald ich eine Botschaft senden will, ist
er gleich wieder im Reset-Mode.
> Latch-Up?
Erst beim ersten Sendeversuch? Oder könnte schon vorher was passiert
sein, das sich erst beim Senden auswirkt? Aber dann immer mit dem
gleichen Ergebnis?
> Wie sind die Kabel angeschlossen? CAN-Gnd verbunden?
Nein. Es sind aber noch Ethernet und ein serieller Port angeschlossen,
aber keins direkt mit dem PC. Ich hab jetzt mal versucht, was passiert,
wenn ich vom Gerät alles außer CAN und Stromversorgung abtrenne und vom
PC alles außer CAN (ist ein Laptop). Das Ergebnis ist dasselbe.
Ich werde wohl mal mit einem Oszi messen müssen, was auf dem CAN
passiert. Vielleicht passiert ja schon beim Transceiver was.
Wann genau kommt es eigentlich normalerweise zum bus off? Bei fehlender
Gegenstation oder Terminierung ja nicht. Beim Kurzschluß auf dem CAN
aber schon.
Hmm, ich habe gerade festgestellt, daß der Controller korrekt sendet,
wenn ich ihm eine Botschaft sende. Er funktioniert also dann richtig,
wenn er wenigstens eine Botschaft empfangen hat, bevor er das erste mal
sendet.
Hey,
hatte mit einem anderen Transceiver dasselbe Problem.
Bei mir war der Transmit-Pin am Controller beim Starten so gesetzt, dass
die CAN-TxD kurz "gezappelt" hat. Dieses Zappeln hat dazu geführt, das
der Transceiver eine ungültige Message erkannt hat (eigentlich auch
korrekt). Als ich dann die Ports richtig gesetzt hatte war das Problem
weg.
Vielleicht ist es bei dir ähnlich. Einfach mal mit dem Oszi beim
Einschalten (oder Reset) den TxD des CAN-Controllers anschauen - da darf
sich nur was tun wenn auch gesendet werden soll.
Hoffe es hilft!!!