差别
这里会显示出您选择的修订版和当前版本之间的差别。
两侧同时换到之前的修订记录 前一修订版 后一修订版 | 前一修订版 | ||
digi:arm-embedded:ccmp2:dt-eth-analysis [2024/10/20 19:45] – robin | digi:arm-embedded:ccmp2:dt-eth-analysis [2024/10/22 11:49] (当前版本) – robin | ||
---|---|---|---|
行 1: | 行 1: | ||
====CCMP25 PLC方案之基于Realtec PHY的三网口设备树修改==== | ====CCMP25 PLC方案之基于Realtec PHY的三网口设备树修改==== | ||
- | CCMP25系列开发板使用Marvell的以太网PHY,它的设备树片段位于[ccmp25-dvk.dts|https:// | + | CCMP25系列开发板使用Marvell的以太网PHY,它的设备树片段位于[[https:// |
- | 和以太网口有关的设备树片段主要是& | + | 和以太网口有关的设备树片段主要是& |
- | 我们再看看和STM32MP257 EVK板子的设备树,这是使用Realtec的PHY芯片,文件在:stm32mp257f-ev1.dts, 它的源定义同样是stm32mp253.dtsi,而eth2的源定义同样位于stm32mp251.dtsi内。 | + | 我们再看看和STM32MP257 EVK板子的设备树,这是使用Realtec的PHY芯片,文件在ST官方源码文件:stm32mp257f-ev1.dts, 它的源定义同样是在stm32mp253.dtsi,而eth2的源定义同样位于stm32mp251.dtsi内。 |
- | 因此Digi开发板和ST的EVK板子的以太网口源定义同源。修改部分在相应的板级设备树上。 | + | 因此Digi开发板和ST的EVK板子的以太网口源定义同源,需要注意的是,如是是用stm32mp257,支持三个以太网口,其中第三个网口是交换机芯片作用的结果,它是switch0这个节点定义的,这个定义在stm32mp257.dtsi中. 对于Digi MP255的开发板设备树,它只添加stm32mp255.dtsi,不过可以看到用SmartIOMUX生成的设备树引用的是stm32mp257.dtsi。因为对ST的不同型号,高阶功能的片子设备树dtsi文件会引用低层级的芯片设备树dtsi文件。所以这个添加最高阶的dtsi文件已经可以满足三网口的要求。 |
- | + | ||
- | 需要注意的是,如是是用stm32mp257,支持三个以太网口,其中第三个网口是交换机芯片作用的结果,它是switch0这个节点定义的,这个定义在stm32mp257.dtsi中. 对于Digi MP255的开发板设备树,它只添加stm32mp255.dtsi,不过可以看到用SmartIOMUX生成的设备树引用的是stm32mp257.dtsi。因为对ST的不同型号,高阶功能的片子设备树dtsi文件会引用低层级的芯片设备树dtsi文件。所以这个添加最高阶的dtsi文件已经可以满足三网口的要求。 | + | |
+ | 板级设备树对网口芯片的定义中,会引用相关网口的pin脚定义,这部分一般是在stm32mp25-pinctrl.dtsi中,Digi的开发板则会在Digi的板级设备树中用新的节点名来定义它,如果不和Digi使用一样的PHY,则直接用ST官方的pin脚定义就可以了。 | ||
1、Digi开发板Marvell 88E1512-A0-NNP2C000 PHY的设备树解读: | 1、Digi开发板Marvell 88E1512-A0-NNP2C000 PHY的设备树解读: | ||
行 17: | 行 16: | ||
2、ST的PLC参考设计板Realtek RTL8211F-CG PHY的设备树解读: | 2、ST的PLC参考设计板Realtek RTL8211F-CG PHY的设备树解读: | ||
+ | |||
+ | 使用SmartIOmux最大的好处是,但凡定义的引脚,相关的pinmux定义都已经有了,并且可以从软件上快速找到相关接口的引脚定义。如果想用回开发板定义的节点,也完全没有冲突,只是涉及节点中label引用源的不同而已。 | ||
+ | |||
对于PLC参考设计,以太网PHY可以参考基于ST官方一发板的设备树来修改,具体来说,就是引用stm32mp257.dtsi,并把板级的& | 对于PLC参考设计,以太网PHY可以参考基于ST官方一发板的设备树来修改,具体来说,就是引用stm32mp257.dtsi,并把板级的& | ||
PLC参考设计来自ST官方评估板,其Realtek的PHY地址由引脚决定,有三个相关的引脚:RXCTL_PHYAD2, | PLC参考设计来自ST官方评估板,其Realtek的PHY地址由引脚决定,有三个相关的引脚:RXCTL_PHYAD2, | ||
+ | |||
下面是PLC参考设计中改好的以太网设备树片段,支持三个以太网口。如果你使用CCMP255,仅支持双以太网口,则可以删除不用的switch0,并为引用stm32mp255.dtsi即可,其它设备树片段完全相同。 | 下面是PLC参考设计中改好的以太网设备树片段,支持三个以太网口。如果你使用CCMP255,仅支持双以太网口,则可以删除不用的switch0,并为引用stm32mp255.dtsi即可,其它设备树片段完全相同。 | ||
- | 完整的CCMP25 PLC的参考设计板级设备树源码托管在github上,点击即可查看。 | + | 把网口的相关设备数改好后,还需要把eth3相关的gpio删除(根据双网口的Digi MP25开发板模板来设计三网口,因此设计时用gpio取代了网口3,如果设备树改好,可以删除这些gpio。 |
+ | |||
+ | 不过,需要注意的是,ST开发板引用的网口的pin脚定义是:stm32mp25-pinctrl.dtsi ,它替代Digi开发板网口pin的定义片段,默认这个设备树也include了,除非编译时出错查得缺失(比如版本因素),一般无需复制相关的pinctrl定义,只需删除Digi开发板设备树中没用的网口引脚pinctrl定义。其实不删除也没多大关系,因为没用到的节点不会起作用,另外像reset等pin脚用到和开发板不同的,还是要保留部分gpio的定义。所以这一步涉及的关键字和拷贝替代方法: | ||
+ | |||
+ | |||
+ | a)删除原digi开发板的网口的设备树引用pinctrl的节点,比如:ccmp25_ethernet1_pins, | ||
+ | |||
+ | b)删除原预留eth3的接口lock的gpio节点定义,因为这些同样会在上面eth3的pinctrl节点中定义。eth3网口pin脚有这些:PH2, | ||
+ | |||
+ | c) 检查bug并适当修改,由于https:// | ||
+ | |||
+ | 完整的[[https:// | ||
+ | |||
+ | 以下是板级设备树中三网口Realtec phy相关定义内容: | ||
+ | (注:因为Digi源码树中的ST源码截至2024-10-21前尚未应用patch更新为最新版,eth2, | ||
< | < | ||
行 39: | 行 56: | ||
status = " | status = " | ||
+ | pinctrl-0 = <& | ||
+ | pinctrl-1 = <& | ||
pinctrl-names = " | pinctrl-names = " | ||
- | pinctrl-0 = <& | + | phy-mode = " |
- | pinctrl-1 = <&ccmp25_ethernet1_sleep_pins>; | + | max-speed |
+ | phy-handle | ||
+ | st, | ||
+ | snps, | ||
- | |||
- | /* USER CODE BEGIN ethernet (mdio) */ | ||
mdio1 { | mdio1 { | ||
# | # | ||
# | # | ||
compatible = " | compatible = " | ||
- | |||
- | /* | ||
- | * Reference block. | ||
- | * | ||
- | * Add your custom PHY, reset and interrupts | ||
- | * configuration. | ||
- | */ | ||
phy1_eth1: | phy1_eth1: | ||
- | // compatible = " | + | compatible = " |
- | // reset-gpios = <& | + | reset-gpios = <& |
- | // reset-assert-us = <1000>; | + | reset-assert-us = <10000>; |
- | // reset-deassert-us = <2000>; | + | reset-deassert-us = <80000>; |
- | // reg = <4>; | + | realtek, |
+ | reg = <4>; | ||
}; | }; | ||
- | |||
- | /* | ||
- | * This is a reference block to add an additional | ||
- | * Ethernet interface to the same MDIO bus. | ||
- | */ | ||
- | // | ||
- | // | ||
- | // | ||
- | // | ||
- | // | ||
- | // reg = <5>; | ||
- | //}; | ||
}; | }; | ||
- | /* USER CODE END ethernet (mdio) */ | ||
- | |||
- | /* USER CODE BEGIN ethernet1 */ | ||
- | phy-mode = " | ||
- | |||
- | // | ||
- | // | ||
- | // | ||
- | // | ||
- | // | ||
- | // | ||
- | // | ||
- | // | ||
- | |||
- | ///* Set a fixed speed. */ | ||
- | // | ||
- | // speed = < | ||
- | // speed = < | ||
- | // | ||
- | //}; | ||
- | /* USER CODE END ethernet1 */ | ||
}; | }; | ||
行 103: | 行 83: | ||
status = " | status = " | ||
+ | pinctrl-0 = <& | ||
+ | pinctrl-1 = <& | ||
pinctrl-names = " | pinctrl-names = " | ||
- | pinctrl-0 = <& | + | phy-mode = " |
- | pinctrl-1 = <&ccmp25_ethernet2_sleep_pins>; | + | max-speed |
+ | phy-handle | ||
+ | st, | ||
- | /* USER CODE BEGIN ethernet (mdio) */ | ||
mdio1 { | mdio1 { | ||
# | # | ||
# | # | ||
compatible = " | compatible = " | ||
- | + | phy1_eth2: ethernet-phy@1 { | |
- | /* | + | compatible = " |
- | * Reference block. | + | reset-gpios = <&gpiog 6 GPIO_ACTIVE_LOW>; |
- | * | + | reset-assert-us = <10000>; |
- | * Add your custom PHY, reset and interrupts | + | reset-deassert-us = <80000>; |
- | * configuration. | + | realtek, |
- | */ | + | reg = <1>; |
- | phy1_eth2: ethernet-phy@4 { | + | |
- | // compatible = " | + | |
- | // reset-gpios = <&gpiob 3 GPIO_ACTIVE_LOW>; | + | |
- | // reset-assert-us = <1000>; | + | |
- | // reset-deassert-us = <2000>; | + | |
- | // reg = <4>; | + | |
}; | }; | ||
- | |||
- | /* | ||
- | * This is a reference block to add an additional | ||
- | * Ethernet interface to the same MDIO bus. | ||
- | */ | ||
- | // | ||
- | // | ||
- | // | ||
- | // | ||
- | // | ||
- | // reg = <5>; | ||
- | //}; | ||
}; | }; | ||
- | /* USER CODE END ethernet (mdio) */ | ||
- | |||
- | |||
- | /* USER CODE BEGIN ethernet2 */ | ||
- | phy-mode = " | ||
- | // | ||
- | // | ||
- | // | ||
- | // | ||
- | // | ||
- | // | ||
- | // | ||
- | // | ||
- | ///* Set a fixed speed. */ | ||
- | // | ||
- | // speed = < | ||
- | // speed = < | ||
- | // | ||
- | //}; | ||
- | /* USER CODE END ethernet2 */ | ||
}; | }; | ||
</ | </ | ||