查看: 2556|回复: 3

[分享] 使用I.MXRT单芯片配置双路以太网

[复制链接]
  • TA的每日心情
    开心
    2024-3-26 15:16
  • 签到天数: 266 天

    [LV.8]以坛为家I

    3298

    主题

    6545

    帖子

    0

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    32014
    最后登录
    2024-4-9
    发表于 2020-12-22 14:37:17 | 显示全部楼层 |阅读模式
    使用I.MXRT单芯片配置双路以太网


    I.MXRT内部集成多路串口,两路高速的USB(PHY内置),大容量的RAM,以及双路以太网,大屏幕LCD显示驱动,适合于各种网关,以及需要多接口连接,HMI等应用场景。在工业现场中需要两路以太网级联的应用可以采用I.MXRT1060。


    21.png
    22.png


    1. 管脚复用以及引脚配置


    官方的以太网接口电路图,采用的是KSZ8081的PHY芯片,官方默认的一路以太网使用的配置接口采用RMII模式,如下图所示:
    23.png
    24.png

    当然如果有其他外设的需求,比如需要外扩SDRAM等,MDC和MDIO的引脚可以选择配置为不占用SDRAM外扩总线EMC接口的复用引脚。

    那么如何配置第二路以太网呢?在配置第二路以太网的时候,为了走线布板方便,有可能会复用BT_CFG8, BT_CFG9和BT_CFG10,以及BT_CFG11引脚。
    25.png
    BT_CFG8, BT_CFG_9, BT_CFG_10,BT_CFG11这4个引脚配置为第二路以太网的引脚(BT_CFG8作为第二路以太网的TXD0;BT_CFG9作为第二路以太网的TXD1;BT_CFG10作为第二路以太网的TXEN;BT_CFG11作为以太网的TX_CLK)。同时,又作为BOOT的启动引脚,上电复位前,BT_CFG8,BT_CFG_9, BT_CFG_10这3个脚的状态都应该是高电平才能进入QSPI启动模式。


    如果在上电前或者是POR引脚处于复位状态时,这几个引脚电平如果是未定状态,例如如果是1.6v,也就是既非高(3.3v的70%以上),也非低电平(3.3v的30%以下)的状态,则系统上电启动会失败。
    26.png
    其中默认情况下,BT_CFG8, BT_CFG9, BT_CFG10在使用QSPI模式的时候,应该是低电平状态。但是如果使用BT_CFG8, BT_CFG9, BT_CFG10作为复选功能,也就是以太网功能的时候,需要设置为高电平。根据参考手册i.MX RT1060 Processor Reference Manual, Rev. 2 215页的描述,BT_CFG[10], BT_CFG[9], BT_CFG[8]的电平设置应该是111b–QSPIdevice supports 3B read by default (on secondary pinmux option) (command: 0x03,SPI mode)。
    27.png
    当然也可以通过MCUBootUtility工具将BT_FUSE_SEL写入1,上电的时候就不会判断这几个BOOT引脚的电平状态,直接根据eFUSE的配置,从QSPI启动即可。这种这几个BT_CFG 引脚上电的时候就可以配置为其他的功能口, 而不作为BOOT引脚功能。
    28.png
    2. SDK中代码的修改


    SDK里面提供了丰富的Lwip以太网的参考代码,有基于裸机和基于Freertos的版本。
    29.png
    SDK2.8代码里面只是配置了第一路以太网,如果需要同时使用两路以太网。则配置第二路以太网的方法如下,采用MCU Config Tool来配置管脚,自动生成代码。
    30.png
    1. IOMUXC_SetPinMux(

    2.       IOMUXC_GPIO_B0_00_ENET2_MDC,/* GPIO_B0_00配置为 ENET2_MDC */

    3.       0U); /* Software Input On Field: InputPath is determined by functionality */

    4. IOMUXC_SetPinMux(

    5.       IOMUXC_GPIO_B0_01_ENET2_MDIO,/*GPIO_B0_01配置为ENET2_MDIO */

    6.       0U);

    7.   IOMUXC_SetPinMux(

    8.       IOMUXC_GPIO_B0_12_ENET2_TDATA00,

    9. /*GPIO_B0_12配置为ENET2_TDATA00 */

    10.       0U);

    11.   IOMUXC_SetPinMux(

    12.       IOMUXC_GPIO_B0_13_ENET2_TDATA01,

    13. /*GPIO_B0_13配置为ENET2_TDATA01 */

    14.       0U);

    15.   IOMUXC_SetPinMux(

    16.       IOMUXC_GPIO_B0_14_ENET2_TX_EN,

    17. /*GPIO_B0_14配置为ENET2_TX_EN */

    18.       0U);

    19.   IOMUXC_SetPinMux(

    20.       IOMUXC_GPIO_B0_15_ENET2_REF_CLK2,      

    21. /*GPIO_B0_15配置为ENET2_REF_CLK2 */

    22.       0x31U);

    23.   IOMUXC_SetPinMux(

    24.       IOMUXC_GPIO_B1_00_ENET2_RX_ER,         

    25. /*GPIO_B1_00配置为ENET2_RX_ER */

    26.       0U);

    27.   IOMUXC_SetPinMux(

    28.       IOMUXC_GPIO_B1_01_ENET2_RDATA00,

    29. /*GPIO_B1_01配置为 ENET2_RDATA00 */

    30.       0U);

    31.   IOMUXC_SetPinMux(

    32.       IOMUXC_GPIO_B1_02_ENET2_RDATA01,

    33. /*GPIO_B1_02配置为 ENET2_RDATA01 */

    34.       0U);

    35.   IOMUXC_SetPinMux(

    36.       IOMUXC_GPIO_B1_03_ENET2_RX_EN,/*GPIO_B1_03配置为ENET2_RX_EN */

    37.       0U);

    38. IOMUXC_SetPinConfig(

    39.       IOMUXC_GPIO_B0_00_ENET2_MDC,/* GPIO_B0_00配置为ENET2_MDC */

    40.       0xB0E9U);

    41.   IOMUXC_SetPinConfig(

    42.       IOMUXC_GPIO_B0_01_ENET2_MDIO,/*GPIO_B0_01配置为ENET2_MDIO */

    43.       0xB829U);

    44.   IOMUXC_SetPinConfig(

    45.       IOMUXC_GPIO_B0_12_ENET2_TDATA00,      

    46. /*GPIO_B0_12配置为ENET2_TDATA00 */

    47.       0xB0E9U);

    48.   IOMUXC_SetPinConfig(

    49.       IOMUXC_GPIO_B0_13_ENET2_TDATA01,      

    50. /* GPIO_B0_13配置为 ENET2_TDATA01 */

    51.       0xB0E9U);

    52.   IOMUXC_SetPinConfig(

    53.       IOMUXC_GPIO_B0_14_ENET2_TX_EN,

    54. /*GPIO_B0_14配置为ENET2_TX_EN */

    55.       0xB0E9U);

    56.   IOMUXC_SetPinConfig(

    57.       IOMUXC_GPIO_B0_15_ENET2_REF_CLK2,

    58. /*GPIO_B0_15配置为 ENET2_REF_CLK2 */

    59.       0xB0E9U);

    60.   IOMUXC_SetPinConfig(

    61.       IOMUXC_GPIO_B1_00_ENET2_RX_ER,

    62. /*GPIO_B1_00配置为ENET2_RX_ER */

    63.       0xB0E9U);

    64.   IOMUXC_SetPinConfig(

    65.       IOMUXC_GPIO_B1_01_ENET2_RDATA00,

    66. /*GPIO_B1_01配置为 ENET2_RDATA00 */

    67.       0xB0E9U);

    68.   IOMUXC_SetPinConfig(

    69.       IOMUXC_GPIO_B1_02_ENET2_RDATA01,

    70. /*GPIO_B1_02配置为 ENET2_RDATA01 */

    71.       0xB0E9U);

    72.   IOMUXC_SetPinConfig(

    73.       IOMUXC_GPIO_B1_03_ENET2_RX_EN,

    74. /*GPIO_B1_03配置为ENET2_RX_EN */

    75.       0xB0E9U);
    复制代码
    在主程序启动以太网任务前,需要添加第二路的模式使能以及模块时钟初始化配置如下,
    1. IOMUXC_EnableMode(IOMUXC_GPR,kIOMUXC_GPR_ENET2TxClkOutputDir, true);

    2. voidBOARD_InitModuleClock(void) {

    3.     const clock_enet_pll_config_t config =

    4. {.enableClkOutput1= true, .enableClkOutput25M = false, .loopDivider1 = 1,



    5. };

    6.     CLOCK_InitEnetPll(&config);

    7. }
    复制代码
    另外,如果需要连接到以太网的复位引脚配置,做一些上电前PHY的复位以及网络异常情况下,强制的复位处理,还需要配置复位引脚。
    1. IOMUXC_SetPinMux(

    2.   IOMUXC_GPIO_AD_B0_10_GPIO1_IO10,0U);

    3.   IOMUXC_SetPinConfig(

    4.       IOMUXC_GPIO_AD_B0_10_GPIO1_IO10,0xB0A9U);

    5.     GPIO_PinInit(GPIO2, 3,&gpio_config);  //复位引脚

    6.     GPIO_PinInit(GPIO1, 10, &gpio_config);

    7.     /*在复位前,上拉ENET_INT */

    8.     GPIO_WritePinOutput(GPIO1, 10, 1);

    9.     GPIO_WritePinOutput(GPIO2, 3, 0);

    10.     delay();

    11.     GPIO_WritePinOutput(GPIO2,3, 1);
    复制代码

    文章出处:嵌入式MCU

    签到签到
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2024-3-22 15:28
  • 签到天数: 79 天

    [LV.6]常住居民II

    5

    主题

    405

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1407
    最后登录
    2024-3-22
    发表于 2020-12-23 10:45:56 来自手机 | 显示全部楼层
    好详细。楼主辛苦了
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    1

    主题

    2

    帖子

    0

    新手上路

    Rank: 1

    积分
    14
    最后登录
    2021-11-13
    发表于 2021-1-19 10:33:57 | 显示全部楼层
    请问使用双网口的时候ENET_MDC,ENET_MDIO和ENET2_MDC,ENET2_MDIO必须要分别接到两个PHY上吗?
    我现在使用ENET_MDC,ENET_MDIO并接两个PHY,以PHY地址区分,结果是PHY2一直初始化不了,或者卡在初始化过程中。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2021-10-17 21:03
  • 签到天数: 1 天

    [LV.1]初来乍到

    0

    主题

    6

    帖子

    0

    注册会员

    Rank: 2

    积分
    51
    最后登录
    2022-5-11
    发表于 2021-10-17 07:45:20 | 显示全部楼层
    请问楼主,RT1176支持3网口不?
    哎...今天够累的,签到来了~
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2024-4-24 08:22 , Processed in 0.118989 second(s), 23 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表