CAN通信におけるエラーの原因と解決策について

初めまして、NNNです。初投稿で至らぬ点等あるかと存じますが、ご容赦ください。

初歩的な内容で大変恐縮ですが、CAN通信の試験をしていて、うまくいかない原因を探っています。
私としてはACKエラーが出ていると考えていますが、その原因と解決策についてご教授いただけませんか。

使用基板:Renesas SynergyのスターターキットSK-S7G2
参考にしているサンプル
 ① CAN_HAL_MG_AP.zip
   r11an0065eu0101-synergy-can-hal-mod-guide.pdf
 ② GUIX_Basic_SK_S7G2.zip
 ※GUIXも使用したいため、①のコードを②へ移し使用しています。

【現状】
①SK-S7G2へ同じプログラムを書き込み通信試験を行いました。
 →オシロスコープにて3つのID全て波形が出ることと、
  受信側基板のLEDが光ることを確認しました。
②SK-S7G2とリチウムバッテリーとの通信試験を行いました。
 →IDが1で、ACKスロットがリセッシブになっている波形が、再送され続けております。

【バッテリーのプロトコル】
・CAN2.0インタフェース
・11bitアドレス
・ボーレート:250kbps
・3つのCANIDを送信することが必要
 ① CANID 0x0001
   Data 0~8byte (無視される)
 ② CANID 0x0002
   Data 最大256byte ※今回送りたいデータは8byte
 ③ CANID 0x0003
   Data 0~8byte (無視される)

【SynergyConfigurationの設定】
 BRP:14
 TS1:10 Time Quanta
 TS2:5 Time Quanta
 SJW:4 Time Quanta
 Clock Source:PCLKB (Clocksタブにて、PCLKB Div/4 → PCLKB 60MHz)
 Standard or Ectended ID Mode:Standard ID Mode
 Mailbox 0 Tyoe:Transmit Mailbox
 Mailbox 1 Tyoe:Transmit Mailbox
 Mailbox 2 Tyoe:Transmit Mailbox
 Mailbox Frame Type: (全て)Data Mailbox
 Mailbox 0-3 Group Mask: 0x1FFFFFFF
 Priority 4

【ソースの主な変更点】can_tx_rx.c
if (sw4pin == IOPORT_LEVEL_LOW)  //If switch S4 is pressed the execute transmission
        {
            can_liBattery_start(); //Call to CAN transmit function
            tx_thread_sleep(10);
            can_liBattery_data();
            tx_thread_sleep(10);
            can_liBattery_end();
            tx_thread_sleep(10);
        }

void can_liBattery_start()
{
    tx_data[0]= 0x00;
    tx_data[1]= 0x00;
    ・・・
    tx_data[7]= 0x00;
    tx_id = 0x0001;
    can_tx(tx_id, tx_data,1);
}

void can_liBattery_data()
{
    tx_data[0]= 0xEA;
    ・・・
    tx_data[7]= 0xF5;
    tx_id = 0x0002;
    can_tx(tx_id, tx_data,8);
}

void can_liBattery_end()
{
    tx_data[0]= 0x00;
    ・・・
    tx_data[7]= 0x00;
    tx_id = 0x0003;
    can_tx(tx_id, tx_data,1);
}

長文になりましたが、何卒お力をお貸しいただけますよう、よろしくお願いいたします。

Parents
  • 「受信側基板のLEDが光ることを確認」は、受信側が正しくデータを受信できているとの事でしょうか?
    「ACKスロットがリセッシブになっている波形が、再送され続けております」は送信側がACKエラーで再送を繰り返しているとの事でしょうか?

    かなりのいい加減な予想になってしまうのですが、
    1.本当にACKが無い。バスが切れている。
    2.物理層が不適切でACKのタイミングが合わない。SK-S7G2のマニュアルでターミネータが60Ωになっているのが少し気になります。規格ではなるべく離れたユニット2台にのみ120Ωを挿入する事になっているはずです。
    ではないでしょうか?いずれにしても受信側が正しくデータを受信できているならこれは誤りです。
Reply
  • 「受信側基板のLEDが光ることを確認」は、受信側が正しくデータを受信できているとの事でしょうか?
    「ACKスロットがリセッシブになっている波形が、再送され続けております」は送信側がACKエラーで再送を繰り返しているとの事でしょうか?

    かなりのいい加減な予想になってしまうのですが、
    1.本当にACKが無い。バスが切れている。
    2.物理層が不適切でACKのタイミングが合わない。SK-S7G2のマニュアルでターミネータが60Ωになっているのが少し気になります。規格ではなるべく離れたユニット2台にのみ120Ωを挿入する事になっているはずです。
    ではないでしょうか?いずれにしても受信側が正しくデータを受信できているならこれは誤りです。
Children
No Data