NXP iMX7双以太网配置

By

Toradex秦海

1). 简介

NXP iMX7是NXP基于Cortex-A7和Coretex-M4异构多核架构的ARM处理器,其中iMX7 Dual型号SoC支持两路MAC控制器,可以通过外置百兆或者千兆PHY芯片扩展两路以太网接口,本文就基于Toradex基于NXP iMX7 Dual SoC的ARM核心板模块Colibri iMX7D示例扩展两路以太网。



2). 第一路以太网

a).Colibri

iMX7D模块已经通过模块上面部署的一个Microchip KSZ8041NL 百兆PHY芯片默认支持了第一路百兆以太网


b). KSZ8041NL的参考电路请参考这里(原理图示例的SoC MAC端来自Toradex VF61 ARM模块的定义,在iMX7或者其他平台上面不能直接引用,请只参考PHY一侧的连接)


c). 由于选择的iMX7D ENET1 MAC RMII接口50MHz 参考时钟输出引脚GPIO1_IO12和另外一个M4核心的NMI输入引脚冲突,因此最终在设计中,这一路的KSZ8041PHY使用了外部参考时钟,没有使用iMX7 ENET1的参考时钟输出


d). 基于上述配置的第一步以太网对应的device tree节点定义和pinmux定义请参考如下,内核基于4.9.166版本

---------------------------------------

# arch/arm/boot/dts/imx7-colibri.dtsi

……

&fec1 {

       pinctrl-names = "default", "sleep";

       pinctrl-0 = <&pinctrl_enet1>;

       pinctrl-1 = <&pinctrl_enet1_sleep>;

       clocks = <&clks IMX7D_ENET1_IPG_ROOT_CLK>,

                <&clksIMX7D_ENET_AXI_ROOT_CLK>,

                <&clks IMX7D_ENET1_TIME_ROOT_CLK>,

                <&clksIMX7D_PLL_ENET_MAIN_50M_CLK>;

       clock-names = "ipg", "ahb", "ptp","enet_clk_ref";

       assigned-clocks = <&clks IMX7D_ENET1_TIME_ROOT_SRC>,

                          <&clksIMX7D_ENET1_TIME_ROOT_CLK>;

        assigned-clock-parents = <&clksIMX7D_PLL_ENET_MAIN_100M_CLK>;

       assigned-clock-rates = <0>, <100000000>;

       phy-mode = "rmii";

       phy-supply = <®_LDO1>;

       fsl,magic-packet;

};

&iomuxc {

pinctrl_enet1: enet1grp {

               fsl,pins = <

                       MX7D_PAD_ENET1_RGMII_RX_CTL__ENET1_RGMII_RX_CTL 0x73

                       MX7D_PAD_ENET1_RGMII_RD0__ENET1_RGMII_RD0       0x73

                       MX7D_PAD_ENET1_RGMII_RD1__ENET1_RGMII_RD1       0x73

                       MX7D_PAD_ENET1_RGMII_RXC__ENET1_RX_ER           0x73


                       MX7D_PAD_ENET1_RGMII_TX_CTL__ENET1_RGMII_TX_CTL 0x73

                       MX7D_PAD_ENET1_RGMII_TD0__ENET1_RGMII_TD0       0x73

                        MX7D_PAD_ENET1_RGMII_TD1__ENET1_RGMII_TD1       0x73

                       MX7D_PAD_GPIO1_IO12__CCM_ENET_REF_CLK1          0x73

                       MX7D_PAD_SD2_CD_B__ENET1_MDIO                   0x3

                       MX7D_PAD_SD2_WP__ENET1_MDC                      0x3

                >;

       };


       pinctrl_enet1_sleep: enet1sleepgrp {

                fsl,pins = <

                       MX7D_PAD_ENET1_RGMII_RX_CTL__GPIO7_IO4          0x0

                       MX7D_PAD_ENET1_RGMII_RD0__GPIO7_IO0             0x0

                       MX7D_PAD_ENET1_RGMII_RD1__GPIO7_IO1    0x0

                       MX7D_PAD_ENET1_RGMII_RXC__GPIO7_IO5    0x0


                       MX7D_PAD_ENET1_RGMII_TX_CTL__GPIO7_IO10 0x0

                        MX7D_PAD_ENET1_RGMII_TD0__GPIO7_IO6     0x0

                       MX7D_PAD_ENET1_RGMII_TD1__GPIO7_IO7    0x0

                       MX7D_PAD_GPIO1_IO12__GPIO1_IO12        0x0

                       MX7D_PAD_SD2_CD_B__GPIO5_IO9           0x0

                       MX7D_PAD_SD2_WP__GPIO5_IO10             0x0

                >;

       };

---------------------------------------



3). 第二路以太网

a). 第二路以太网通过模块预留的RMII或者RGMII接口连接百兆PHY或者千兆PHY来扩展,Colibri iMX7D RMII或者RGMII接口管脚定义请参考手册5.4章节。



b). 同样使用KSZ8041NL 百兆PHY扩展的参考电路请参考这里(原理图示例的SoC MAC端来自Toradex VF61 ARM模块的定义,在iMX7或者其他平台上面不能直接引用,须按照上面手册定义连接),如需要连接千兆PHY,请参考所使用的千兆PHY(如Microchip KSZ9031RNL)手册进行连接


c). 通过ENET2 RMII接口连接KSZ8041NL百兆PHY的device tree配置参考如下patch,和上面第一路以太网不同,这次使用的iMX7 SoC内部的参考时钟输出给PHY,因此在clock项目配置会有不同

https://github.com/simonqin09/colibri_imx7_2nd_ethernet/blob/master/0001-imx7d-2nd-ethernet-support_update_20200218.patch


// 对于 &fec2节点中的“fsl,mii-exclusive” 参数,因为ENET1和ENET2分别使用其对应的MDIO总线,而不是共享一个MDIO总线,在4.9 kernel下,如果不配置这个参数,驱动会默认都使用ENET1的MDIO去配置ENET2,因此在这里是必须的。但在其他i.MX平台或者mainline kernel下则不一定需要。


// MX7D_PAD_EPDC_BDR0__CCM_ENET_REF_CLK2 配置为0x40000073,因为使用iMX7 SoC内部参考时钟,这个时钟要同时给PHY和MAC提供参考时钟,因此Input和Output都要配置使能,因此需要为0x40000073,关于pinctrl的更多说明请参考这里


d). 通过RGMII连接千兆PHY的device tree配置请参考这里

 

4). 总结

本文基于iMX7示例了双路以太网的设计和配置思路,同时对于其他支持双路MAC的NXP i.MX ARM处理器(如iMX8)的配置思路也都是一致的,只是具体的clock和pinmux定义等要做对应的适配

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,539评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,594评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,871评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,963评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,984评论 6 393
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,763评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,468评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,357评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,850评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,002评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,144评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,823评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,483评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,026评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,150评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,415评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,092评论 2 355

推荐阅读更多精彩内容