評価ボード(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を使って通信は確認できています)

Parents
  • ikkiさん おはようございます、NAKAといいます。

    送信完了の割込みの設定は

    ①送信バッファの割込み許可
    TMIEC |= 0x0001; //CAN0送信バッファ0の割込み許可 
    ②送信割込みのプライオリティ設定
    CAN0TRMPR0 = 0; //CAN送信割込プライオリティ設定
    CAN0TRMPR1 = 1; //01:レベル2
    ③送信割込みマスクフラグ許可
      CAN0TRMMK = 0; //CAN送信割込マスクフラグ 0:許可

    こんな感じで割込み(vect=INTCAN0TRM)に飛んできますよ!

    P.S.
    勘違いだったかもしれませんが、CANの割込みにレジスタバンク使うとなんか調子悪かった覚えがあります。
    しっかり覚えてませんが、無しも試してください。
  • NAKAさま、
    大変お世話になっております。

    送信時のログを取れました。下記は繰り返されます。初めのポート設定はCAN APIでテスト問題ないです。

    しかし、main()の中のcan_init()が何の原因か繰り返し呼び出される、ということは何かリセットはかかっているでしょうか。

    //-----log
    [0000.000.044]--- CAN init PIOR4 = (05)
    [0000.000.136]--- CAN init P1 = (03)
    [0000.000.224]--- CAN init PM1 = (FE)
    [0000.000.312]--- CAN init TMIEC = (000F)
    [0000.000.404]--- CAN init CAN0TRMPR0 = (00)
    [0000.000.496]--- CAN init CAN0TRMPR1 = (01)
    [0000.000.584]--- CAN init CAN0TRMMK = (01)
    [0000.000.684] (can_start) CAN0TRMMK = (00)
    [0000.000.788]CAN:can_count.tx_max=(00)
    [0000.000.916]CA[0001.000.016]CAN:can_count.tx_max=(01)
    [0001.200.012]CAN:can_count.tx_max=(02)
    [0001.400.020]CAN:can_count.tx_max=(03)
    [0001.600.012]CAN:can_count.tx_max=(04)
    [0001.800.020]CAN:can_count.tx_max=(05)
    [0002.000.008]CAN:can_count.tx_max=(06)
    [0002.200.012]CAN:can_count.tx_max=(07)
    [0002.400.020]CAN:can_count.tx_max=(08)
    [0002.600.012]CAN:can_count.tx_max=(09)
    [0002.800.020]CAN:can_count.tx_max=(0A)
    [0003.000.016]CAN:can_count.tx_max=(0B)
    [0003.200.020]CAN:can_count.tx_max=(0C)
    [0003.400.020]CAN:can_count.tx_max=(0D)
    [0003.600.016]CAN:can_count.tx_max=(0E)
    [0003.800.016]CAN:can_count.tx_max=(0F)
    [0004.000.016]CAN:can_count.tx_max=(10)
    [0004.200.016]CAN:can_count.tx_max=(11)
    [0004.400.012]CAN:can_count.tx_max=(12)
    //-----以上のログが繰り返される

    よろしくお願いします。
  • 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.
    と書いてあるので
  • NAKAさま、
    本当にありがとうございます。

    改めてターゲットボードからCTXD0(P10)とCRXD0(P11)を取り、別のトランシーバーにあげたら、送っていただいたサンプルは完璧に動き出しました\(^o^)/
    やはりハードウェアの問題でした。

    感謝感謝!
  • NAKAです。

    >サンプルは完璧に動き出しました\(^o^)/
    ⇒でしょ (^_-)-☆
  • NAKAさま、
    いつもお世話になっております、ikkiです。

    トランシーバーを交換したら、
    同じ現象でしたので、考え変えたら
    原因は電圧が足らなかったことをわかりました!
    3.3Vはトランシーバーを駆動できないみたいです。
    (エミュレータ電源供給は3.3V)5V外部から供給したらパッチリ、サクサク動き出しました。
    これで一安心眠れそうです。
    いろいろありがとうございました。
Reply
  • NAKAさま、
    いつもお世話になっております、ikkiです。

    トランシーバーを交換したら、
    同じ現象でしたので、考え変えたら
    原因は電圧が足らなかったことをわかりました!
    3.3Vはトランシーバーを駆動できないみたいです。
    (エミュレータ電源供給は3.3V)5V外部から供給したらパッチリ、サクサク動き出しました。
    これで一安心眠れそうです。
    いろいろありがとうございました。
Children
No Data