評価ボード(QB-R5F10BMG-TB) CAN0の送信割込を使ってCAN通信

お世話になっております。

/*参考 

*

* CAN/LIN/UART/PORT Checker for RL78/F14

* Target: QB-R5F10PPJ-TB (RL78/F14, 100pin, 256KB ROM, 20KB RAM)

* Author: Yasushi Tanaka

/

移植RL78/F13 評価ボード(QB-R5F10BMG-TB)

開発環境: e2-studio7.4

toolChain: Renesas CC-RL C

デバッグツール: e2-Lite

/* CANの割込(vector.c)の設定 */

#pragma interrupt intcan0err_isr(vect=INTCAN0ERR, bank=RB1)

#pragma interrupt intcan0trm_isr(vect=INTCAN0TRM, bank=RB1)

#pragma interrupt intcangrfr_isr(vect=INTCANGRFR, bank=RB1)

#pragma interrupt intcangerr_isr(vect=INTCANGERR, bank=RB1)

現象は、

送信割り込みを使ってCAN送信しようとしますが、

CAN0のスロットにデータは入っても(確認済)、割込のルーチンintcan0trm_isr()は呼び出されません。

下記のように割り込みが許可されていて問題なさそうに見えますが。

/* CAN0送信割り込みを許可 */

MK2H &= (u1)(~RL78F_MK2H_CAN0TRMMK);

考えてられる原因は何でしょうか、ヒントをいただければ助かります。

よろしくお願いします。

(ちなみに割り込み使わずにCAN APIを使って通信は確認できています)

  • NAKAさま、
    ikkiです、いつもお世話になっております。
    送っていただいたCAN割り込みのサンプルですが、
    他のテストやってから戻って再コンパイルして実行したら、CANモニターにエラーで止まってしまいます。
     そこで、新しいプロジェクトを作り、コード生成から同じサンプルを使うとCANエラー出るが、CAN通信は正常に動きます。

    e2 studio, e2 Liteデバッガー
    1)端子割り当て設定(そのまま)
    2)クロック設定(ほとんど変えず)
    3)オンチップデバッグ設定
    4)WDT使用しない設定
    上記のみ実施。

    コード自動生成はソース以外に何か特別処理をされてるでしょうか。
    毎回コード生成からやらないと行けませんか?

    よろしくお願いします。
  • ikkiさん NAKAです。
    ごめんなさい、見逃してました!!

    チョコ先生からアドバイスがあったので、実践しているのですが、NAKAはコード生成は初期設定を参考に覗くだけで、関数は自分で作るようにしています。新規のプロジェクトを作って、MAINに貼るだけで、CAN通信に必要な設定は全てされているため、他は必要ないはずです。僕の北斗電子のF14ボードで一度たりともCANエラーはでたことがないので、多分大丈夫だと思います。

    他の機能を使う時のクロックの設定が違ってたりしないでしょうか?以前マサさんのコードを参考にされてた時はオンチップオシレータの設定を16MHzのようでしたが、上のサンプルではオンチップオシレータ32MHzですけど良かったでしょうか?

  • NAKAさま、
    ご返事ありがとうございます。

    CANの割り込みプログラムは、CANエラーが沢山出て止まっている、って報告したが、いろいろやってる内に、動いているようです。但し、めっちゃ遅くなっています。CANエラーは出ながらも、通信が確認できました、やはり不安定のようです。

    3つのサンプルを切り替えてテストしていますか、
    (1)CAN-API: 割り込み使わないサンプル
    (2)CAN-Int: 作っていただいた割り込みサンプル
    (3)CAN-Drv: ドライバサンプル、割り込み使用

    そして(1)は安定して確認しました。
    (2)は上記の通りです。

    (3)については、いきなりCANエラー割り込み発生して(C0ERFLL=0x2003、0ビットのEWFエラー)全く通信しません。
    このサンプルは4つの送信スロットを使っています。今は原因を追究しています。

    CANのinternal-loop-backテストモードでは正常のようですが、external-loop-backテストモードとnormal-mode通常モードではEWFエラー割り込みが発生します。

    ちなみにバスに接続しているRX65のCAN送信サンプルは安定して通信を確認できていますので、ネットワークは問題ないと見ています。
    何か設定はおかしいに違いありません。
  • ikkiさん NAKAです。
    RL78/F15(CANが2ch)を使って、MAINバスをCAN0chで受信して、そのまま即座に全部ローカルバスへCAN1chから送信する。みたいなことをやってますが、全然遅くないですよ。上記の割込みの設定のままです。ikkiさんのMAINバスの占有率がどれだけギリギリかわかりませんが、車両のCAN程度なら全然大丈夫です。
  • NAKAさま、ありがとうございます。
    改めてテストさせていただきました。

    CAN送信した後に、待ちループを頭から移しまして。
    概ね通信を確認できましたが、
    しかし、CANモニターにエラーがいつも点灯します。
    リトライがしているような感じ、実際の送信は約数百msecから1秒ぐらいの間隔です(CANモニター)。

    試しにC0ERFLLをログに取ってみましたが、0x201Fになっていて、意味が分かりません。
    このレジスタから何のエラーか分かりますか?

    よろしくお願いします。
  • ikkiさん NAKAです。

    確認ですが新規のプロジェクトを作って、以前紹介したサンプルをMAINに張り付けただけの状態(それ以外何もしない)でエラーが起きるのでしょうか?であればハードの可能性もあります。電源が不安定とか、ノイズとか。


    >試しにC0ERFLLをログに取ってみましたが、0x201Fになっていて、意味が分かりません。
    >このレジスタから何のエラーか分かりますか?
    ⇒データシートに記載がありますよ!マイコン(CAN機能)から”H"を送信したのにCANバスでは”L”を検出しちゃったためB1ERRが立って、その状態が続いたのでバスオフになっちゃったって感じでしょうか?

    エラーの原因までは、そのステータスだけでははわかりませんけど(^^)/

    ファイト!
  • NAKAさま、ありがとうございます。

    新しいプロジェクトを作って改めてテストさせていただきました。

    結果は同じです。相変わらずCANエラーが発生しますが、通信もしています。

    カウンターを作ってCANメッセージに入れて確認したら、エラーのせいかカウンターが飛ばされたり、また連続短時間に同じ値のメッセージが表示されたりします。
    ハードウェア的にリトライがかかったりしているようです。

    配線を見直したり、電源を強化したりしましたが、やはり不安定のようなので、ノイズのせいでしょうか?
  • ikkiさん NAKAです。

    CANでトラブった経験がそんなに無いので、アドバイスが難しいかも?ですが終端処理とかしっかりしてますか?

    一応、朝から北斗電子のF14ボード引っ張り出し、プロジェクトにぺたんと貼って動かしてみましたが、やはりエラーは出ませんし、

    データに 「TMDF30H = c_TX;       //送信DATAバッファ0にDATAをSET!」とかしてモニタしても当然、カウンタ値は抜けませんし......

    ハードなのかなぁ~???

    唯一

    極まれにエラーフレームが発生する!という事例で調査したことがあって

    原因と思われるのが、

    基板実装屋さんが電源のコンデンサを指示したものと間違えてESRの高いものが実装されてたことがありました。

    電源ICのカタログでは

    のようにESR3Ω以上だと安定領域から外れる恐れがあり、ついていたアルミ電解は

    のようでさらに温度特性で低温になるとさらに悪化するらしいです。

     

    実際の波形が

    このように負荷電流の変化がトランジェント応答に現れちゃってる感じになったことがあります。

    これでも、CANの規格は十分に満足しており、実機での評価中は2日間一度もエラーフレームは発生しませんでした。

    極低温の環境だと可能性があるのかもしれません。

     

    そして、当初に設計したコンデンサを実装したところ

    このように電源も波形も安定して、その後そういった報告は無いと聞いております。

     

    もう一度確認ですが、先のサンプルに一切手を加えない状態でエラーがあるのでしょうか?

    だとやっぱり、ハード?

  • NAKAさま、
    本当にありがとうございます。

    何度も送っていただいたサンプルでトライしてみたが、エラーが必ず出ます。
    しかし、昨日は割と調子が良かったですが、
    今改めて新規のプロジェクトを作ってテストしてみますと、エラーとなって全く通信しません。

    昨日は9割以上通信できていました。
    エラーでパケットが抜けたり、ハードウェア的にリトライしたりしても。

    やはりハードウェア的な問題でしょうか、とにかく不安定です。

    手元に北斗電子の64ピンのRL78/F13ボードがあってまだ動かせていないですが、それでも確かめたいです。

    しっかりターミナルをつけるために、両端にRX65のボード(ターミナル付)を置いています。
    RX65のCANは割り込みを使わないですが、常に安定しています。

    ターゲットボードに付いてるトラシーバーを使わずに他のトラシーバーを使っても、100%通信できているとはできませんでした。
  • NAKAです。

    多分関係ないし、
    解放で大丈夫だと思いますが、TJA1050が実装されているならSpinをGNDに落としておきますか?

    一応
    Control pin S allows two operating modes to be selected:
    high-speed mode or silent mode.
    The high-speed mode is the normal operating mode and is
    selected by connecting pin S to ground. It is the default
    mode if pin S is not connected. However, to ensure EMI
    performance in applications using only the high-speed
    mode, it is recommended that pin S is connected to
    ground.
    と書いてあるので