RX71M TCP/IP M3S-T4-Tinyサンプルプログラムのlan_open()でエラー

お世話になっております。

RX71MとLAN8710をRMIIで配線した基板で、TCP/IP M3S-T4-Tinyサンプルプログラムを組み込んだところ、main() -> lan_open()でエラーが返ってきてしまい先に進めなくなってしまいました。

(phy_init関数内でタイムアウトエラーとなっているようでした)

他社製のTCP/IPプロトコルスタックのライブラリを使用したプログラムではRMIIでTCP/IP通信が行えていますので、ハードウェアは問題ないと考えています。

何が原因かわかりますでしょうか?

 

・サンプルプログラム入手先

https://www.renesas.com/jp/ja/software/D6000791.html

 

・開発環境

CPU:RX71M 176pin

統合開発環境:e2studio v6.3.0

コンパイラ:CC-RX v2.08.00

デバッガ:E1

 

・サンプルプログラム変更箇所

\rx71m_rsk\r_config\r_ether_rx_config.hのdefineを変更

#define ETHER_CFG_MODE_SEL 1

#define ETHER_CFG_USE_LINKSTA 0 
 
\rx71m_rsk\r_pincfg\r_pinset.cに以下を追加

/***********************************************************************************************************************
* Function Name: R_ETHER_PinSet_ETHERC0_RMII
* Description : This function initializes pins for r_ether_rx module
* Arguments : none
* Return Value : none
***********************************************************************************************************************/
void R_ETHER_PinSet_ETHERC0_RMII()
{
R_BSP_RegisterProtectDisable(BSP_REG_PROTECT_MPC);

/* Set REF50CK0 pin */
MPC.P76PFS.BYTE = 0x12U;
PORT7.PMR.BIT.B6 = 1U;

/* Set RMII0_TXD_EN pin */
MPC.P80PFS.BYTE = 0x12U;
PORT8.PMR.BIT.B0 = 1U;

/* Set RMII0_TXD1 pin */
MPC.P82PFS.BYTE = 0x12U;
PORT8.PMR.BIT.B2 = 1U;

/* Set RMII0_TXD0 pin */
MPC.P81PFS.BYTE = 0x12U;
PORT8.PMR.BIT.B1 = 1U;

/* Set RMII0_RXD1 pin */
MPC.P74PFS.BYTE = 0x12U;
PORT7.PMR.BIT.B4 = 1U;

/* Set RMII0_RXD0 pin */
MPC.P75PFS.BYTE = 0x12U;
PORT7.PMR.BIT.B5 = 1U;

/* Set RMII0_RX_ER pin */
MPC.P77PFS.BYTE = 0x12U;
PORT7.PMR.BIT.B7 = 1U;

/* Set RMII0_CRS_DV pin */
MPC.P83PFS.BYTE = 0x12U;
PORT8.PMR.BIT.B3 = 1U;

/* Set ET0_MDC pin */
MPC.P72PFS.BYTE = 0x11U;
PORT7.PMR.BIT.B2 = 1U;

/* Set ET0_MDIO pin */
MPC.P71PFS.BYTE = 0x11U;
PORT7.PMR.BIT.B1 = 1U;

R_BSP_RegisterProtectEnable(BSP_REG_PROTECT_MPC);
}

/***********************************************************************************************************************
* Function Name: R_ETHER_PinSet_ETHERC1_RMII
* Description : This function initializes pins for r_ether_rx module
* Arguments : none
* Return Value : none
***********************************************************************************************************************/
void R_ETHER_PinSet_ETHERC1_RMII()
{
R_BSP_RegisterProtectDisable(BSP_REG_PROTECT_MPC);

/* Set REF50CK1 pin */
MPC.PG0PFS.BYTE = 0x15U;
PORTG.PMR.BIT.B0 = 1U;

/* Set RMII1_TXD_EN pin */
MPC.P60PFS.BYTE = 0x15U;
PORT6.PMR.BIT.B0 = 1U;

/* Set RMII1_TXD1 pin */
MPC.PG4PFS.BYTE = 0x15U;
PORTG.PMR.BIT.B4 = 1U;

/* Set RMII1_TXD0 pin */
MPC.PG3PFS.BYTE = 0x15U;
PORTG.PMR.BIT.B3 = 1U;

/* Set RMII1_RXD1 pin */
MPC.P95PFS.BYTE = 0x15U;
PORT9.PMR.BIT.B5 = 1U;

/* Set RMII1_RXD0 pin */
MPC.P94PFS.BYTE = 0x15U;
PORT9.PMR.BIT.B4 = 1U;

/* Set RMII1_RX_ER pin */
MPC.PG1PFS.BYTE = 0x15U;
PORTG.PMR.BIT.B1 = 1U;

/* Set RMII1_CRS_DV pin */
MPC.P92PFS.BYTE = 0x15U;
PORT9.PMR.BIT.B2 = 1U;

/* Set ET1_MDC pin */
MPC.P31PFS.BYTE = 0x14U;
PORT3.PMR.BIT.B1 = 1U;

/* Set ET1_MDIO pin */
MPC.P30PFS.BYTE = 0x14U;
PORT3.PMR.BIT.B0 = 1U;

R_BSP_RegisterProtectEnable(BSP_REG_PROTECT_MPC);
}

  • みみみさん

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

    RXマイコンや関連ソフトを担当しております。
    本件ですが、PHYチップとの通信に用いるPHYアドレスの設定(RX71Mマイコン側ソフト)が怪しいです。

    セミナー資料を添付します。

    以下のURLからダウンロードしてください:
    <upload.hdedrive.com/.../SB1538049512-d48bd5d6-5c00-416b-8444-d5c03c924aac>
    ダウンロードパスワード: Dn/9JhmJ5XVP
    URLの有効期限: 2018年10月11日 午後8時59分

    page156にGR-SAKURAにおけるPHYアドレスの解説を書いてありますので参考にしてください。
    あと貼って頂いたMPCの設定も、実験に使っているボードの実際の配線と合致しないと
    PHYチップとの通信がうまくいかずlan_open()失敗します。

    逆にPHYアドレスの値とMPCの設定がただしければlan_open()を正常終了で抜けてきます。
    ここまでこればTCP/IP通信も動くと思います。動かなければまたご質問ください。

    以上です
  • シェルティさん

    こんにちは、みみみです。
    迅速なご回答ありがとうございました。いただいた情報をもとにPHYアドレスとMPCの設定を見直し、無事解決することができました。

    ダウンロードさせていただきました資料を読んでいて、page94に書かれているETHER_CFG_CH0_PHY_ACCESSの設定も変える必要があったことに気が付きました。結果としてはこちらの値を変えることでlan_open()が通るようになりました。

    有益な情報を提供していただき大変感謝いたします。ありがとうございました。
  • みみみさん

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

    ETHER_CFG_CH0_PHY_ACCESSが原因でしたか。これも2ch使うときは見落としやすい設定値ですね。
    うまく動いてよかったです。また何か躓いたらお話聞かせてください。

    以上です
  • Hi !シェルティ,
    I read to you provide Information,page 93~page 105,but I can ping 192.168.0.3

    why?
    thank you for your help
  • jg-san,
    Hello.

    > but I can ping 192.168.0.3
    Do you mean ping failed??

    How about open API?
    To where you have seen it is working and from where it is not working?

  • Hi !  ,

     

    ・開発環境

    CPU:RX64M 176pin

    統合開発環境:e2studio v7.0

    コンパイラ:CC-RX v2.08.00

    デバッガ:E1

     

    images are  setting and  result

       

  • jg-san,
    Thank you.
    However, it seems too hard to implement the driver all by yourself.

    Please try using "FIT configurator" as follows:
    1. Launch e2 studio
    2. Create a new RX64M project, configure C language spec as C99, remove ./generate/*.c files (need only ./generate/iodefine.h)
    3. Open FIT Configurator (If no such views, you'll find it in "Renesas Views")
    4. Add FIT module named r_t4_rx and add all other dependency modules (r_bsp, r_ether_rx, r_sys_time_rx).
    5. Press "Generate Code" and build

    Please also see related documents found at <project_folder>/r_t4_rx/doc/.
    Hope it works.

  • HI! ほや,
    How can use FIT api in the main.c .
    Have sample ?
    Thank you for your help
  • jg-san,

    FIT module r_t4_rx doesn't work alone. It works together with other related modules.
    I don't think you can (and me neither) make it work in main.c.

    If you use Smart Configurator, you need to use the way it is, or use FIT configurator as I told.

  • Hi ほや,

    I use FIT and I can't solve  this error.

    What am I missing api or setting?

    thank you for your help.