CANベースのアプリケーションを作成するために、16ビットMCU PIC24HJ64GP504を使用しています。基本的に、ボードと1つのノード間の通信であり、CANを使用して1 Mbit / sでボードにデータを送信し続けます。1 Mbpsで動作するようにPIC24のECANモジュールを構成しています。最初の10ミリ秒の間、ECANモジュールが反対側から着信するすべてのメッセージを受け入れるようにコードを記述しました。その後、メッセージID 0x13のメッセージのみを受け入れるようにECANモジュールを再構成しました。
ここで問題が発生します。他のノードとボードの電源が同時に投入されます。もう1つのノードは、電源投入後40ミリ秒後にメッセージの送信を開始します。しかし、ボードからメッセージを受け取ることができません。ここで、最初にボードの電源を入れたら、新しいフィルターでECANモジュールを再構成し、落ち着いてから他のノードの電源を入れて、すべてが完全に機能するようにします。
ここで最も奇妙な部分です。ボードと他のノードの間にCANバスアナライザーが接続されていて、両方のノードに同時に電源を投入しても、すべてが正常に機能します。最初にボードの電源を投入する必要はありません。異なるメーカーの3つの異なるバスアナライザーでこれを試してみましたが、同じ結果が得られました。
ECANモジュールの再構成中は、落ち着くまでに少し時間がかかるようです。そして、バスにバスアナライザーが導入されたことで、今回は何とかしてすべてが完全に機能するように短縮されました。しかし、問題が正確に何であるかはわかりません。
私は過去7日間この問題に取り組んできました。
PS:今日、私はスコープで確認しましたが、電源投入後170 ms後に他のノードが送信を開始すると、すべてが正常に機能することがわかりました。それ以前は、バスアナライザーが接続されていないと、デバイスからメッセージが受信されません。最悪なのは、他のノードの送信を遅らせることができないことです。そのノードのファームウェアは独自のものです。
また、今日のフォーラムで、CANが機能するためにはノードに120Ωの抵抗が必要であることを読みました(ノードに抵抗がなく、ノードが正常に機能する場合でも、再構成後に落ち着くまでの時間を考えると)。バスアナライザーの導入により、ネットワークの電気的パラメーターが何らかの形で変化し、再構成後にノードが安定するまでの時間が短縮されると思われます。しかし、私はわかりません.. :(