嵌入式学习小组
登录
直播中
王云玲
7年用户
186经验值
私信
关注
基于iMX7示例了双路以太网的设计和配置思路
开启该帖子的消息推送
NXP iMX7是NXP基于Cortex-A7和Coretex-M4异构多核架构的
arm
处理器,其中iMX7 Dual型号SoC支持两路MAC控制器,可以通过外置百兆或者千兆PHY芯片扩展两路以太网接口,本文就基于Toradex基于NXP iMX7 Dual SoC的ARM核心板模块Colibri iMX7D示例扩展两路以太网。
回帖
(2)
吴少杰
2020-12-28 15:22:13
第一路以太网
a).
ColibriiMX7D
模块已经通过模块上面部署的一个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_M
AI
N_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
>;
};
---------------------------------------
第一路以太网
a).
ColibriiMX7D
模块已经通过模块上面部署的一个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_M
AI
N_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
>;
};
---------------------------------------
举报
刘翔宇
2020-12-28 15:22:24
第二路以太网
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配置请参考
这里
第二路以太网
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配置请参考
这里
举报
更多回帖
rotate(-90deg);
回复
相关问答
基于NXP
iMX
8X
示例
了
双
路
以太网
的设计和
配置
思路
2020-12-30
2536
基于
iMX7
M4 SPI Slave模式的驱动供参考
2021-01-05
2175
以太网
无法连接外网IP,提示No route to host怎么解决?
2023-02-20
287
在哪里可以找到10/100Mbps
以太网
的
示例
代码?
2023-03-22
276
ESP32S3 + W5500基本
以太网
示例
检测堆栈溢出是怎么回事?
2023-04-13
315
请提供有关S32G2
示例
所需的IO的信息以及启动
以太网
所需的步骤
2023-03-16
230
基于NXP
iMX7
arm处理器展示锂电池的应用方案
2021-01-13
1987
7
寸
以太网
工业平板电脑有哪些功能
2021-09-26
1157
i.MX8mp
以太网
(eth0) 未分配IP地址的原因?
2023-03-15
242
有谁做过xilinx k
7
的三速
以太网
2017-04-13
7864
发帖
登录/注册
20万+
工程师都在用,
免费
PCB检查工具
无需安装、支持浏览器和手机在线查看、实时共享
查看
点击登录
登录更多精彩功能!
首页
论坛版块
小组
免费开发板试用
ebook
直播
搜索
登录
×
20
完善资料,
赚取积分