Ich verwende eine 16-Bit-MCU, PIC24HJ64GP504 , um eine CAN-basierte Anwendung zu schreiben. Grundsätzlich ist es die Kommunikation zwischen meinem Board und einem anderen Knoten, die kontinuierlich Daten mit CAN mit 1 Mbit / s an mein Board sendet. Ich konfiguriere das ECAN-Modul in meinem PIC24 so, dass es mit 1 Mbit / s arbeitet. Ich habe den Code so geschrieben, dass das ECAN-Modul in den ersten 10 ms alle von der anderen Seite eingehenden Nachrichten akzeptiert. Danach habe ich das ECAN-Modul so konfiguriert, dass nur die Nachrichten mit der Nachrichten-ID 0x13 akzeptiert werden.
Jetzt kommt das Problem. Der andere Knoten und mein Board werden im selben Moment eingeschaltet. Der andere Knoten beginnt nach etwa 40 ms nach dem Einschalten mit der Übertragung von Nachrichten. Aber ich kann keine Nachricht auf meinem Board erhalten. Wenn ich jetzt mein Board zuerst einschalte, geben Sie ihm etwas Zeit, um das ECAN-Modul mit neuen Filtern neu zu konfigurieren und den anderen Knoten zu beruhigen und dann einzuschalten, dann funktioniert alles perfekt.
Jetzt der seltsamste Teil. Wenn ich einen CAN-Bus-Analysator zwischen meiner Karte und dem anderen Knoten angeschlossen habe und selbst wenn ich beide Knoten gleichzeitig einschalte, funktioniert alles einwandfrei ... ich muss meine Karte nicht zuerst einschalten. Ich habe dies mit drei verschiedenen Busanalysatoren verschiedener Hersteller versucht und die gleichen Ergebnisse erzielt.
Mir scheint, dass es während der Neukonfiguration des ECAN-Moduls einige Zeit dauert, bis es sich beruhigt hat. Und mit der Einführung des Busanalysators im Bus wird diese Zeit irgendwie verkürzt, damit alles perfekt funktioniert. Aber ich bin mir nicht sicher, was genau das Problem sein könnte.
Ich habe in den letzten sieben Tagen mit diesem Problem zu kämpfen.
PS: Heute habe ich mit einem Oszilloskop nachgefragt und festgestellt, dass das Ganze einwandfrei funktioniert, wenn der andere Knoten nach 170 ms nach dem Einschalten mit der Übertragung beginnt. Vorher empfängt mein Gerät keine Nachrichten, es sei denn, der Busanalysator ist angeschlossen. Das Schlimmste ist, dass ich die Übertragung des anderen Knotens nicht verzögern kann. Die Firmware dieses Knotens ist proprietär.
Außerdem habe ich heute in einem Forum gelesen, dass CAN den 120 Ω-Widerstand am Knoten benötigt, damit er funktioniert (obwohl mein Knoten keinen hat und einwandfrei funktioniert, vorausgesetzt, er hat nach der Neukonfiguration etwas Zeit, sich zu beruhigen). Ich vermute, dass die Einführung des Busanalysators die elektrischen Parameter einiger Netzwerke so ändert, dass die Zeit, die mein Knoten benötigt, um sich nach der Neukonfiguration einzurichten, verkürzt wird. Aber ich bin mir nicht sicher.. :(