首页
  • GM-3568JHF
  • M4-R1
  • M5-R1
  • SC-3568HA
  • M-K1HSE
  • CF-NRS1
  • CF-CRA2
  • 1684XB-32T
  • 1684X-416T
  • C-3568BQ
  • C-3588LQ
  • GC-3568JBAF
  • C-K1BA
商城
  • English
  • 简体中文
首页
  • GM-3568JHF
  • M4-R1
  • M5-R1
  • SC-3568HA
  • M-K1HSE
  • CF-NRS1
  • CF-CRA2
  • 1684XB-32T
  • 1684X-416T
  • C-3568BQ
  • C-3588LQ
  • GC-3568JBAF
  • C-K1BA
商城
  • English
  • 简体中文
  • M4-R1

    • 一、简介

      • M4-R1简介
    • 二、快速上手

      • 01 OpenHarmony概述
      • 02 镜像烧录
      • 03 应用开发快速上手
      • 04 设备开发快速上手
    • 三、应用开发

      • 01 ArkUI

        • 1 ArkTS语言简介
        • 2 UI 组件-Row 容器介绍
        • 3 UI 组件-Column 容器介绍
        • 4 UI 组件-Text 组件
        • 5 UI 组件-Toggle 组件
        • 6 UI 组件-Slider 组件
        • 7 UI 组件-Animation 组件&Transition 组件
      • 02 资料获取

        • 1 OpenHarmony 官方资料
      • 03 开发须知

        • 1 Full-SDK替换教程
        • 2 引入和使用三方库
        • 3 HDC调试
        • 4 命令行恢复出厂模式
        • 5 升级App为system权限
      • 04 构建第一个应用

        • 1 构建第一个ArkTs应用-HelloWorld
      • 05 案例

        • 01 串口调试助手应用案例
        • 02 手写板应用案例
        • 03 数字时钟应用案例
        • 04 WIFI 信息获取应用案例
    • 四、设备开发

      • 1 Ubuntu环境开发

        • 01 环境搭建
        • 02 下载源码
        • 03 编译源码
      • 2 使用DevEco Device Tool 工具

        • 01 工具简介
        • 02 开发环境的搭建
        • 03 导入SDK
        • 04 HUAWEI DevEco Tool 功能介绍
    • 五、内核外设与接口

      • 01 指南
      • 02 设备树介绍
      • 03 GPIO介绍
      • 04 I2C通讯
      • 05 SPI通信
      • 06 PWM 控制
      • 07 串口通讯
      • 08 TF卡
      • 09 屏幕
      • 10 触摸
      • 11 Ethernet(以太网)
      • 12 M.2 硬盘
      • 13 音频
      • 13 WIFI & BT
      • 14 摄像头
    • 六、资料下载

      • 资料下载
  • M5-R1

    • 一、简介

      • M5-R1简介
    • 二、快速上手

      • 镜像烧录
      • 环境搭建
      • 下载源码
    • 三、外设与接口

      • 树莓派接口
      • GPIO 接口
      • I2C 接口
      • SPI通信
      • PWM控制
      • 串口通讯
      • TF Card
      • 屏幕
      • 触摸
      • 音频
      • RTC
      • Ethernet
      • M.2
      • MINI-PCIE
      • Camera
      • WIFI&BT
    • 四、资料下载

      • 资料下载

11 Ethernet(以太网)

1 以太网介绍

1.1 rk3568 网卡介绍

提到网络,很多朋友肯定听说过“网卡”一词,因为以前的电脑如果需要上网,就要和现在的独显台式电脑一样买一个网卡插上以后才可以上网。原因是随着技术的不断发展,现在只需要一个芯片就可以实现有线网卡功能,因此网卡芯片都直接放到了主板上(一般来说是跟在网线接口的后面)。

嵌入式网络硬件分为两部分: MAC 和 PHY ,有些 SoC 说自己支持网络,说的就是他内部集成网络 MAC 外设,一般常见的通用 SoC 都会集成网络 MAC 外设 ,比如RK系列、I.MX系列和STM32MP1系列等,集成进去的好处是可以显著提升网速(比如使用网络专用的DMA),可以支持到10/100/1000M网速,外接一个PHY芯片即可 (如果没有集成MAC外设,大多使用MAC+PHY 一体的网络芯片),MAC 通过 MII/RMII 接口或者 GMII/RGMII 接口来与外部的 PHY 芯片连接,完成网络数据传输。

RK3568 内核集成了两个 10M/100M/1000M 的网络 MAC,符合 IEEE802.3-2002 标准, MAC层支持全双工或者半双工模式下运行。 MAC 可编程,有直接存储器接口的专用 DMA,将数据格式化符合 IEEE802.3-2002 标准的数据包,并把这些数据传输到以太网的物理接口中(PHY),还可以把数据包从 RXFIFO 移动到微处理器的存储器中。RK3568 内部 ENET 外设主要特性如下:

  • ①、支持全工和半双工操作。
  • ②、全双工流控制操作(IEEE 802.3X 暂停包和优先级流控制)
  • ③、报头和帧起始数据(SFD)在发送模式下自动插入、在接收中自动删除。
  • ④、可逐帧控制 CRC 和 pad 自动生成
  • ⑤、可编程数据包长度,支持标准以太网数据包或高达 16KB 的巨型以太网数据包
  • ⑥、可编程数据包间隙
  • ⑦、两组 FIFO:一个具有可编程阈值功能的 4096 字节发送 FIFO 和一个具有可配置阈值功能的 4096 字节接收 FIFO

1.2 IP地址、子网掩码、默认网关、DNS服务器基本介绍

计算机要实现网络通信,就必须要有一个用于快速定位的网络地址,IP是32位二进制数据,通常以十进制表示,并以“.”分隔。IP地址就是计算机在网络中的唯一身份ID,与现实世界中快递的配送需要有具体的住宅地址是一个道理,IP地址 = 网络地址 + 主机地址(又称:主机号和网络号组成)

那IP地址的网络地址和主机地址怎么区分呢?就要用到子网掩码,子网掩码的值为255时,对应位的IP地址为网络地址位,比如IP地址:192.168.22.88 ,子网掩码位 255.255.255.0 ,那192.168.22 就是网络地址。网络地址用于确定找到你所在的局域网比如找到你家或者公司的网络,主机地址用于确定你所局域网的位置,比如说192.168.22.88 是你加客厅的电视的网络IP,192.168.22.66是你家电脑的网络IP。在断网的情况下,局域网中的设备是可以通信的,比如说手机连接路由器的网络以后就可以输入IP进入到其后台进行管理。

而网关就可以理解为把数据从局域网发到外接的工具,具体解析过程不做介绍。

由于IP地址不好记,我们上网通常输入的是一个网址,比如“baidu.com",DNS的功能就是把这个网址名和IP对应起来,只需要输入网址就可以进入到对应IP的服务器。

2 以太网板卡接口

以太网接口

3 以太网使用---命令行方式

3.1 设备树解析

提示

下文的文件路径:out/kernel/src_tmp/linux-5.10/arch/arm64/boot/dts/rockchip 需要先编译码源。

本工程中以太网节点的配置按照设备树的三层结构如下:

基础定义层,以gmac0为例( rk3568.dtsi ):

gmac0: ethernet@fe2a0000 {
    compatible = "rockchip,rk3568-gmac", "snps,dwmac-4.20a";
    reg = <0x0 0xfe2a0000 0x0 0x10000>;
    interrupts = <GIC_SPI 27 IRQ_TYPE_LEVEL_HIGH>,
                 <GIC_SPI 24 IRQ_TYPE_LEVEL_HIGH>;
    interrupt-names = "macirq", "eth_wake_irq";
    rockchip,grf = <&grf>;
    clocks = <&cru SCLK_GMAC0>, <&cru SCLK_GMAC0_RX_TX>,
             <&cru SCLK_GMAC0_RX_TX>, <&cru CLK_MAC0_REFOUT>,
             <&cru ACLK_GMAC0>, <&cru PCLK_GMAC0>,
             <&cru SCLK_GMAC0_RX_TX>, <&cru CLK_GMAC0_PTP_REF>,
             <&cru PCLK_XPCS>;
    clock-names = "stmmaceth", "mac_clk_rx",
                  "mac_clk_tx", "clk_mac_refout",
                  "aclk_mac", "pclk_mac",
                  "clk_mac_speed", "ptp_ref",
                  "pclk_xpcs";
    resets = <&cru SRST_A_GMAC0>;
    reset-names = "stmmaceth";
    snps,mixed-burst;
    snps,tso;
    status = "disabled";

    mdio0: mdio {
        compatible = "snps,dwmac-mdio";
        #address-cells = <0x1>;
        #size-cells = <0x0>;
    };
};
  • compatible : 指定兼容性,支持RK3568 GMAC和标准DWC以太网MAC 4.20a
  • reg : 寄存器地址范围(0xfe2a0000-0xfe2affff)
  • interrupts : MAC中断号27和唤醒中断号24,均为高电平触发
  • clocks : 包含9个时钟源,涵盖MAC核心时钟、RX/TX时钟、参考时钟等
  • snps,mixed-burst : 启用混合突发传输模式
  • snps,tso : 启用TCP分段卸载功能
  • mdio0 : 内嵌MDIO总线控制器,用于PHY管理
  • status : 默认禁用状态

引脚配置层( rk3568-pinctrl.dtsi ):

//GMAC0 RGMII模式引脚配置:

gmac0_miim: gmac0-miim {
    rockchip,pins =
        /* gmac0_mdc */
        <2 RK_PC3 2 &pcfg_pull_none>,
        /* gmac0_mdio */
        <2 RK_PC4 2 &pcfg_pull_none>;
};

gmac0_rgmii_clk: gmac0-rgmii-clk {
    rockchip,pins =
        /* gmac0_rxclk */
        <2 RK_PA5 2 &pcfg_pull_none>,
        /* gmac0_txclk */
        <2 RK_PB0 2 &pcfg_pull_none_drv_level_1>;
};

gmac0_rgmii_bus: gmac0-rgmii-bus {
    rockchip,pins =
        /* gmac0_rxd2 */
        <2 RK_PA3 2 &pcfg_pull_none>,
        /* gmac0_rxd3 */
        <2 RK_PA4 2 &pcfg_pull_none>,
        /* gmac0_txd2 */
        <2 RK_PA6 2 &pcfg_pull_none_drv_level_2>,
        /* gmac0_txd3 */
        <2 RK_PA7 2 &pcfg_pull_none_drv_level_2>;
};

gmac0_tx_bus2: gmac0-tx-bus2 {
    rockchip,pins =
        /* gmac0_txd0 */
        <2 RK_PB3 1 &pcfg_pull_none_drv_level_2>,
        /* gmac0_txd1 */
        <2 RK_PB4 1 &pcfg_pull_none_drv_level_2>,
        /* gmac0_txen */
        <2 RK_PB5 1 &pcfg_pull_none>;
};
...........

//GMAC1提供两种引脚配置模式:

/* M0模式 - 使用GPIO3组 */
gmac1m0_rgmii_clk: gmac1m0-rgmii-clk {
    rockchip,pins =
        /* gmac1_rxclkm0 */
        <3 RK_PA7 3 &pcfg_pull_none>,
        /* gmac1_txclkm0 */
        <3 RK_PA6 3 &pcfg_pull_none_drv_level_1>;
};

/* M1模式 - 使用GPIO4组 */
gmac1m1_miim: gmac1m1-miim {
    rockchip,pins =
        /* gmac1_mdcm1 */
        <4 RK_PB6 3 &pcfg_pull_none>,
        /* gmac1_mdiom1 */
        <4 RK_PB7 3 &pcfg_pull_none>;
};
  • gmac0 : 使用GPIO2组引脚,支持RGMII千兆以太网
  • gmac1m0 : 使用GPIO3组引脚,适用于单网口设计
  • gmac1m1 : 使用GPIO4组引脚,适用于双网口设计

最后看板级配置层( rk3568-toybrick-x0.dtsi ):

&gmac0 {
    phy-mode = "rgmii";
    clock_in_out = "output";

    snps,reset-gpio = <&gpio2 RK_PD3 GPIO_ACTIVE_LOW>;
    snps,reset-active-low;
    snps,reset-delays-us = <0 20000 100000>;

    assigned-clocks = <&cru SCLK_GMAC0_RX_TX>, <&cru SCLK_GMAC0>;
    assigned-clock-parents = <&cru SCLK_GMAC0_RGMII_SPEED>, <&cru CLK_MAC0_2TOP>;
    assigned-clock-rates = <0>, <125000000>;

    pinctrl-names = "default";
    pinctrl-0 = <&gmac0_miim
                 &gmac0_tx_bus2
                 &gmac0_rx_bus2
                 &gmac0_rgmii_clk
                 &gmac0_rgmii_bus>;

    tx_delay = <0x2d>;
    rx_delay = <0x13>;

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

&mdio0 {
    rgmii_phy0: phy@0 {
        compatible = "ethernet-phy-ieee802.3-c22";
        reg = <0x0>;
    };
};
  • &gmac0 : 引用基础定义中的gmac0节点
  • phy-mode = "rgmii" : 配置为RGMII千兆以太网模式
  • clock_in_out = "output" : 时钟输出模式
  • snps,reset-gpio : PHY复位引脚使用GPIO2_D3,低电平有效
  • snps,reset-delays-us : 复位时序:0ms预延时,20ms复位持续时间,100ms复位后延时
  • assigned-clock-rates : 设置GMAC时钟频率为125MHz
  • tx_delay/rx_delay : RGMII接口的发送/接收延时补偿
  • phy-handle : 关联到rgmii_phy0 PHY设备
  • rgmii_phy0 : IEEE 802.3标准兼容的PHY芯片,MDIO地址为0

3.2 应用层测试网络的方法

在开发板中,可以使用如下常用命令测试网络(注:x.x.x.x 为网卡地址):

ifconfig        # 查看设备中的网络接口
ping x.x.x.x   # 通过与特定网络交换数据包,测试网络是否正常
ifconfig eth0 X.X.X.X up      # 打开网络
ifconfig eth0 X.X.X.X down    # 关闭网络

3.3 网络测试功能的具体演示

我们以以太网接口1为例,连接网线进行测试:

连接网线

插好后在终端输入指令 ifconfig 查看网口信息:

查看网口信息

系统成功识别到两个以太网接口,并可以看到插入网线的接口处被分配了一个网络IP,并显示了广播地址,子网掩码等信息。

下面输入指令 ping baidu.com 对网络连接进行测试:

网络连接测试

发送三组数据,无丢包,此时系统已经可以成功连接以太网。

4 以太网使用---NAPI方式(待完善)

在 GitHub 上编辑此页
上次更新:
贡献者: fxx
Prev
10 触摸
Next
12 M.2 硬盘