RX63Nでpingが通りません

はじめまして。

RX63NとRenesas starter kitを使用して
TCP/IPを動作させたいのですがpingが通りません。

開発環境はe2studioになります。

TCP/IPのサンプルプログラムではpingの応答がありますが、
RX63N版はt4しかFITが使用されていない為、新規のプロジェクトを作成し、
bsp、cmt、ether、t4_driver、t4のFITを使用して実現したいと考えております。

t4_driverはRX63Nに対応していないため、RX63Nでも認識するようにxmlファイルを編集し、
各処理で2ポート対応になっている箇所を1ポートのみの処理になるように変更しております。

main()の処理は、TCP/IPのサンプルプログラムのRX63N版にあります、
以下のソースを使用し、echo_srv()をコールする流れにしております。

 rx63n_rsk\src\t4\tcp_blocking_sample\echo_srv.c

Wiresharkで確認したところ以下のように相手のMACアドレスを聞いてますが、
応答がない状態です。

 PCのIP:192.168.0.3
 RX63NのIP:192.168.0.2

 Broadcast ARP 42 Who has 192.168.0.3? Tell 192.168.0.2

同じような事を試した方がおられましたら、アドバイスを頂けないでしょうか。

Parents
  • モンゴリスタさん。

    こんにちは、シェルティです。

    以下手順でRX63N RSK上でFITモジュールを組み立てて、
    TCP/IPを動かすことができました。試してみてください。

    あとは、SCIモジュールやフラッシュモジュールを組み込んでRX63Nでも各種FITモジュールが使えました。

    (1)e2 studio を起動、新規プロジェクト作成
     ・ファイル→新規→プロジェクト
     ・C→C Project→次へボタン
     ・プロジェクト名「rx63n_rsk」、プロジェクトの種類「Sample Project」
      ツールチェイン「Renesas RXC Toolchain」
     ・ターゲットの選択「R5F563NBDxFC」→次へボタン
     ・「FITモジュールを使用する」にチェック。
      FITモジュールをダウンロードボタンを押して最新のFITモジュール
      (RXマイコン用デバイスドライバ)を全部ダウンロードしておく(※)
      →次へボタン。
     ・次へボタン。
     ・次へボタン。
     ・次へボタン。
     ・終了ボタン。

     ※ダウンロードに失敗するときは、以下で直ります。
     ・ウィンドウ→設定
     ・C→Renesas→スマートブラウザ→My Renesasのアカウントを再入力する、にチェック
     ・もう一度e2 studioのFITモジュールのダウンロードを試みる
     
    (2)e2 studio内のFIT Configurator でFITモジュールを組み立てる
     ・r_bsp, r_cmt_rx, r_ether_rx, r_t4_rx をモジュール追加し、コード生成
      r_t4_driver_rxがないので、依存関係のエラーが出ますが無視します。
      T4ライブラリ関連の依存関係:
       r_t4_rx ---> r_t4_driver_rx ---> r_ether_rx ---> r_bsp
                                 └---> r_cmt_rx ---> r_bsp

      各FITモジュールのインクルードパスと、ライブラリファイルが自動でプロジェクト登録される。
      T4ライブラリ(T4_Library_rxv1_ether_little.lib)は何故か登録されないので
      コンパイラの設定からリンカーオプションに手動での登録が必要。

     ・r_ether_rxが必要とするセクションを手動追加する
      B_RX_DESC_1 16バイトアライメントが必要
      B_TX_DESC_1 16バイトアライメントが必要
      B_ETHERNET_BUFFERS_1 32バイトアライメントが必要

    (3)RX63N非対応のr_t4_driver_rx を組み込む
     ・r_t4_driver_rx_v1.02.zip を解凍して出てくる、
      r_configフォルダと、r_t4_driver_rx を新規作成しているプロジェクトに
      上書きコピー
     ・e2 studio のプロジェクトエクスプローラのプロジェクト名を右クリックし、
      新規→ソースフォルダにて、r_t4_driver_rxフォルダを指定
     ・/r_t4_driver_rx/src/t4_driver.c はRX63N対応しておらず、
      Etherが2ch有ることを前提としたコードとなっているので、
      Etherが1chのRX63N用に2ch目のコードをコメントアウトする。
      具体的には、以下行をコメントアウト。
      105行目     : R_ETHER_Control(CONTROL_POWER_ON, param);
      113~117行目: ret = R_ETHER_Open_ZC2(1, (const uint8_t *) & _myethaddr[1], false);
        126行目     : R_ETHER_Control(CONTROL_POWER_OFF, param);
        210行目     : R_ETHER_LinkProcess(1);
        224行目     : R_ETHER_LinkProcess(1);

     ・r_t4_driver_rx_v1.02.zip は、r_t4_rx_v2.05.zipに対応しておらず、
      get_random_number()関数がないので、以下のように実装。
      stdlib.hのインクルードも忘れずに実施。

    void get_random_number(UB *random, UW len)
    {
     uint32_t i;

     srand(tcpudp_time_cnt);
     for(i=0; i<len; i++)
     {
      random[i] = rand();
     }
    }

    (3)EtherドライバのコンフィグをRX63N RSK用に変更する
     ・/r_config/r_ether_rx_config.h のコメントに従って、以下変更
      ETHER_CFG_CH0_PHY_ADDRESS 0 -> 31
        ETHER_CFG_CH0_PHY_ACCESS 1 -> 0
        ETHER_CFG_USE_LINKSTA 1 -> 0

    (4)動作確認用のサンプルコードをT4ライブラリサンプルコードから移植
     ・T4ライブラリのページから以下ダウンロード
      http://japan.renesas.com/mw/t4
      →関連FITモジュール
       →TCP/IPサンプルプログラム
     ・main.c と tcp_blocking_sample~udp_nonblocking_sampleフォルダのうち
      どれか好きな1個だけを、(1)で新規作成中のプロジェクトの src フォルダにコピー
     ・rx63n_rsk.cは削除しておく

    (5)r_t4_rx のコンフィグでチャネル数を1に変更する
     /r_t4_rx/src/config_tcpudp.c で _t4_channel_num を 2 から 1 に変更する

    (6)T4ライブラリ最新版 V205のIGMP機能を使おうとしたら、
     もう少し改造が必要でした。必要でしたらリクエストください。手順を書き出してみます。

    以上です

  • シェルティさん

    はじめまして、モンゴリスタと申します。

    丁寧なアドバイスありがとうございます。

    早速、試してみたのですが私の環境ではうまくいきませんでした。

    シェルティさんの手順と、いくつか差分があります。

    #言うまでもない内容は省かれていたと思いますが、

     念のため、詳細まで記載します。

    ・新規プロジェクト作成の「ターゲットの選択」ではR5F563NFDxFC

    ・r_bsp\platform.hの#include "./board/rskrx63n/r_bsp.h"を有効

    ・r_t4_rx\lib\r_t4_itcpip.hに次の1行を追加

      #define _far←コンパイルエラー対応

    ・src\tcp_blocking_sample\echo_srv.c

     #include "r_ether.h" -> #include "r_ether_rx_if.h"

    ・組み込み用 TCP/IP M3S-T4-Tiny を用いたサンプルプログラムを参照に

     基盤のチップ抵抗を告ぎのように変更

      R96 → 外す

      R98 → 付ける

     ※シェルティさんの対応内容だとLINKSTAを使用しないので、

      本変更は不要という認識です。

    pingの結果

     192.168.0.3 に ping を送信しています 32 バイトのデータ:

     192.168.0.2 からの応答: 宛先ホストに到達できません。

    自分でも引き続き調査致しますので、

    何か気付き点があればご教授頂けると助かります。

Reply
  • シェルティさん

    はじめまして、モンゴリスタと申します。

    丁寧なアドバイスありがとうございます。

    早速、試してみたのですが私の環境ではうまくいきませんでした。

    シェルティさんの手順と、いくつか差分があります。

    #言うまでもない内容は省かれていたと思いますが、

     念のため、詳細まで記載します。

    ・新規プロジェクト作成の「ターゲットの選択」ではR5F563NFDxFC

    ・r_bsp\platform.hの#include "./board/rskrx63n/r_bsp.h"を有効

    ・r_t4_rx\lib\r_t4_itcpip.hに次の1行を追加

      #define _far←コンパイルエラー対応

    ・src\tcp_blocking_sample\echo_srv.c

     #include "r_ether.h" -> #include "r_ether_rx_if.h"

    ・組み込み用 TCP/IP M3S-T4-Tiny を用いたサンプルプログラムを参照に

     基盤のチップ抵抗を告ぎのように変更

      R96 → 外す

      R98 → 付ける

     ※シェルティさんの対応内容だとLINKSTAを使用しないので、

      本変更は不要という認識です。

    pingの結果

     192.168.0.3 に ping を送信しています 32 バイトのデータ:

     192.168.0.2 からの応答: 宛先ホストに到達できません。

    自分でも引き続き調査致しますので、

    何か気付き点があればご教授頂けると助かります。

Children
  • モンゴリスタさん

    差分情報ありがとうございます。
    確認してみましたが、ここまで対応できていれば動くのではないかという感触です。

    こちらで動作確認したプロジェクト一式をサーバにアップしましたので
    以下試してもらえますか?

    http://shelty1.servegame.com/~collie/data/cafe_rene/rx63n_rsk.zip

    なお、ターゲットの選択でチップ型番が違うことについては失礼しました。
    RX63NのRSKボードは2世代ありまして、RAM256KB版(現行品)→R5F563NFDxFCと、
    旧来品→R5F563NBDxFCです。私が持っているのが旧来品で、モンゴリスタさんが
    持っている現行品とチップ型番が違いました。

    上記ZIPファイルもE1エミュレータの設定が旧来品のままですので
    すみませんが、e2 studio上でE1エミュレータ設定を現行品のチップ型番に変更して試してみてください。

    まずはモンゴリスタさんが組み立てたプロジェクトと上記ZIPファイルのDIFFを取って
    コード差分を調べるのも良いとも思います。

    以上です

  • モンゴリスタさん

    すみません、本件ですがソフトウェアの二次配布に当てはまると思いますのでサーバからデータ削除しました。

    すみませんが、同内容をルネサスさんの技術サポートに問い合わせてみてはいかがでしょうか。

    以上です

  • シェルティさん

    追加情報ありがとうございます。

    二次配布に該当するのですね、残念です。

    もう1点だけ、教えて頂きたいことがあります。

    r_ether_rxが必要とするセクションの件ですが、

    16バイトと32バイトのアライメントは、どのように設定されておりますでしょうか。

    プロジェクトのプロパティ->C/C++ビルド->Linker->セクションに

    B_RX_DESC_1、B_TX_DESC_1、B_ETHERNET_BUFFERS_1を

    追加しましたがアライメントについては意識しておりませんでした。

    本件について、他の方の投稿でもシェルティさんの回答がありましたので、

    このへんに問題があるのかと考えております。

    お手数ですが、設定方法を教えて頂けないでしょうか。

  • モンゴリスタさん

    セクションの設定ですが、追加いただいた3個のセクションを
    以下スクリーンショットのようにRAM領域の先頭(0x00000000番地※)から並べていきます。
     ※ポインタアクセスを含む未知の不具合があった場合、
      不具合コードから0番地付近への書き込みが発生する可能性がほかの番地より高いので、
      フェールセーフの観点から0x00000000ではなく、0x00001000などから配置しはじめてもよいです。


    参考になりましたら幸いです。

    以上です

  • すみません、1点補足です。

    セクションの順番は念には念を入れて

    B_ETHERNET_BUFFERS_1→B_RX_DESC_1→B_TX_DESC_1の順番に並べるのがよいです。

    理由は、B_RX_DESC_1とB_TX_DESC_1の個数(受信ディスクリプタ、送信ディスクリプタの個数)が /r_config/r_ether_rx_config.h で

    設定できるのですが、個数の合計が奇数個になった場合に、B_ETHERNET_BUFFERS_1が32バイトアライメントが保てなくなるためです。

    デフォルト設定は受信ディスクリプタと送信ディスクリプタがそれぞれ1個で、合計2個となり、

    続くB_ETHERNET_BUFFERS_1が32バイトの倍数に配置されます。

    B_ETHERNET_BUFFERS_1→B_RX_DESC_1→B_TX_DESC_1の順番に並べれば、

    受信ディスクリプタと送信ディスクリプタの個数が奇数個になってもだいじょうぶです。

    以上です

  • シェルティさん

    セクションの回答ありがとうございます。

    私の内容と同じでした。

    他に考えられる点もなく行き詰まりましたので、

    あとは技術サポートに問い合わせてみます。

    親切な対応ありがとうございました。