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

慈云数据 2024-04-27 技术支持 52 0

文章目录

  • 一、功能调试
    • 1. 确认原理图
      • 1.1 RGMII 模式
      • 1.2 RMII 模式
      • 1.3 确认 name
      • 2. 配置驱动
      • 3. 配置电源
      • 二、吞吐量测试
        • 1. 发送测试
        • 2. 接收测试
        • 三、打开 led 灯

          一、功能调试

          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
            MACPHYname
            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_OUT由ETHx_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
              MACPHYname
              GMACX_MCLKINOUT 提供时钟给 XTAL_OUT
              ETHx_REFCLKO_25M 悬空
              XTAL_IN 接地
              XTAL_OUT 由 GMACX_MCLKINOUT 提供时钟
              RMII Clock Output
              GMACX_MCLKINOUT 时钟由 PHY_TXCLK 提供
              ETHx_REFCLKO_25M 悬空
              XTAL_IN/XTAL_OUT 由晶体提供时钟RMII Clock Input

              1.3 确认 name

              确认 mac 端接口

              根据原理图:

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

                确认 phy 端接口

                根据原理图:

                • 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 = ;
                         };
                  };
                  &gmac1 {
                          phy-mode = "rgmii"; // 接口类型
                          clock_in_out = "output"; // 输出时钟
                          snps,reset-gpio = ; // 复位引脚
                          snps,reset-active-low;                             // 低电平有效
                          snps,reset-delays-us = ;           // 复位延时时间
                          // 时钟配置
                          assigned-clocks = , ;
                          assigned-clock-parents = ;
                          assigned-clock-rates = , ;  // 千兆网卡时钟
                          pinctrl-names = "default";
                          pinctrl-0 = ;
                          // tx, rx 延时时间, 需要参考文档 Rockchip_Developer_Guide_Linux_GMAC_RGMII_Delayline_CN.pdf 配置
                          tx_delay = ;
                          rx_delay = ;
                          phy-handle = ;
                          status = "okay";
                  };
                  

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

                  2. 配置驱动

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

                  3. 配置电源

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

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

                  &pmu_io_domains {
                      status = "okay";
                      pmuio1-supply = ;
                      pmuio2-supply = ;
                      vccio1-supply = ;
                      vccio3-supply = ;
                      vccio4-supply = ;
                  -       vccio5-supply = ;
                  +       vccio5-supply = ;
                      vccio6-supply = ;
                      vccio7-supply = ;
                  };
                  

                  这里如果没有配置正确的现象就是, 软件看起来一切正常, 可以读取 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, 再对该寄存器进行读写.

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

                    编写代码如下

                    #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 phydev)
                                    phy_start(ndev->phydev);
                    
微信扫一扫加客服

微信扫一扫加客服

点击启动AI问答
Draggable Icon