RA6M5にてCANバストラフィックの測定

RA6M5にCANバスのアイドル時間を測定する機能があるようなので

バストラフィック測定を試みているのですが

取得できるアイドル時間のカウンタの値(BLSTSレジスタのBLC)がおかしいです。

CANバス完全アイドル状態で

測定時間を変えながら、BLCの値を取得してみたところ、下記のようになりました。

測定時間 1ms BLC:約680,000

測定時間 2ms BLC:約700,000

測定時間 4ms BLC:約770,000

測定時間10ms BLC:約785,000

測定時間100ms BLC:約1250,000

CANFDCLK クロックは 40 MHzのため

CANバス完全アイドル状態の時は

BLCの値× 25nsが 測定時間と一致するものかと思ったのですが、

680,000 × 25 ns = 17,000,000ns =  17ms

となり、良く分からない数値がBLCに入ってきてしまいます。

値も安定しておらず、測定区間1msのときで 650,000 - 690,000 くらいまでふらふらします。

CAN通信自体は問題なくできている状態です。

ユーザーズマニューアルにはテストモードだとうまく測定できないと記載されているので

下記のようにテストモードは使っていません。

CANバスにデータを流すと、若干BLCの数値が下がるため測定自体はしているようです。

何か分かる方おられましたらアドバイス頂けると助かります。

Parents
  • R_CANFD_Type * p_reg = R_CANFD;

    // オペレーションモード中のみ有効

    p_reg->CFDC2[1].BLCT_b.BLCE = 1; // 測定カウンタを動作モードに設定

    p_reg->CFDC2[1].BLCT_b.BLCLD = 1; // カウンタをBLSTSにロード + カウンタリセット

    BLC = (uint32_t)(p_reg->CFDC2[1].BLSTS >> 3);

    idle_time_ns = BLC * 25; // CANFDCLK 40MHzのとき、25ns

Reply
  • R_CANFD_Type * p_reg = R_CANFD;

    // オペレーションモード中のみ有効

    p_reg->CFDC2[1].BLCT_b.BLCE = 1; // 測定カウンタを動作モードに設定

    p_reg->CFDC2[1].BLCT_b.BLCLD = 1; // カウンタをBLSTSにロード + カウンタリセット

    BLC = (uint32_t)(p_reg->CFDC2[1].BLSTS >> 3);

    idle_time_ns = BLC * 25; // CANFDCLK 40MHzのとき、25ns

Children
No Data