28. HPM6E系列:将TSN作为交换机的多端口以太网方案

28.1. 依赖SDK1.11.0

28.2. 概述

本方案使用HPM6E系列MCU的ENET功能代替TSW的CPU PORT功能,可以帮助用户快速搭建带交换机的以太网通信系统。系统框图如下所示。 system block diagram 其中P1 P2为TSW的P1 P2 PORT,作为对外的以太网PORT。TSW P3端口通过电阻直连到ENET端口,将ENET端口作为对内的端口。 本方案中,既可以利用TSW的硬件交换功能,串联组网,又可以利用ENET的稳定性进行以太网通信。

特点:

  1. 两个对外端口均支持10M/100M/1000M以太网通信,且自动协商通信速率。

  2. 集成FreeRTOS,支持多任务并发运行,并集成LWIP协议栈。

  3. 支持单网卡模式,即从外部看,本设备作为一个网络设备,拥有一套独立的MAC IP。对于两个对外的网口,可以使用任意一个网口进行通信。

  4. 支持双网卡模式,即从外部看,本设备作为两个网络设备,拥有两套独立的MAC IP。对于两个对外的网口,每个网口均可独立通信。

  5. 本方案硬件带SSD1306 OLED显示,并且集成了U8G2库。

  6. 支持USB SH 命令行,用户可通过可自行添加USB SH命令功能

28.3. 例程说明

本方案硬件为HPM6E00EnetConnectTsnRevB,如下图所示。 hardware

编号

器件

描述

1

OLED显示屏

双色,SSD306驱动芯片

2 5

YT8531C

PHY芯片,支持10M/100M/1000M以太网通信速率

3 6

H5007NL

千兆网络变压器

4 7

RJ45

RJ45以太网端口

8

MX25L12833FM2I-10G

FLASH存储器

9

33欧姆电阻

TSW P3端口到ENET端口的电阻

10

HPM6E80IVM1

MCU

11

Type-C接口

USB 功能

12

Type-C接口

USB转串口功能,LOG输出

28.3.1. 软件

28.3.1.1. 软件架构

  1. 软件代码均在software目录下。

    • apps 为应用目录,包含所有应用代码。

    • drivers 为驱动目录,包含所有驱动代码。

  2. 带有FreeRTOS任务,支持多任务并发运行,集成LWIP协议栈,支持以太网通信。

    • main.c 为主程序,包含任务创建和调度。

    • FreeRTOSConfig.h 用于配置FreeRTOS参数

    • lwipopts_app.h 及 drivers\enet_tsn\ports\lwipopts.h 用于配置LWIP协议栈参数

    • csh_config.h 及 shell.h 用于配置USB SH 命令行参数

    • drivers\enet_tsn\common\netconf.h 用于配置网络参数,包括MAC IP、网关 IP、子网掩码等。

28.3.1.2. 主要软件功能设计

  1. TSW 与 ENET 均工作在RGMII模式。且TSW P3口与ENET端口均在千兆模式,通过外部端口自协商确定通信速率后,可选择性打开或关闭TSW P1 P2 PORT的存储转发模式。如果检测到对外对口为1000M,TSW P1 P2 PORT将关闭存储转发模式,否则将打开存储转发模式。

  2. 单网卡模式 single network 该模式下,本设备作为一个网络设备,拥有一套独立的MAC IP。对于两个对外的网口,可以使用任意一个网口进行通信。

  3. 双网卡模式 double network 该模式下,本设备作为两个网络设备,拥有两套独立的MAC IP。对于两个对外的网口,每个网口均可独立通信。

  4. 支持U8G2库,用于控制OLED显示。 在drivers\drv_oled.c内已经注册了U8G2库需要的驱动函数

        u8g2_Setup_ssd1306_128x64_noname_f(
        &u8g2,
        U8G2_R0,
        drv_u8x8_byte_4wire_spi,
        drv_u8x8_gpio_and_delay
        );
    

    如果需要使用U8G2库,需要配置CMakeLists.txt文件. set(CONFIG_A_U8G2 1) set(CONFIG_A_SSD1306 1) sdk_compile_definitions(-DUSE_U8G2=1) 默认会编译U8G2库,但是不使用U8G2库的函数。 默认显示HPM LOGO。

28.3.1.3. 生成工程

  • 通过HPM SDK Project Generator生成segger工程 generate_project board选择hpm6e_enet_connect_tsn, 应用选择enet_connect_tsn。

28.3.2. 例程测试

  1. 单网卡模式测试

    • 配置 生成工程前需要配置CMakeLists.txt文件. sdk_compile_definitions(-D_ENET_PORT_COUNT=1) 如果需要使用TCP_ECHO功能,需要配置CMakeLists.txt文件. sdk_compile_definitions(-D_TCP_ECHO=1) 如果使用UDP_ECHO功能,需要配置CMakeLists.txt文件. sdk_compile_definitions(-D_TCP_ECHO=0) 配置好CMakeLists.txt文件后,重新生成工程。

    • 测试 单网卡模式下, 默认使用drivers\enet_tsn\common\netconf.h文件内的MAC IP、网关 IP、子网掩码等。

      /* MAC ADDRESS */
      #ifndef MAC0_CONFIG
      #define MAC0_CONFIG 98:2c:bc:b1:9f:27
      #endif
      
      /* Static IP ADDRESS */
      #ifndef IP0_CONFIG
      #define IP0_CONFIG 192.168.100.10
      #endif
      
      /* Netmask */
      #ifndef NETMASK0_CONFIG
      #define NETMASK0_CONFIG 255.255.255.0
      #endif
      
      /* Gateway Address */
      #ifndef GW0_CONFIG
      #define GW0_CONFIG 192.168.100.1
      #endif
      
    1. 单网卡模式下,使能UDP_ECHO功能 编译下载到硬件板子后,通过网线一端连接PC机,一端连接任意一个板子上的网口,PC机的IP需要与板子上的IP在同一子网内,使用NetAssist工具连接,设置远程主机为板子上的IP,端口为5001,如下图所示。 single_net_udp

    2. 单网卡模式下,使能TCP_ECHO功能 编译下载到硬件板子后,通过网线一端连接PC机,一端连接任意一个板子上的网口,PC机的IP需要与板子上的IP在同一子网内,使用NetAssist工具连接,设置远程主机为板子上的IP,端口为5001,如下图所示。 single_net_tcp

  2. 双网卡模式测试

    • 配置 生成工程前需要配置CMakeLists.txt文件. sdk_compile_definitions(-D_ENET_PORT_COUNT=2) 如果需要使用TCP_ECHO功能,需要配置CMakeLists.txt文件. sdk_compile_definitions(-D_TCP_ECHO=1) 如果使用UDP_ECHO功能,需要配置CMakeLists.txt文件. sdk_compile_definitions(-D_TCP_ECHO=0) 配置好CMakeLists.txt文件后,重新生成工程。

    • 测试 双网卡模式下, 默认使用drivers\enet_tsn\common\netconf.h文件内的MAC IP、网关 IP、子网掩码等。

      /* MAC ADDRESS */
      #ifndef MAC0_CONFIG
      #define MAC0_CONFIG 98:2c:bc:b1:9f:27
      #endif
      
      #ifndef MAC1_CONFIG
      #define MAC1_CONFIG 98:2c:bc:b1:9f:37
      #endif
      
      /* Static IP ADDRESS */
      #ifndef IP0_CONFIG
      #define IP0_CONFIG 192.168.100.10
      #endif
      
      #ifndef IP1_CONFIG
      #define IP1_CONFIG 192.168.200.10
      #endif
      
      /* Netmask */
      #ifndef NETMASK0_CONFIG
      #define NETMASK0_CONFIG 255.255.255.0
      #endif
      
      #ifndef NETMASK1_CONFIG
      #define NETMASK1_CONFIG 255.255.255.0
      #endif
      
      /* Gateway Address */
      #ifndef GW0_CONFIG
      #define GW0_CONFIG 192.168.100.1
      #endif
      
      #ifndef GW1_CONFIG
      #define GW1_CONFIG 192.168.200.1
      #endif
      
    1. 双网卡模式下,使能UDP_ECHO功能 编译下载到硬件板子后,通过两根网线连接PC机和板子上的两个网口,PC机的每个口的IP需要与板子上对应口的IP在同一子网内,使用NetAssist工具连接,设置远程主机,默认P1口的IP为192.168.100.10,端口为5001,P2口的IP为192.168.200.10,端口为5002,如下图所示。 double_net0_udp double_net1_udp

    2. 双网卡模式下,使能TCP_ECHO功能 编译下载到硬件板子后,通过两根网线连接PC机和板子上的两个网口,PC机的每个口的IP需要与板子上对应口的IP在同一子网内,使用NetAssist工具连接,设置远程主机,默认P1口的IP为192.168.100.10,端口为5001,P2口的IP为192.168.200.10,端口为5002,如下图所示。 double_net0_tcp double_net1_tcp