完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
RK 系列的 SoC 中内置了以太网 MAC 控制器,所以只需要搭配一颗以太网 PHY芯片, 即可实现以太网卡功能。 按照规范, 即使是不同厂家的 PHY,同样有一部分寄
存器的定义是通用的, 只要配置了这些通用的寄存器, 基本上 PHY 就可以正常工作。在 Linux 驱动中有通用的 PHY 驱动, 目前的芯片所配套的 SDK 中使用的都是通用驱动, 当然 SoC 中的 MAC 驱动是需要实现。 menuconfig 一般无需去改动。 我这边调试的是百兆以太芯片,根据原理图引脚是RMII。 时钟配置 RMII 接口需要 50M 参考时钟来保证 MAC 和 PHY 之间数据传输的同步。50M 时钟, 可以由 MAC 来提供, 也可以由 PHY 来提供。 50M 时钟必须是精确的, 且必须保证尽可能小的 jitter, 太大的 jitter 会导致较大的传输的错包率。 SDK 默认使用MAC, 也就是 RK 芯片内部的 MAC 控制器来提供时钟。 一般情况下, 并不需要使用PHY 来提供参考时钟, 因为这样需要额外增加一颗晶振来实现。 除非由于分频的原因,MAC 无法给出符合要求的 50M 参考时钟, RK3188T 上即存在这样的问题, 所以需要由 PHY 来提供参考时钟。 gmac配置 &gmac { phy-mode = "rmii"; clock_in_out = "output"; snps,reset-gpio = <&gpio2 RK_PC5 GPIO_ACTIVE_LOW>; snps,reset-active-low; snps,reset-delays-us = <0 50000 10000>; assigned-clocks = <&cru CLK_GMAC_SRC_M1>, <&cru CLK_GMAC_SRC>, <&cru CLK_GMAC_TX_RX>; assigned-clock-rates = <0>, <50000000>; assigned-clock-parents = <&cru CLK_GMAC_RGMII_M1>, <&cru CLK_GMAC_SRC_M1>, <&cru RMII_MODE_CLK>; pinctrl-names = "default"; pinctrl-0 = <&rmiim1_pins &gmac_clk_m1_pins &gmac_clk_m1_drv_level0_pins>; phy-handle = <&phy>; status = "okay"; fixed-link { speed = <100>; full-duplex; }; }; rmii pin脚配置 rmii { /omit-if-no-ref/ rmiim0_pins: rmiim0-pins { rockchip,pins = /* rmii_mdc_m0 */ <3 RK_PC4 2 &pcfg_pull_none_drv_level_0>, /* rmii_mdio_m0 */ <3 RK_PC3 2 &pcfg_pull_none>, /* rmii_rxd0_m0 */ <3 RK_PB6 2 &pcfg_pull_none>, /* rmii_rxd1_m0 */ <3 RK_PB7 2 &pcfg_pull_none>, /* rmii_rxdv_m0 */ <3 RK_PC1 2 &pcfg_pull_none>, /* rmii_rxer_m0 */ <3 RK_PC2 2 &pcfg_pull_none>, /* rmii_txd0_m0 */ <3 RK_PB3 2 &pcfg_pull_none_drv_level_0>, /* rmii_txd1_m0 */ <3 RK_PB4 2 &pcfg_pull_none_drv_level_0>, /* rmii_txen_m0 */ <3 RK_PB5 2 &pcfg_pull_none_drv_level_0>; }; /omit-if-no-ref/ rmiim1_pins: rmiim1-pins { rockchip,pins = /* rmii_mdc_m1 */ <2 RK_PC2 2 &pcfg_pull_none_drv_level_0>, /* rmii_mdio_m1 */ <2 RK_PC1 2 &pcfg_pull_none>, /* rmii_rxd0_m1 */ <2 RK_PB5 2 &pcfg_pull_none>, /* rmii_rxd1_m1 */ <2 RK_PB6 2 &pcfg_pull_none>, /* rmii_rxdv_m1 */ <2 RK_PB4 2 &pcfg_pull_none>, /* rmii_rxer_m1 */ <2 RK_PC0 2 &pcfg_pull_none>, /* rmii_txd0_m1 */ <2 RK_PC3 2 &pcfg_pull_none_drv_level_0>, /* rmii_txd1_m1 */ <2 RK_PC4 2 &pcfg_pull_none_drv_level_0>, /* rmii_txen_m1 */ <2 RK_PC6 2 &pcfg_pull_none_drv_level_0>; }; }; gmac 时钟pin脚配置,一般这些都是默认好,只需要你去选使用的哪一组pin脚就可。 gmac_clk { /omit-if-no-ref/ gmac_clk_m0_pins: gmac-clk-m0-pins { rockchip,pins = /* rgmii_clk_m0 */ <3 RK_PC0 2 &pcfg_pull_none>; }; /omit-if-no-ref/ gmac_clk_m0_drv_level0_pins: gmac-clk-m0-drv-level0-pins { rockchip,pins = /* rgmii_clk_m0 */ <3 RK_PC0 2 &pcfg_pull_none_drv_level_0>; }; /omit-if-no-ref/ gmac_clk_m0_drv_level3_pins: gmac-clk-m0-drv-level3-pins { rockchip,pins = /* rgmii_clk_m0 */ <3 RK_PC0 2 &pcfg_pull_none_drv_level_3>; }; /omit-if-no-ref/ gmac_clk_m1_pins: gmac-clk-m1-pins { rockchip,pins = /* rgmii_clk_m1 */ <2 RK_PB7 2 &pcfg_pull_none>; }; /omit-if-no-ref/ gmac_clk_m1_drv_level0_pins: gmac-clk-m1-drv-level0-pins { rockchip,pins = /* rgmii_clk_m1 */ <2 RK_PB7 2 &pcfg_pull_none_drv_level_0>; }; /omit-if-no-ref/ gmac_clk_m1_drv_level3_pins: gmac-clk-m1-drv-level3-pins { rockchip,pins = /* rgmii_clk_m1 */ <2 RK_PB7 2 &pcfg_pull_none>; }; }; mdio匹配置 &mdio { status = "okay"; phy: phy@0 { status = "okay"; compatible = "ethernet-phy-ieee802.3-c22"; reg = <0x0>; //clocks = <&cru CLK_GMAC_ETHERNET_OUT>; }; }; |
|
|
|
RK 系列的 SoC 中内置了以太网 MAC 控制器,所以只需要搭配一颗以太网 PHY芯片, 即可实现以太网卡功能。 按照规范, 即使是不同厂家的 PHY,同样有一部分寄
存器的定义是通用的, 只要配置了这些通用的寄存器, 基本上 PHY 就可以正常工作。在 Linux 驱动中有通用的 PHY 驱动, 目前的芯片所配套的 SDK 中使用的都是通用驱动, 当然 SoC 中的 MAC 驱动是需要实现。 menuconfig 一般无需去改动。 我这边调试的是百兆以太芯片,根据原理图引脚是RMII。 时钟配置 RMII 接口需要 50M 参考时钟来保证 MAC 和 PHY 之间数据传输的同步。50M 时钟, 可以由 MAC 来提供, 也可以由 PHY 来提供。 50M 时钟必须是精确的, 且必须保证尽可能小的 jitter, 太大的 jitter 会导致较大的传输的错包率。 SDK 默认使用MAC, 也就是 RK 芯片内部的 MAC 控制器来提供时钟。 一般情况下, 并不需要使用PHY 来提供参考时钟, 因为这样需要额外增加一颗晶振来实现。 除非由于分频的原因,MAC 无法给出符合要求的 50M 参考时钟, RK3188T 上即存在这样的问题, 所以需要由 PHY 来提供参考时钟。 gmac配置 &gmac { phy-mode = "rmii"; clock_in_out = "output"; snps,reset-gpio = <&gpio2 RK_PC5 GPIO_ACTIVE_LOW>; snps,reset-active-low; snps,reset-delays-us = <0 50000 10000>; assigned-clocks = <&cru CLK_GMAC_SRC_M1>, <&cru CLK_GMAC_SRC>, <&cru CLK_GMAC_TX_RX>; assigned-clock-rates = <0>, <50000000>; assigned-clock-parents = <&cru CLK_GMAC_RGMII_M1>, <&cru CLK_GMAC_SRC_M1>, <&cru RMII_MODE_CLK>; pinctrl-names = "default"; pinctrl-0 = <&rmiim1_pins &gmac_clk_m1_pins &gmac_clk_m1_drv_level0_pins>; phy-handle = <&phy>; status = "okay"; fixed-link { speed = <100>; full-duplex; }; }; rmii pin脚配置 rmii { /omit-if-no-ref/ rmiim0_pins: rmiim0-pins { rockchip,pins = /* rmii_mdc_m0 */ <3 RK_PC4 2 &pcfg_pull_none_drv_level_0>, /* rmii_mdio_m0 */ <3 RK_PC3 2 &pcfg_pull_none>, /* rmii_rxd0_m0 */ <3 RK_PB6 2 &pcfg_pull_none>, /* rmii_rxd1_m0 */ <3 RK_PB7 2 &pcfg_pull_none>, /* rmii_rxdv_m0 */ <3 RK_PC1 2 &pcfg_pull_none>, /* rmii_rxer_m0 */ <3 RK_PC2 2 &pcfg_pull_none>, /* rmii_txd0_m0 */ <3 RK_PB3 2 &pcfg_pull_none_drv_level_0>, /* rmii_txd1_m0 */ <3 RK_PB4 2 &pcfg_pull_none_drv_level_0>, /* rmii_txen_m0 */ <3 RK_PB5 2 &pcfg_pull_none_drv_level_0>; }; /omit-if-no-ref/ rmiim1_pins: rmiim1-pins { rockchip,pins = /* rmii_mdc_m1 */ <2 RK_PC2 2 &pcfg_pull_none_drv_level_0>, /* rmii_mdio_m1 */ <2 RK_PC1 2 &pcfg_pull_none>, /* rmii_rxd0_m1 */ <2 RK_PB5 2 &pcfg_pull_none>, /* rmii_rxd1_m1 */ <2 RK_PB6 2 &pcfg_pull_none>, /* rmii_rxdv_m1 */ <2 RK_PB4 2 &pcfg_pull_none>, /* rmii_rxer_m1 */ <2 RK_PC0 2 &pcfg_pull_none>, /* rmii_txd0_m1 */ <2 RK_PC3 2 &pcfg_pull_none_drv_level_0>, /* rmii_txd1_m1 */ <2 RK_PC4 2 &pcfg_pull_none_drv_level_0>, /* rmii_txen_m1 */ <2 RK_PC6 2 &pcfg_pull_none_drv_level_0>; }; }; gmac 时钟pin脚配置,一般这些都是默认好,只需要你去选使用的哪一组pin脚就可。 gmac_clk { /omit-if-no-ref/ gmac_clk_m0_pins: gmac-clk-m0-pins { rockchip,pins = /* rgmii_clk_m0 */ <3 RK_PC0 2 &pcfg_pull_none>; }; /omit-if-no-ref/ gmac_clk_m0_drv_level0_pins: gmac-clk-m0-drv-level0-pins { rockchip,pins = /* rgmii_clk_m0 */ <3 RK_PC0 2 &pcfg_pull_none_drv_level_0>; }; /omit-if-no-ref/ gmac_clk_m0_drv_level3_pins: gmac-clk-m0-drv-level3-pins { rockchip,pins = /* rgmii_clk_m0 */ <3 RK_PC0 2 &pcfg_pull_none_drv_level_3>; }; /omit-if-no-ref/ gmac_clk_m1_pins: gmac-clk-m1-pins { rockchip,pins = /* rgmii_clk_m1 */ <2 RK_PB7 2 &pcfg_pull_none>; }; /omit-if-no-ref/ gmac_clk_m1_drv_level0_pins: gmac-clk-m1-drv-level0-pins { rockchip,pins = /* rgmii_clk_m1 */ <2 RK_PB7 2 &pcfg_pull_none_drv_level_0>; }; /omit-if-no-ref/ gmac_clk_m1_drv_level3_pins: gmac-clk-m1-drv-level3-pins { rockchip,pins = /* rgmii_clk_m1 */ <2 RK_PB7 2 &pcfg_pull_none>; }; }; mdio匹配置 &mdio { status = "okay"; phy: phy@0 { status = "okay"; compatible = "ethernet-phy-ieee802.3-c22"; reg = <0x0>; //clocks = <&cru CLK_GMAC_ETHERNET_OUT>; }; }; |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
353 浏览 1 评论
1758 浏览 1 评论
3013 浏览 1 评论
synopsys 的design ware:DW_fpv_div,浮点数除法器,默认32位下,想提升覆盖率(TMAX),如果用功能case去提升覆盖率呢?
3751 浏览 1 评论
RK3588 GStreamer调试四路鱼眼摄像头四宫格显示报错
6562 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-18 11:44 , Processed in 0.534675 second(s), Total 42, Slave 36 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号