17. HPM6E00 FULL PORT

17.1. 依赖SDK1.10.0

17.2. 概述

HPM系列MCU是来自上海先楫半导体科技有限公司的高性能实时RISC-V微控制器,为工业自动化及边缘计算应用提供了极大的算力、高效的控制能力。

HPM6E00系列微控制器内置一个EtherCAT从站控制器(ESC),每个ESC存在三个端口P0,P1,P2用于EtherCAT通信,其中P0口为EtherCAT输入口。同时,该系列微控制器内置一个基于时间敏感网络的交换机控制器(TSN),每个TSN存在四个端口,CPUPORT,P1,P2,P3,其中,CPUPORT直接给到CPU,CPU可以参与该端口的数据处理,P1,P2,P3端口用于对外转发。支持802.1as,802.1Qav,802.1Qbv,802.1Qch,802.1Qbu,802.1br,只有CPUPORT支持802.1Qci和802.1CB。

针对HPM6E00系列的ESC和TSN。先楫半导体推出HPM6E00_FULL_PORT板,用于测试评估ESC和TSN。同时,该板子板载SPI LCD,8路CAN,KEY,LED,USB OTG,USB-UART等,具体可参考《HPM6E00FULLPORTRevB》原理图。

17.3. 特性

  • 支持简单交换机功能,三个外部端口及一个内部端口可以通过任意MAC的以太网帧

  • 支持静态MAC表配置功能,配置静态MAC表后,三个外部端口及一个内部端口可以通过查表成功的以太网帧

  • 支持动态MAC表配置及动态学习功能,通过ARP包学习源MAC并配置MAC表后,三个外部端口及一个内部端口可以通过查表成功的以太网帧

  • 支持Ethercat从控制器 IO功能

17.4. 文件结构

full_port ------------------------------->主目录
  ├─doc --------------------------------->文档
  │  ├─api
  │  │  └─assets ------------------------>README_zh 使用的资源,如图片等
  │  └─doxygen -------------------------->doxygen文件 用于生成html
  │  └─HPM6E00_FULL_PORT_UG_V1.0.pdf----->用户指导手册
  ├─hardware ---------------------------->硬件
  │  └─HPM6E00FULLPORTRevB-工程文件 --->工程文件
  │      └─HPM6E00FULLPORTRevB ------->原理图
  └─software ---------------------------->软件
      ├─apps ---------------------------->应用例程
      |  ├─ecat_io ---------------------->ESC IO控制例程
      │  ├─tsn_dynamic_mac_switch ------->TSN动态设置MAC例程
      │  ├─tsn_simplest_switch ---------->TSN简单交换
      │  └─tsn_static_mac_switch -------->TSN静态设置MAC例程
      └─drivers ------------------------->驱动
          ├─inc ------------------------->驱动头文件
          │  └─tsn ---------------------->TSN驱动头文件
          └─src ------------------------->源码文件

full_port为主目录,内部三个文件夹和两个文件,doc,hardware,software,README_zh.md(中文),README_en.md(英文)。

17.4.1. 硬件结构

17.4.2. 软件结构

software内包括apps及drivers,drivers内包括inc驱动头文件及src驱动源文件。apps内为各种例程,通过调用drivers内函数实现功能。同时,apps内为每个例程单独建立一个文件夹,TSN相关的功能以tsn_开头,依次类推。同时,每个例程内存在main.c,global_config.h,CMakeLists.txt。

17.5. 测试用例

17.5.1. 基于TSN的简单交换(tsn_simplest_switch)

17.5.1.1. 概述

在该示例中,配置TSN的Switch的三个外端口P1,P2,P3可以相互转发广播帧和未知帧,广播帧指目的mac为0xFFFFFFFFFFFF,未知帧指通过三个外端口进入到Switch的数据帧,目的MAC未通过查表找到。通过按键SW4,SW5,SW7可以切换端口速率10/100/1000M。

17.5.1.2. 设备连接

  • 连接PC USB到DEBUG Type-C接口(J3)

  • 连接调试器到JTAG接口 connection diagram
    两根网线一端连接板子P1,P2口(随意两个口即可),另一端分别连接两台PC。 注:保证两台PC的IP在一个网段,同时需要关闭PC的防火墙。这里设置一台PC的IP为192.168.100.12,另一台PC的IP为192.168.100.9。

17.5.1.3. 端口设置

  • 串口波特率设置为115200bps1个停止位无奇偶校验位

17.5.1.4. 创建工程

17.5.1.5. 运行现象

当工程正确运行后,串口终端会输出如下信息:

==============================
 hpm6e00_full_port clock summary
==============================
cpu0:		 500000000Hz
cpu1:		 600000000Hz
ahb:		 200000000Hz
axif:		 200000000Hz
axis:		 200000000Hz
axic:		 200000000Hz
axin:		 100000000Hz
xpi0:		 100000000Hz
femc:		 166666666Hz
mchtmr0:	 24000000Hz
mchtmr1:	 24000000Hz
==============================

----------------------------------------------------------------------
$$\   $$\ $$$$$$$\  $$\      $$\ $$\
$$ |  $$ |$$  __$$\ $$$\    $$$ |\__|
$$ |  $$ |$$ |  $$ |$$$$\  $$$$ |$$\  $$$$$$$\  $$$$$$\   $$$$$$\
$$$$$$$$ |$$$$$$$  |$$\$$\$$ $$ |$$ |$$  _____|$$  __$$\ $$  __$$\
$$  __$$ |$$  ____/ $$ \$$$  $$ |$$ |$$ /      $$ |  \__|$$ /  $$ |
$$ |  $$ |$$ |      $$ |\$  /$$ |$$ |$$ |      $$ |      $$ |  $$ |
$$ |  $$ |$$ |      $$ | \_/ $$ |$$ |\$$$$$$$\ $$ |      \$$$$$$  |
\__|  \__|\__|      \__|     \__|\__| \_______|\__|       \______/
----------------------------------------------------------------------
simplest switch

当用一台PC ping 另一台PC时,可以看到 ping diagram

17.5.2. 基于TSN的静态MAC交换(tsn_static_mac_switch)

17.5.2.1. 概述

在该示例中,配置TSN的Switch的三个外端口P1,P2,P3静态MAC表,使其可以通过查表转发数据。通过按键SW4,SW5,SW7可以切换端口速率10/100/1000M。

17.5.2.2. 静态MAC配置

uint8_t u8CpuPortDesMac[6] = {0x4e, 0x00, 0x00, 0x00, 0xf0, 0x50};
uint8_t u8Port1DesMac[6] = {0x08, 0x92, 0x04, 0x1e, 0xb9, 0x62};
uint8_t u8Port2DesMac[6] = {0x00, 0xe0, 0x6a, 0x00, 0x90, 0x3e};
uint8_t u8Port3DesMac[6] = {0x08, 0x92, 0x04, 0x14, 0xf9, 0x40};

17.5.2.3. 设备连接

  • 连接PC USB到DEBUG Type-C接口(J3)

  • 连接调试器到JTAG接口 connection diagram

  • PC的MAC地址查找 右键”开始”->选择设置->打开网络和Internet->选择”以太网”->选择”更改适配器选项” find mac
    双击连接的以太网->选择”详细信息” mac content

PC1的MAC需要放到u8Port1DesMac数组,并将PC1网口与P1端口通过网线连接,PC2的MAC需要放到u8Port2DesMac数组,并将PC2与P2端口通过网线连接。

注:保证两台PC的IP在一个网段,同时需要关闭PC的防火墙。这里设置一台PC的IP为192.168.100.12,另一台PC的IP为192.168.100.9。

17.5.2.4. 端口设置

  • 串口波特率设置为115200bps1个停止位无奇偶校验位

17.5.2.5. 创建工程

17.5.2.6. 运行现象

当工程正确运行后,串口终端会输出如下信息:

==============================
 hpm6e00_full_port clock summary
==============================
cpu0:		 500000000Hz
cpu1:		 600000000Hz
ahb:		 200000000Hz
axif:		 200000000Hz
axis:		 200000000Hz
axic:		 200000000Hz
axin:		 100000000Hz
xpi0:		 100000000Hz
femc:		 166666666Hz
mchtmr0:	 24000000Hz
mchtmr1:	 24000000Hz
==============================

----------------------------------------------------------------------
$$\   $$\ $$$$$$$\  $$\      $$\ $$\
$$ |  $$ |$$  __$$\ $$$\    $$$ |\__|
$$ |  $$ |$$ |  $$ |$$$$\  $$$$ |$$\  $$$$$$$\  $$$$$$\   $$$$$$\
$$$$$$$$ |$$$$$$$  |$$\$$\$$ $$ |$$ |$$  _____|$$  __$$\ $$  __$$\
$$  __$$ |$$  ____/ $$ \$$$  $$ |$$ |$$ /      $$ |  \__|$$ /  $$ |
$$ |  $$ |$$ |      $$ |\$  /$$ |$$ |$$ |      $$ |      $$ |  $$ |
$$ |  $$ |$$ |      $$ | \_/ $$ |$$ |\$$$$$$$\ $$ |      \$$$$$$  |
\__|  \__|\__|      \__|     \__|\__| \_______|\__|       \______/
----------------------------------------------------------------------
static mac switch

cpu_port接收PC1/PC2的数据帧,显示在串口终端 static recv diagram

将接收到的数据帧,目的MAC与源MAC交换位置后,发送给PC1/PC2,可以在wireshark中看到 static send diagram

当用一台PC ping 另一台PC时,可以看到 ping diagram

17.5.3. 基于TSN的动态MAC交换(tsn_dynamic_mac_switch)

17.5.3.1. 概述

在该示例中,TSN的Switch的三个外端口P1,P2,P3,通过ARP协议自动学习动态MAC表,使其可以通过查表转发数据。通过按键SW4,SW5,SW7可以切换端口速率10/100/1000M。

17.5.3.2. 动态MAC配置

无需手动设置MAC表,通过PC间ARP协议,自动学习MAC,并配置MAC表。

17.5.3.3. 设备连接

  • 连接PC USB到DEBUG Type-C接口(J3)

  • 连接调试器到JTAG接口 connection diagram
    两根网线一端连接板子P1,P2口(随意两个口即可),另一端分别连接两台PC。 注:保证两台PC的IP在一个网段,同时需要关闭PC的防火墙。这里设置一台PC的IP为192.168.100.12,另一台PC的IP为192.168.100.9。

17.5.3.4. 端口设置

  • 串口波特率设置为115200bps1个停止位无奇偶校验位

17.5.3.5. 创建工程

17.5.3.6. 运行现象

当工程正确运行后,串口终端会输出如下信息:

==============================
 hpm6e00_full_port clock summary
==============================
cpu0:		 500000000Hz
cpu1:		 600000000Hz
ahb:		 200000000Hz
axif:		 200000000Hz
axis:		 200000000Hz
axic:		 200000000Hz
axin:		 100000000Hz
xpi0:		 100000000Hz
femc:		 166666666Hz
mchtmr0:	 24000000Hz
mchtmr1:	 24000000Hz
==============================

----------------------------------------------------------------------
$$\   $$\ $$$$$$$\  $$\      $$\ $$\
$$ |  $$ |$$  __$$\ $$$\    $$$ |\__|
$$ |  $$ |$$ |  $$ |$$$$\  $$$$ |$$\  $$$$$$$\  $$$$$$\   $$$$$$\
$$$$$$$$ |$$$$$$$  |$$\$$\$$ $$ |$$ |$$  _____|$$  __$$\ $$  __$$\
$$  __$$ |$$  ____/ $$ \$$$  $$ |$$ |$$ /      $$ |  \__|$$ /  $$ |
$$ |  $$ |$$ |      $$ |\$  /$$ |$$ |$$ |      $$ |      $$ |  $$ |
$$ |  $$ |$$ |      $$ | \_/ $$ |$$ |\$$$$$$$\ $$ |      \$$$$$$  |
\__|  \__|\__|      \__|     \__|\__| \_______|\__|       \______/
----------------------------------------------------------------------
dynamic mac switch

当用一台PC ping 另一台PC时,可以看到 ping diagram

17.5.4. 基于ESC的IO控制(ecat_io)

17.5.4.1. 概述

在该示例中,通过配置ESC功能,EtherCAT的三个端口P0,P1,P2实现’YYY’型通信,控制IO。

17.5.4.2. 设备连接

  • 连接PC USB到DEBUG Type-C接口(J3)

  • 连接调试器到JTAG接口

  • 连接EtherCAT的三个口 connection diagram

17.5.4.3. 端口设置

  • 串口波特率设置为115200bps1个停止位无奇偶校验位

17.5.4.4. 创建工程

  • windows下工程构建
    请参考:HPM6E00_FULL_PORT用户指南

  • ecat_io demo 中SSC代码生成参考SDK ecat_io demo SSC生成流程。 注意:本例程为三口ESC IO控制,所有配置文件需要使用本例程中的,如xml文件及xlsx文件。 C:\TwinCAT\3.1\Config\Io\EtherCAT中的xml文件使用本例程SSC/ESI/ECAT_IO.xml文件。

17.5.4.5. 运行现象

当工程正确运行后,串口终端会输出如下信息:

==============================
 hpm6e00_full_port clock summary
==============================
cpu0:		 500000000Hz
cpu1:		 600000000Hz
ahb:		 200000000Hz
axif:		 200000000Hz
axis:		 200000000Hz
axic:		 200000000Hz
axin:		 100000000Hz
xpi0:		 133333333Hz
femc:		 166666666Hz
mchtmr0:	 24000000Hz
mchtmr1:	 24000000Hz
==============================

----------------------------------------------------------------------
$$\   $$\ $$$$$$$\  $$\      $$\ $$\
$$ |  $$ |$$  __$$\ $$$\    $$$ |\__|
$$ |  $$ |$$ |  $$ |$$$$\  $$$$ |$$\  $$$$$$$\  $$$$$$\   $$$$$$\
$$$$$$$$ |$$$$$$$  |$$\$$\$$ $$ |$$ |$$  _____|$$  __$$\ $$  __$$\
$$  __$$ |$$  ____/ $$ \$$$  $$ |$$ |$$ /      $$ |  \__|$$ /  $$ |
$$ |  $$ |$$ |      $$ |\$  /$$ |$$ |$$ |      $$ |      $$ |  $$ |
$$ |  $$ |$$ |      $$ | \_/ $$ |$$ |\$$$$$$$\ $$ |      \$$$$$$  |
\__|  \__|\__|      \__|     \__|\__| \_______|\__|       \______/
----------------------------------------------------------------------
ecat_io

EEPROM loading successful, no checksum error.

使用TwinCAT控制板载EtherCAT,可以看到 ping diagram Box1,Box2,Box3分别代表连接P0 P1 P2口的设备,可以看到处于OP状态,同时,每个设备的InputCounter及OutputCounter均可在线修改。InputCounter为输入,即SW1拨码开关的状态可以实时显示在InputCounter。OutputCounter为输出,通过TwinCAT实时修改该参数,数值可反应在LED11-18上。