继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

嵌入式linux系统的开发——多网口交换机的实现

袁霄
关注TA
已关注
手记 86
粉丝 1.8万
获赞 1569
前言

联发科MT7628/7688集成了 1T1R 802.11n Wi-Fi radio、580MHz MIPS® 24KEc™ CPU、1-port fast Ethernet PHY、USB2.0 host、PCIe、SD-XC、 I2S/PCM,以及multiple low-speed IOs于单颗SOC中。MT7628/7688支持IoT gateway与 IoT device两种运作模式,其中IoT gateway模式下可支持5网口交换机功能,本文主要介绍如何实现MT7628/7688的5网口交换机功能。

集成式交换机

网卡是我们上网必备组件之一,它主要工作在osi的最后两层,物理层和数据链路层。物理层定义了数据传送与接收所需要的电与光信号、线路状态、时钟基准、数据编码和电路等,并向数据链路层设备提供标准接口,物理层对应的芯片称之为PHY。数据链路层则提供寻址机构、数据帧的构建、数据差错检查、传送控制、向网络层提供标准的数据接口等功能,数据链路层对应的芯片称之为MAC控制器。PHY和MAC之间通过IEEE定义的标准MII/GigaMII接口实现数据传输和交互。MT7628/7688作为更灵活、密度更高的芯片已经将MAC和PHY整合在SOC中,同时在MAC层实现了交换功能。

图片描述

多网口寄存器

MT7628/7688的多网口和单网口为复用功能,当使用多网口交换机功能时需要通过对寄存器配置将IO口定义为port功能使用。AGPIO_CFG寄存器中EPHY_GPIO_AIO_EN和EPHY_P0_DIS配置为0,即P0-P4为模拟PAD。GPIO2_MODE寄存器中对Pn_LED_KN_MODE位设置为00,即作为EPHY_Pn_LED。

图片描述

多网口配置

在uboot的configuration界面取消对ETH_One_Port_Only选项的选择(config.in文件可修改configuration界面的配置项)。

图片描述

界面的配置项最终会生成为autoconf.h文件中的宏定义,未选中ETH_One_Port_Only选项时,autoconf.h文件中则未定义ETH_ONE_PORT_ONLY宏定义。autoconf.h文件内容如下:

/* Automatically generated by make menuconfig: don't edit */
……
未选中ETH_One_Port_Only选项:#undef  ETH_ONE_PORT_ONLY
……

在rt2880_eth.c中, 根据宏定义ETH_ONE_PORT_ONLY选择对MT2688的AGPIO_CFG寄存器和GPIO2_MODE寄存器进行配置。rt2880_eth.c文件内容如下:

    i = RALINK_REG(RT2880_AGPIOCFG_REG);
#if defined (ETH_ONE_PORT_ONLY)
    i |= MT7628_EPHY_EN;
        i = i & ~(MT7628_P0_EPHY_AIO_EN);
#else
    i = i & ~(MT7628_EPHY_EN);
#endif
    RALINK_REG(RT2880_AGPIOCFG_REG) = i;

    printf("RESET MT7628 PHY!!!!!!");
    // reset phy
    i = RALINK_REG(RT2880_RSTCTRL_REG);
    i = i | RSTCTRL_EPHY_RST;
    RALINK_REG(RT2880_RSTCTRL_REG) = i;
    i = i & ~(RSTCTRL_EPHY_RST);
    RALINK_REG(RT2880_RSTCTRL_REG) = i;
    i = RALINK_REG(RALINK_SYSCTL_BASE + 0x64);
#if defined (ETH_ONE_PORT_ONLY)
    i &= 0xf003f003;
    i |= 0x05540554;
    RALINK_REG(RALINK_SYSCTL_BASE + 0x64) = i;// set P0 EPHY LED mode
#else
        i &= 0xf003f003;
    RALINK_REG(RALINK_SYSCTL_BASE + 0x64) = i;
#endif
总结

实现MT7628/7688集成5端口的switch功能后,可根据需要对5端口进行VLAN划分,具体VLAN的划分方法可参考文章《嵌入式linux系统的开发—— VLAN虚拟网络划分实现》。

打开App,阅读手记
4人推荐
发表评论
随时随地看视频慕课网APP