RX72NでのEtherenet通信(ETHERC1_RMII使用時)の設定について

こんにちは。TYと申します。

RX72NでETHERC1_RMIIを使用したEthernet通信を行おうとしております。動作環境は下記になります。

--動作環境-

  • 使用マイコン:RX72N(224pin)
  • 開発環境:e2studio,スマートコンフィグレータ
  • r_ether_rx(Ver.1.2)
  • r_t4_rx(Ver.2.09)
  • r_t4_driver_rx(Ver.1.08)

この環境下で、r_t4_driver.c(164行目)R_ETHER_Open_ZC2(1,1, (const uint8_t *) & _myethaddr[1], false);を実行するとpyh.cのphy_mii_write1関数のfor文でループ状態となります。

Ethernetに関する設定はSmartConfigurator上で行っているのですが、The register bus of PHY1 for ETHER0/1( ETHER_CFG_CH1_PHY_ACCESS)をUse ETHER0(0)にするとループ状態ではなくなります。ETHERC1_RMIIを使う場合、上記部分はUse ETHER1(1)を使うのが正しいのではないかと考えているのですが、こちらの設定で正常なのでしょうか。

この後に記述したEthernet関連の処理が上手くいかないため、一要因の判別として確認できればと思います。

情報の不足等がありましたら追加いたします。何卒よろしくお願いいたします。

[追記]本件、リプライにてご指摘いただいた内容で解決いたしました。数々のご協力誠にありがとうございます。

Parents
  • PHY-LSI address setting for ETHER0/1 が共に0となっていますが、management data input/output 通信(MDCとMDIOを使った通信)をするにあたり同じアドレスでは通信できないです。実際の回路がそうなっているのですか?その場合ですが、マネジメント通信でREADは出来ないので初期化シーケンスで工夫が必要です(書き込みのみで行う)。おそらくphy_mii_write1はレジスタに書き込んで、変更したレジスタの値を読み込んでVerifyしていると思います。もしそうならVerifyをなしにするなどの変更で切り抜けられるのではないかと推測します。

  • Yamamotoさん

    リプライありがとうございます。

    接続している基板のEthernet ICは1つ(アドレス0)です。そのためご指摘いただいたようにPHY-LSI address setting for ETHER0 → 1,PHY-LSI address setting for ETHER1→0としてみましたが、pyh.cのphy_mii_write1関数のfor文でループ状態のままでした。

  • TYさん

    シェルティです、こんにちは。ルネサスの中の人です。ご利用いただいているr_t4_rx (TCP/IPプロトコルスタック)の設計者です。

    RX72Nマイコンをご検討いただきありがとうございます。

    Yamamotoさんがご指摘いただいている点、クリアされているようですね。他にも端子設定、セクション設定あたりが怪しいです。

    以下RX72N Envision Kitでスクラッチからスマートコンフィグレータを使ってTCP/IPシステムを組み立てる例を解説したサイトがあります。こちらが参考になるかもしれません。特に端子設定は1個でも間違えるとうまくEther通信が動かないので要注意ですね。

    https://github.com/renesas/rx72n-envision-kit/wiki/1-Ether-TCP-IP

    あと、チャネル0ではなく1を使っているのも落とし穴があったような気がします。ちょっと今の担当者に確認してきます。(シェルティは現場を離れて外野からうるさく言う人になりつつあります)

    以上です

  • 回路設計で2つPHYを使っていて実際の回路ではPHYアドレスを両方とも0にしているということでいいんですよね?PHYが1つじゃなくて。

    PHYが1つなら、多分、PHYの数を設定できると思います。できないなら使わない方のPHYの処理コードをコメントアウトすればマネジメント通信は正常終了できるようになると思います。

    2つ使っていて同じPHYアドレスにしているなら、ベリファイ読み込みをコメントアウトです。スマートコンフィギュレータの設定を変えても0を指定した書き込み、読み込みで2つのPHYが反応します。書き込みは大丈夫ですが、読み込みは二つのPHYがMDIOラインをドライブするのでおかしなことになります。あと、PHYによっては特定のアドレスがブロードキャストアドレス設定になっている場合(旧MicrelのPHYは0がブロードキャストアドレスです。最近の品番はコンフィギュレーションピンによってブロードキャストを無効にできるようになりました)があり、それを知らずに回路設計すると違うアドレスなのにブロードキャストアドレスとして2つのPHYが反応するのでReadが正しく終了できないということがあります。

    ぶっちゃけですが、phy.cはレジスタ書き換えのコード(だと思います。RX72MのEtherCATの生成コードでは同じようなファイルでPHYのレジスタ設定書き換えをしています)ですので、PHYの初期値で通信状態が作れるならphy.cを実際に実行させず、コメントアウトで無理やり先に進めてもいいかなと思います。PHYは品番によってパワーオンリセット時のコンフィグピンの状態で内部レジスタ値が変わったするのでそこで通信できそうな状態なら私の書いた方法でも良いように思います。

    おそらく、オートネゴシエーション有効・無効、LINK時のLED点灯パターン等の設定をしているだけだと思います。

  • シェル

    ティさん

    リプライありがとうございます。また、お返事が遅くなり申し訳ございません。

    解説サイトのご案内ありがとうございます。まだ試せておらず申し訳ないのですが、こちらを参考に再設定いたします。チャネル1についての落とし穴ももし確認できましたらご教示いただけると幸いです。

    お手数おかけしますがよろしくお願いいたします。

  • Ymamotoさん

    リプライありがとうございます。

    回路設計で1つPHYを使用し、PHYアドレスは0に設定しております。情報が不足しており申し訳ないです。

    PHYの数設定、難しい場合はコメントアウトを試してみます。すぐに試すことができず申し訳ないですが、進展ありましたらまたご報告いたします。

    よろしくお願いいたします。

Reply
  • Ymamotoさん

    リプライありがとうございます。

    回路設計で1つPHYを使用し、PHYアドレスは0に設定しております。情報が不足しており申し訳ないです。

    PHYの数設定、難しい場合はコメントアウトを試してみます。すぐに試すことができず申し訳ないですが、進展ありましたらまたご報告いたします。

    よろしくお願いいたします。

Children
No Data