博客專欄

        EEPW首頁 > 博客 > NXP iMX7雙以太網(wǎng)配置

        NXP iMX7雙以太網(wǎng)配置

        發(fā)布人:toradex 時(shí)間:2020-02-20 來源:工程師 發(fā)布文章

        By Toradex秦海

        1). 簡(jiǎn)介

        NXP iMX7NXP基于Cortex-A7Coretex-M4異構(gòu)多核架構(gòu)的ARM處理器,其中iMX7 Dual型號(hào)SoC支持兩路MAC控制器,可以通過外置百兆或者千兆PHY芯片擴(kuò)展兩路以太網(wǎng)接口,本文就基于Toradex基于NXP iMX7 Dual SoCARM核心板模塊Colibri iMX7D示例擴(kuò)展兩路以太網(wǎng)。

         

         

        2). 第一路以太網(wǎng)

        a). Colibri iMX7D模塊已經(jīng)通過模塊上面部署的一個(gè)Microchip KSZ8041NL 百兆PHY芯片默認(rèn)支持了第一路百兆以太網(wǎng)

         

        b). KSZ8041NL的參考電路請(qǐng)參考這里(原理圖示例的SoC MAC端來自Toradex VF61 ARM模塊的定義,在iMX7或者其他平臺(tái)上面不能直接引用,請(qǐng)只參考PHY一側(cè)的連接)

         

        c). 由于選擇的iMX7D ENET1 MAC RMII接口 50MHz 參考時(shí)鐘輸出引腳GPIO1_IO12和另外一個(gè)M4核心的NMI輸入引腳沖突,因此最終在設(shè)計(jì)中,這一路的KSZ8041PHY使用了外部參考時(shí)鐘,沒有使用iMX7 ENET1的參考時(shí)鐘輸出

         

        d). 基于上述配置的第一步以太網(wǎng)對(duì)應(yīng)的device tree節(jié)點(diǎn)定義和pinmux定義請(qǐng)參考如下,內(nèi)核基于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>,

                        <&clks IMX7D_ENET_AXI_ROOT_CLK>,

                        <&clks IMX7D_ENET1_TIME_ROOT_CLK>,

                        <&clks IMX7D_PLL_ENET_MAIN_50M_CLK>;

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

                assigned-clocks = <&clks IMX7D_ENET1_TIME_ROOT_SRC>,

                                  <&clks IMX7D_ENET1_TIME_ROOT_CLK>;

                assigned-clock-parents = <&clks IMX7D_PLL_ENET_MAIN_100M_CLK>;

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

                phy-mode = "rmii";

                phy-supply = <&reg_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). 第二路以太網(wǎng)

        a). 第二路以太網(wǎng)通過模塊預(yù)留的RMII或者RGMII接口連接百兆PHY或者千兆PHY來擴(kuò)展,Colibri iMX7D RMII或者RGMII接口管腳定義請(qǐng)參考手冊(cè)5.4章節(jié)。

         

         

        b). 同樣使用KSZ8041NL 百兆PHY擴(kuò)展的參考電路請(qǐng)參考這里(原理圖示例的SoC MAC端來自Toradex VF61 ARM模塊的定義,在iMX7或者其他平臺(tái)上面不能直接引用,須按照上面手冊(cè)定義連接),如需要連接千兆PHY,請(qǐng)參考所使用的千兆PHY(如Microchip KSZ9031RNL)手冊(cè)進(jìn)行連接

         

        c). 通過ENET2 RMII接口連接KSZ8041NL百兆PHYdevice tree配置參考如下patch,和上面第一路以太網(wǎng)不同,這次使用的iMX7 SoC內(nèi)部的參考時(shí)鐘輸出給PHY,因此在clock項(xiàng)目配置會(huì)有不同

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

         

        // 對(duì)于 &fec2節(jié)點(diǎn)中的 “fsl,mii-exclusive” 參數(shù),因?yàn)?/span>ENET1ENET2分別使用其對(duì)應(yīng)的MDIO總線,而不是共享一個(gè)MDIO總線,在4.9 kernel下,如果不配置這個(gè)參數(shù),驅(qū)動(dòng)會(huì)默認(rèn)都使用ENET1MDIO去配置ENET2,因此在這里是必須的。但在其他i.MX平臺(tái)或者mainline kernel下則不一定需要。

         

        // MX7D_PAD_EPDC_BDR0__CCM_ENET_REF_CLK2 配置為0x40000073,因?yàn)槭褂?/span>iMX7 SoC內(nèi)部參考時(shí)鐘,這個(gè)時(shí)鐘要同時(shí)給PHYMAC提供參考時(shí)鐘,因此InputOutput都要配置使能,因此需要為 0x40000073,關(guān)于pinctrl的更多說明請(qǐng)參考這里

         

        d). 通過RGMII連接千兆PHYdevice tree配置請(qǐng)參考這里

         

        4). 總結(jié)

        本文基于iMX7示例了雙路以太網(wǎng)的設(shè)計(jì)和配置思路,同時(shí)對(duì)于其他支持雙路MACNXP i.MX ARM處理器(如iMX8)的配置思路也都是一致的,只是具體的clockpinmux定義等要做對(duì)應(yīng)的適配


        *博客內(nèi)容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀點(diǎn),如有侵權(quán)請(qǐng)聯(lián)系工作人員刪除。

        隔離器相關(guān)文章:隔離器原理


        關(guān)鍵詞:

        相關(guān)推薦

        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 衡阳市| 三门县| 安徽省| 曲靖市| 东山县| 博野县| 乌兰县| 榆社县| 民县| 黄浦区| 霍城县| 广宗县| 望江县| 灵武市| 前郭尔| 汝州市| 阜康市| 桑植县| 秀山| 聂拉木县| 西宁市| 康平县| 安泽县| 普兰店市| 巴林右旗| 海伦市| 周宁县| 寿阳县| 本溪| 沈阳市| 筠连县| 安阳市| 桦川县| 景东| 安多县| 抚顺县| 雷州市| 忻州市| 安陆市| 陕西省| 孟村|