rk3566-安卓11-千兆网卡 rtl8211f 移植

这篇具有很好参考价值的文章主要介绍了rk3566-安卓11-千兆网卡 rtl8211f 移植。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、功能调试

1. 确认原理图

phy 常用的接口有两种 RGMII 和 RMII, 这两种对应的物理接口有 6 中如下所示. 首先需要根据原理图确定是哪种接法, 根据接法对应的 name 在文档 Rockchip_Developer_Guide_Linux_GMAC_Mode_Configuration_CN.pdf中查找对应的配置.

1.1 RGMII 模式

该模式需要关注的硬件接口

  • mac: GMACX_MCLKINOUT, ETHx_REFCLKO_25M
  • phy: CLKOUT, XTAL_IN, XTAL_OUT
MAC PHY name
GMACX_MCLKINOUT 悬空
ETHx_REFCLKO_25M 悬空
XTAL_IN/XTAL_OUT 由晶体提供时钟 PLL output 125M for TX_CLK, Crystal 25M for PHY
GMACX_MCLKINOUT 悬空
ETHx_REFCLKO_25M 提供时钟给 XTAL_OUT
XTAL_IN 接地
XTAL_OUT ETHx_REFCLKO_25M 提供时钟
PLL output 125M for TX_CLK, PLL 25M for PHY
GMACX_MCLKINOUT 时钟由 CLKOUT 提供
ETHx_REFCLKO_25M 悬空
XTAL_IN/XTAL_OUT 由晶体提供时钟 125M TX_CLK input from PHY, Crystal 25M for PHY
GMACX_MCLKINOUT 时钟由 CLKOUT 提供
ETHx_REFCLKO_25M 提供时钟给 XTAL_OUT
XTAL_IN 接地,
XTAL_OUTETHx_REFCLKO_25M提供时钟
125M TX_CLK input from PHY, PLL 25M for PHY

1.2 RMII 模式

需要关注的引脚

  • mac: GMACX_MCLKINOUT, ETHx_REFCLKO_25M(一直悬空)
  • phy: PHY_TXCLK, XTAL_IN, XTAL_OUT
MAC PHY name
GMACX_MCLKINOUT 提供时钟给 XTAL_OUT
ETHx_REFCLKO_25M 悬空
XTAL_IN 接地
XTAL_OUTGMACX_MCLKINOUT 提供时钟
RMII Clock Output
GMACX_MCLKINOUT 时钟由 PHY_TXCLK 提供
ETHx_REFCLKO_25M 悬空
XTAL_IN/XTAL_OUT 由晶体提供时钟 RMII Clock Input

1.3 确认 name

确认 mac 端接口

rtl8211f驱动,linux 驱动,android,linux,驱动开发,c语言,嵌入式硬件

根据原理图:

  • GMAC1_MCLKINOUT_M0 悬空 ==> GMACX_MCLKINOUT 悬空
  • ETH1_REFCLKO_25M_M0 悬空 ==> ETHx_REFCLKO_25M 悬空

确认 phy 端接口

rtl8211f驱动,linux 驱动,android,linux,驱动开发,c语言,嵌入式硬件

根据原理图:

  • XTAL_IN/XTAL_OUT 由晶体提供时钟

根据前面的信息可以推出 name 为 PLL output 125M for TX_CLK, Crystal 25M for PHY在 rk 提供的文档 Rockchip_Developer_Guide_Linux_GMAC_Mode_Configuration_CN.pdf查找对应的配置.

&mdio1 {
         rgmii_phy1: phy@0 {
         compatible = "ethernet-phy-ieee802.3-c22"; // 协议
         reg = <0x0>;
       };
};

&gmac1 {
        phy-mode = "rgmii"; // 接口类型
        clock_in_out = "output"; // 输出时钟

        snps,reset-gpio = <&gpio4 RK_PC2 GPIO_ACTIVE_LOW>; // 复位引脚
        snps,reset-active-low;                             // 低电平有效
        snps,reset-delays-us = <0 20000 100000>;           // 复位延时时间

        // 时钟配置
        assigned-clocks = <&cru SCLK_GMAC1_RX_TX>, <&cru SCLK_GMAC1>;
        assigned-clock-parents = <&cru SCLK_GMAC1_RMII_SPEED>;
        assigned-clock-rates = <0>, <125000000>;  // 千兆网卡时钟

        pinctrl-names = "default";
        pinctrl-0 = <&gmac1m0_miim // 引脚复用
                     &gmac1m0_tx_bus2
                     &gmac1m0_rx_bus2
                     &gmac1m0_rgmii_clk
                     &gmac1m0_rgmii_bus>;

        // tx, rx 延时时间, 需要参考文档 Rockchip_Developer_Guide_Linux_GMAC_RGMII_Delayline_CN.pdf 配置
        tx_delay = <0x4d>;
        rx_delay = <0x2d>;

        phy-handle = <&rgmii_phy1>;
        status = "okay";
};

如果 dts 配置的不对会出现 dma 相关的报错, 出现这个报错, 按照前面的步骤确认硬件接法对应的name 然后查找对应的配置.

2. 配置驱动

这一步比较简单, rk 默认提供了该驱动的支持, 对应的路径 kernel/drivers/net/phy/realtek.c, 只需要打开宏 CONFIG_REALTEK_PHY即可.

3. 配置电源

如果原理图上的 mac 的 io 供电由 vcc_1v8 提供, 软件需要配置打开这个 vcc_1v8 供电.

rtl8211f驱动,linux 驱动,android,linux,驱动开发,c语言,嵌入式硬件

软件上对于 gmac1 的电源控制为 vccio5-supply , 因此需要做对应的映射

&pmu_io_domains {
    status = "okay";
    pmuio1-supply = <&vcc3v3_pmu>;
    pmuio2-supply = <&vcca1v8_pmu>;
    vccio1-supply = <&vccio_acodec>;
    vccio3-supply = <&vccio_sd>;
    vccio4-supply = <&vcca1v8_pmu>;
-       vccio5-supply = <&vcc_3v3>;
+       vccio5-supply = <&vcc_1v8>;
    vccio6-supply = <&vcc1v8_dvp>;
    vccio7-supply = <&vcc_3v3>;
};

这里如果没有配置正确的现象就是, 软件看起来一切正常, 可以读取 phy 信息, 能够 link up, 没有报错, 但是 ifconfig 读取不到 ip 地址 =_=.

参考文档(文档找rk的fae要):
Rockchip_Developer_Guide_Linux_GMAC_CN.pdf
Rockchip_Developer_Guide_Linux_GMAC_RGMII_Delayline_CN.pdf
以太网常见问题处理方法排查手册.pdf

二、吞吐量测试

pc 使用 iperf3 测试在 iperf3官网 下载安装, 下载后将 iperf3.exe 和 cygwin1.dll 复制粘贴到 C:\Windows\System32.

安卓 sdk 自带了这个工具, 在 external/iperf3运行 mmm ./编译,
编译之后生成 out/target/product/rk3566_rgo/system/bin/, push 到机器里面使用.

1. 发送测试

  • pc端: 运行 iperf3.exe -s后等待
PS D:\project\pg1000\wifi固件\bcdm> iperf3.exe -s
-----------------------------------------------------------
Server listening on 5201
-----------------------------------------------------------
Accepted connection from 192.168.3.41, port 43542
[  5] local 192.168.3.20 port 5201 connected to 192.168.*.* port 43544
[ ID] Interval           Transfer     Bandwidth
[  5]   0.00-1.00   sec   104 MBytes   872 Mbits/sec
[  5]   1.00-2.00   sec   104 MBytes   873 Mbits/sec
[  5]   2.00-3.00   sec   105 MBytes   881 Mbits/sec
[  5]   3.00-4.00   sec   106 MBytes   886 Mbits/sec
[  5]   4.00-5.00   sec   107 MBytes   900 Mbits/sec
[  5]   5.00-6.00   sec   107 MBytes   900 Mbits/sec
[  5]   6.00-7.00   sec   107 MBytes   895 Mbits/sec
[  5]   7.00-8.00   sec   108 MBytes   902 Mbits/sec
[  5]   8.00-9.00   sec   106 MBytes   892 Mbits/sec
[  5]   9.00-10.00  sec   107 MBytes   897 Mbits/sec
[  5]  10.00-10.02  sec  2.60 MBytes   884 Mbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bandwidth
[  5]   0.00-10.02  sec  0.00 Bytes  0.00 bits/sec                  sender
[  5]   0.00-10.02  sec  1.04 GBytes   890 Mbits/sec                  receiver
-----------------------------------------------------------

*安卓端: 运行 ./iperf3 -c 192.168.*.* -i 1 -w 1M -t 10 -l 16000, 其中192.168.*.*: 为 pc 端的 ip

rk3566_rgo:/cache # ./iperf3 -c 192.168.*.* -i 1 -w 1M -t 10 -l 16000
Connecting to host 192.168.3.20, port 5201
[  5] local 192.168.3.41 port 43544 connected to 192.168.3.20 port 5201
[ ID] Interval           Transfer     Bitrate         Retr  Cwnd
[  5]   0.00-1.00   sec   108 MBytes   904 Mbits/sec    6    395 KBytes
[  5]   1.00-2.00   sec   104 MBytes   872 Mbits/sec    9    361 KBytes
[  5]   2.00-3.00   sec   105 MBytes   883 Mbits/sec   15    276 KBytes
[  5]   3.00-4.00   sec   106 MBytes   886 Mbits/sec   12    218 KBytes
[  5]   4.00-5.00   sec   107 MBytes   899 Mbits/sec    9    168 KBytes
[  5]   5.00-6.00   sec   107 MBytes   901 Mbits/sec    0    436 KBytes
[  5]   6.00-7.00   sec   107 MBytes   896 Mbits/sec   12    341 KBytes
[  5]   7.00-8.00   sec   107 MBytes   901 Mbits/sec    9    331 KBytes
[  5]   8.00-9.00   sec   106 MBytes   892 Mbits/sec   15    253 KBytes
[  5]   9.00-10.00  sec   107 MBytes   896 Mbits/sec   12    188 KBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate         Retr
[  5]   0.00-10.00  sec  1.04 GBytes   893 Mbits/sec   99             sender
[  5]   0.00-10.00  sec  1.04 GBytes   892 Mbits/sec                  receiver

2. 接收测试

发送测试反过来操作即可。

三、打开 led 灯

默认情况只亮一颗黄灯, 需要将另一颗绿灯点亮. 查看芯片手册, RTL8211F 的寄存器读写, 首先需要将要操作的 Address 对应的 page 写入 Page Select Register, 再对该寄存器进行读写.

rtl8211f驱动,linux 驱动,android,linux,驱动开发,c语言,嵌入式硬件

要点亮灯对应检测到千兆网卡是亮灯需要将 bit8(绿灯), bit13(黄灯) 设置为 1. 首先往Page Select Register中写入对应的 page 0xd04, 然后再操作 0x10 寄存器. Page Select Register 如下所示.

rtl8211f驱动,linux 驱动,android,linux,驱动开发,c语言,嵌入式硬件

编写代码如下

#define PHY_ID_RTL8211F                   0x001cc916
#define PAGE_SELECT_ADDR                  0x1f
#define LED_PAGE_REG                      0xd04
#define LED_CONTORL_REG                   0X10

static int phy_rtl8211f_led_fixup(struct phy_device *phydev)
{
   int value = 0;

   if (phydev->phy_id != PHY_ID_RTL8211F)
       return 0;

   /* select page to 0xd04 */
   phy_write(phydev, PAGE_SELECT_ADDR, LED_PAGE_REG);

   /* When the network card is 1000m, open led1(bit8) and led2(bit13) */
   value = phy_read(phydev, LED_CONTORL_REG);
   value |= (1 << 8) | (1 << 13);
   phy_write(phydev, LED_CONTORL_REG, value);

   return 0;
}

完整修改如下文章来源地址https://www.toymoban.com/news/detail-819457.html

-- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
@@ -121,11 +121,10 @@ static void stmmac_exit_fs(struct net_device *dev);

 #define STMMAC_COAL_TIMER(x) (jiffies + usecs_to_jiffies(x))

+#define PHY_ID_RTL8211F                   0x001cc916
+#define PAGE_SELECT_ADDR                  0x1f
+#define LED_PAGE_REG                      0xd04
+#define LED_CONTORL_REG                   0X10

 /**
  * stmmac_verify_args - verify the driver parameters.
@@ -2485,27 +2484,24 @@ static void stmmac_safety_feat_configuration(struct stmmac_priv *priv)
        }
 }

+static int phy_rtl8211f_led_fixup(struct phy_device *phydev)
 {
+       int value = 0;

+       if (phydev->phy_id != PHY_ID_RTL8211F)
                return 0;

+       /* select page to 0xd04 */
+       phy_write(phydev, PAGE_SELECT_ADDR, LED_PAGE_REG);

+       /* When the network card is 1000m, open led1(bit8) and led2(bit13) */
+       value = phy_read(phydev, LED_CONTORL_REG);
+       value |= (1 << 8) | (1 << 13);
+       phy_write(phydev, LED_CONTORL_REG, value);

        return 0;
 }

 /**
  * stmmac_hw_setup - setup mac in a usable state.
  *  @dev : pointer to the device structure.
@@ -4482,7 +4478,7 @@ int stmmac_dvr_probe(struct device *device,
                            __func__);
 #endif

+       ret = phy_register_fixup_for_uid(PHY_ID_RTL8211F,0xffffffff, phy_rtl8211f_led_fixup);
        if (ret)
                pr_warn("Cannot register PHY board fixup.\n");

@@ -4685,7 +4681,7 @@ int stmmac_resume(struct device *dev)

        mutex_unlock(&priv->lock);

+       phy_rtl8211f_led_fixup(ndev->phydev);

        if (ndev->phydev)
                phy_start(ndev->phydev);

到了这里,关于rk3566-安卓11-千兆网卡 rtl8211f 移植的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Atlas200关于RTL8211FSI和YT8521SH千兆以太PHY调试心得

    最近调试了一个硬件千兆以太PHY的问题,记录一下。 问题现象描述:两块Atlas200板卡,上电后,ping不通,但是插网线连接电脑的话,电脑能识别这个网卡,所以感觉还是MAC和PHY之间的通信出了问题。一块板卡用的是RTL8211,另一块是YT8521SH,两个PHY芯片是封装完全兼容的。  

    2024年02月11日
    浏览(111)
  • RK3588 编解码盒子 之 RTL8211FS-CG光口调试

    [RK3588从入门到精通] 专栏总目录 本文是基于RK3588平台,SDK版本:RK3588_ANDROID12.0 RTL8211FS-CG光口调试总结。 视频桥接芯片:RTL8211FS-CG 驱动代码:“kernel/drivers/net/phy/realtek.c” 本次调试的方案功能:RK3588 调试RTL8211FS-CG 转接出光口 硬件工程师参考RTL8211FS-CG发布的设计图设计 以下

    2023年04月16日
    浏览(44)
  • FPGA 图像缩放 千兆网 UDP 网络视频传输,基于RTL8211 PHY实现,提供工程和QT上位机源码加技术支持

    没玩过UDP协议栈都不好意思说自己玩儿过FPGA,这是CSDN某大佬说过的一句话,鄙人深信不疑。。。UDP协议栈在实际项目中应用广泛,特别是在医疗和军工行业;本文使用Xilinx的Artix7 FPGA基于RTL8211 网络PHY芯片实现千兆网UDP视频传输(视频缩放后再传输),视频源有两种,分别对应

    2024年02月07日
    浏览(46)
  • OpenHarmony实战:瑞芯微RK3566移植案例(中)

    上篇文章:OpenHarmony实战:瑞芯微RK3566移植案例(上) 常见的INPUT设备有键盘、鼠标、游戏杆、Touch Screen等。Touch 设备与主机通讯采用标准 I2C 总线,触屏 IC 提供中断支持,提高了触屏数据的实时性。本项目的触摸屏器件IC 为 GT911。 驱动框架模型 INPUT驱动模型 INPUT 驱动模型核

    2024年04月23日
    浏览(49)
  • RK平台移植rtl8852bs wifi驱动

    RK平台 android 12的内核里面没有rtl8852bs wifi驱动,找模组原厂要了驱动,看了一下是其他平台的。。。要放RK平台是编译不过的,要做一下相应的修改,有点坑! 首先,修改kernel-5.10/drivers/net/wireless/rockchip_wlan/Kconfig: 接着, 修改kernel-5.10/drivers/net/wireless/rockchip_wlan/Makefile:

    2024年02月03日
    浏览(37)
  • 基于FPGA的数据采集、编码、通讯和存储系统设计(即FPGA+RTL8211千兆以太网+SD卡存储+RTC+Uart+AD7606数模转换+电流放大采集等硬件设计与程序验证)

    介绍一个小项目,加强对FPGA相关接口的整体把握。 硬件及软件代码梳理: 硬件系统的主要功能框图,其中FPGA作为处理单元,实现了包括电流和电压的采集、千兆以太网通讯、SD卡本地数据存储和串口通讯等。已经过板级测试,测试包含:千兆网通讯收发测试、AD采集的数据

    2024年04月13日
    浏览(56)
  • 香橙派5 RK3588使用RTL8188FTV USB无线网卡

    这几天贪小便宜在某宝上买了个五块九的USB网卡,芯片方案是RTL8188FTV,结果上香橙派5上没有驱动。花了点时间从6.2内核那边反向移植了驱动,现在提供给大家使用。废话不说,直接上链接: GitHub链接 使用方法也很简单,里面有个中文版的README链接,照着操作就行,这里就不

    2024年01月23日
    浏览(77)
  • RK3288 Android11 RTL8723DS WiFi 和 蓝牙Bluetooth 适配

      瑞芯微RK系列对“REALTEK瑞昱公司”的wifi、蓝牙双模的模组都有内置适配的,因此HAL层、Framework层、协议栈及库文件都不需要移植适配,只需修改设备树和一些配置文件即可。 补充: RTL8723DS时钟输入源讲解   RTL8723DS模组的第24号引脚是模组的时钟输入源,需要给此提供

    2024年02月07日
    浏览(79)
  • 浅谈FPGA网络PHY芯片RTL8211

    市面上很多开发板都使用RTL8211 PHY 芯片, 使用简单,你甚至不用配置就可以直接使用。官方默认配置是:开启自协商,速率1000M。  https://numato.com/product/rtl8211e-gigabit-ethernet-expansion-module/ 芯片地址: RTL8211FD器件地址由5位构成,高两位固定为2’b00,第三位后这三个引脚的上下

    2024年02月07日
    浏览(47)
  • RK3568/RK3566 系统完整启动信息打印

    DDR Version V1.09 20210630 ln ddrconfig:15 DDR4, 324MHz BW=32 Col=10 Bk=4 BG=2 CS0 Row=16 CS=1 Die BW=16 Size=2048MB change to: 324MHz clk skew:0x80 PHY drv:clk:37,ca:37,DQ:37,odt:0 vrefinner:50%, vrefout:50% dram drv:34,odt:0 change to: 528MHz clk skew:0x80 PHY drv:clk:37,ca:37,DQ:37,odt:0 vrefinner:50%, vrefout:50% dram drv:34,odt:0 change to: 780MHz clk s

    2024年02月11日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包