本帖最后由 wdzfd 于 2019-11-16 13:39 编辑

ZYNQ7000器件的PS部分包含两个独立的吉比特以太网控制器(Gigabit Ethernet Controller)实现两个10/100/1000Mb/s的以大网MAC,如要实现以太网连接还需要外部再连接一个PHY芯片,MYD-C7Z010/20开发板是在核心板上板载有MICREL 公司(已经被Microchip Technology收购)生产的千兆网卡PHY芯片,型号为KSZ9031RN,,使用RGMII 接口和MAC通信,这样对于使用核心板来开发的用户就比较方便,底板设计时不用考虑过多的PHY电路,只需要连接TXRX数据线到RJ45接口上就可以了。下面就ZYNQ的以太网功能做些基本的功能和性能测试,包括无操作系统或实时系统(RTOS)环境和LINUX环境下两种情况的测试。
一、无操作系统或实时系统(RTOS)环境下以太网测试
在无操作系统或实时系统(RTOS)环境下要实现以太网连接,一般都是移植开源的轻量级TCP/IP网络协议栈LWIP,XilinxSDK 2018.3是直接支持LWIP 2.0.2版本。
1、首先我们按上一篇试用报告DDR3测试(https://mbb.eet-china.com/forum.php?mod=viewthread&tid=74374)的步骤新建Vavido工程, 工程命名为eth_test, 区别是在第12步IP配置步骤,我们需要使用Ethernet0外设,勾上该外设,并点击Enet0使用MIO16-27的引脚,这个是和核心板上ZYNQ和PHY的硬件连接关系对应,如下图示:
301.jpg

米尔科技提供了一个IP配置脚本MYIR.tcl,在开发板配套光盘的MYD-C7Z01020_V08_20181220\05-Programmable_Source\7Z010目录下的tutorial.rar压缩包内(刚开始我没有找到,问了该公司技术支持人员刘恒刘工提供了MYIR.tcl文件后才找到该位置)。
2、生成Vavido工程后运行SDK软件,直接新建一个应用工程,选择lwIPEcho Server软件DEMO,如下图示:
302.jpg
303.jpg
304.jpg
按Finish完成,将在工程浏览区看到新生成的eth_test和eth_test_bsp工程。
3、工程的修改,打开工程浏览区eth_test –> src–> main.c文件,右键菜单选择显示行号,如下图示:
305.jpg
然后在第29行  #include<stdio.h>
后面的空行插入下列代码:
#include <xil_io.h>
#include "sleep.h"
在第129行   unsigned char mac_ethernet_address[] =
    { 0x00, 0x0a, 0x35, 0x00, 0x01, 0x02 };
后面的空行插入下列代码:
       Xil_Out32(0xE000A000 + 0x244,0x00080000);
       Xil_Out32(0xE000A000 + 0x248,0x00080000);
       Xil_Out32(0xE000A000 + 0xC,0xFFF70008);
       sleep(1);
打开工程浏览区eth_test_bsp –> ps7_cortexa9_0 –> libsrc  –> lwip202_v1_2 –> src –> contrib –>ports –> xilinx –> netif –> xemacpsif_physpeed.c 文件, 如下图示:
306.jpg
在519行找到static u32_tget_Marvell_phy_speed(XEmacPs *xemacpsp, u32_t phy_addr)函数,把第592~603行替换为下面代码:
       XEmacPs_PhyRead(xemacpsp, phy_addr, 0x1f,&status_speed);
       if ( (status_speed & 0x0040) != 0)/*1000Mbps */
                     return 1000;
       else if ( (status_speed & 0x0020) !=0)/* 100Mbps */
                     return 100;
       else                            /*10Mbps */
                     return 10;
/*
       XEmacPs_PhyRead(xemacpsp,phy_addr,IEEE_SPECIFIC_STATUS_REG,
                                   &status_speed);
       if (status_speed & 0x400) {
              temp_speed = status_speed &IEEE_SPEED_MASK;
              if (temp_speed == IEEE_SPEED_1000)
                     return 1000;
              else if(temp_speed ==IEEE_SPEED_100)
                     return 100;
              else
                     return 10;
       }       */
(注: 以上代码参考MYC_C7Z01020入门指导手册.pdf第57~58页)
最后按ctrl+s保存文件后工程自动进行编译。
4、在硬件上运行程序,首先连接到下载线、串口线、网线到开发板,然后上电,在 软件左侧工程浏览区下,点击选中eth_test工程, 然后右键选择 Run As > 1Launch on
Hardware (System Debugger) 就可以把工程生成 的 eth_test.elf 可执行文件将加载到 开发板上运行。在串口终端上可以看到lwIPEcho Server工程自动分配的IP 地址,如下图示:
307.jpg
由于我们是把网线一头连开发板,另外一头直接连的电脑,需要在电脑的网卡属性指定IP为同一网段,否则电脑无法PING通开发板,如下图示:
308.jpg
309.jpg
我们可以在windows的命令窗口用ping 和telnet命令进行功能测试,所用命令如下图示:
310.jpg
输入telnet命令时有可能提示telnet不是内部或外部命令,这可能是telnet服务器或者客户端没有开启的原因,打开控制面板–>程序–> 程序和功能–> 打开或关闭Windows功能,找到Telnet 客户端–>点击勾选–>确定,如下图示:
311.jpg
连接上进入Telnet界面所有输入的字符都会回显出来,如果要退出Telnet界面,输入ctrl+]  然后在telnet 命令行输入quit  就可以退出回到命令行窗口。
5、性能测试,TCP/IP和UDP/IP的性能测量工具一般使用Iperf工具,它能够提供网络吞吐率信息,以及震动、丢包率、最大段和最大传输单元大小等统计信息;从而能够帮助我们测试网络性能,定位网络瓶颈。要用Iperf工具进行性能测试,需要在主机端和客户端分别运行Iperf。首先我们需要下载一个Windows版本的Iperf工具,我们使用的版本为iperf-2.0.9,为了方便我已上传见附件,根据所用PC是32位还是64位解压对应的压缩包,然后把文件夹下所有文件复制到%systemroot%目录,如WIN64位为C:\Windows目录。
再按上面第2步新建一个工程,在软件模板里选择LwIP TCP Perf Client或者LwIP UDP Perf Client, 这里是让板卡运行Iperf工具客户端, PC运行Iperf工具主机端。同样按第3步加上移植代码修改(main.c和xemacpsif_physpeed.c同样位置修改),然后保存后自动进行编译。在WINDOWS的命令窗口输入iperf –s –i 5 –w 2M,然后在SDK左侧工程区点击perf工程,再右键选择Run As -> 1 Launch on Hardware (System Debugger)下载程序到开发板上运行,然后可以看到测试结果如下图示:
312.jpg
这里注意下Perf Client应用工程连接的主机IP要在工程目录src—tcp_perf_client.h文件的102行:#define TCP_SERVER_IP_ADDRESS "192.168.0.100"  根据实际主机IP来修改,并且一定要先在WINDOWS的命令窗口输入命令运行iperf服务器后在下载程序到开发板上,顺序反了iperf服务器连接不上看不到测试结果。
上图是LwIP TCP Perf Client应用工程的测试TCP速度的结果,可以用LwIP UDP Perf Client工程来测试UDP速度,方法类似,这里不再赘述。
二、Linux环境下以太网测试
MYD-C7Z010/20开发板出厂时已经烧录有LINUX系统,接上串口上电可以看到系统启动时打印信息,然后我们可以在串口终端输入账号root, 不用密码就可以登录系统。
在WINDOWS的命令窗口输入iperf -s -i 5 -w 2M 先启动iperf服务器。
然后在串口终端顺序输入下列命令:
ifconfigeth0 up
ifconfigeth0 192.168.0.102 netmask 255.255.255.0
iperf –c 192.168.0.100
这时可以看到测试结果如下图示:
313.jpg
如果是测试UDP速度, 在WINDOWS的命令窗口输入iperf -s -u -w 2M 先启动iperf服务器。开发板用iperf –c 192.168.0.100 –u 启动iperf客户端,具体iperf命令参数大家可通过iperf --help得到,并且可以通过设置不同参数看到对速度的影响关系。
最后有个问题是千兆的PHY芯片我这认别到的都是100M, 按理说现在不任是电脑还是路由器基本都是千兆的网口了,具体原因还需进一步调查研究。
三、主要参考资料
1、赛灵思:xapp1026 LightWeightIP Application Examples
2、米尔科技: MYC_C7Z01020入门指导手册.pdf
iperf-2.0.9.rar (3.34 MB, 下载次数: 9)
全部回复 2
  • 36 主题
  • 121 帖子
  • 848 积分
身份:LV3 中级技术员
E币:476
  • 8 主题
  • 12 帖子
  • 429 积分
身份:LV2 初级技术员
E币:317
本帖最后由 wdzfd 于 2019-11-22 09:12 编辑

多谢支持,上传了工程给有需要的童鞋可以下载。
eth_test.rar (13.99 MB, 下载次数: 2)
回复楼主
您需要登录后才可以评论 登录 立即注册
交流单片机MCU、处理器、ARM技术、DSP,以及嵌入式系统硬件与软件的平台
  • 帖子 5176
  • 回复 5698
举报
内容系网友发布,其中涉及到安全隐患的内容系网友个人行为,不代表面包板社区观点
请点击举报理由
关闭 站长推荐上一条 /3 下一条
  • 返回顶部