ZC706千兆网测试(ZYNQ,FreeRTOS,Echo,消息队列,QSPI启动,FSBL固化,lwIP,TCP,RGMII,Xilinx)

初学 FreeRTOS:
(1)使用 ZC706 开发板测试 PS 端网口(Echo,lwIP协议栈);
(2)配合操作 PL 端 LED(直接驱动和使用消息队列两种方式);
(3)PS 端串口 UART 打印调试信息;
(4)QSPI 固化(Dual Quad SPI Parallel 8 bit模式)。

ZC706中,MAC 控制器与 PHY 通过 RGMII(Reduced Gigabit Media Independent Interface)接口进行连接,实现千兆网。

一、工程概述

1.开发板配置

  使用 Xilinx ZYNQ 开发板 ZC706,默认配置 ARM 后即可使用PS 端网口、串口和 QSPI,放置 AXI GPIO 的 IP 核驱动 PL 端的 4 个 LED。
在这里插入图片描述

  ARM端配置如下图所示,以5处的ARM-A9为核心,使用1处的UART1打印调试信息,使用2处的网口0进行以太网通信,使用3处的AXI GP(General Port)Master通用主设备接口连接PL端的AXI GPIO,最后使用4处的QSPI固化程序,烧录Boot文件。
在这里插入图片描述

2.SDK程序

  上述工程综合、布局布线并生成bit流后,导出硬件。
  新建应用工程Application Project,选择 OS Platform 平台为 freertos10_xilinx(Vivado及SDK版本2018.2,低版本的可能是freertos9_xilinx),选择Next,选中“FreeRTOS lwIP Echo Server”。
在这里插入图片描述

在这里插入图片描述

  新建完成后,即可进行最基础的网络通信了。
  这里注意,默认设置的是DCHP动态主机配置协议,需要开发板和电脑都连接到一个路由器上。如果直接使用网线连接开发板和电脑,则启用IPv4协议,默认配置的IP地址为 192.168.1.10,子网掩码 255.255.255.0,网关 196.128.1.1,如果想要更改默认配置,可以在 main.c 文件的 main_thread() 主线程中修改,如下所示:

xil_printf("ERROR: DHCP request timed out\r\n");
xil_printf("Configuring default IP of 192.168.1.10\r\n");
IP4_ADDR(&(server_netif.ip_addr),  192, 168, 1, 10);
IP4_ADDR(&(server_netif.netmask), 255, 255, 255,  0);
IP4_ADDR(&(server_netif.gw),  192, 168, 1, 1);

  LWIP 是一个小型开源的 TCP/IP 协议栈,支持IPv4、IPv6、TCP、UDP、DHCP等。
• IGMP 协议,用于网络组管理,可以实现多播数据的接收
• Internet 协议(IP),包括 IPv4 和 IPv6,支持 IP 分片与重装,包括通过多个网络接口的数据包转发
• 用于网络维护和调试的 Internet 控制消息协议(ICMP)
• 用户数据报协议(UDP)
• 传输控制协议(TCP)拥塞控制,往返时间(RTT)估计,快速恢复和重传
• DNS,域名解析
• SNMP,简单网络管理协议
• 动态主机配置协议(DHCP)
• 以太网地址解析协议(ARP)
• AUTOIP,IP 地址自动配置
• PPP,点对点协议,支持

3.网络设置

  使用网线直接连接ZC706开发板和计算机网口,配置计算机IP地址为192.168.1.11,子网掩码255.255.255.0,网关192.168.1.1,其中IP地址的最后一处可以更改为其他值,但是不能和开发板的相同。
在这里插入图片描述

在这里插入图片描述

4.开启监听测试

  使用SecureCRT软件监听,除此之外,使用其他网口助手也可以。
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二、工程测试

1.测试Echo官方例程

  先打开串口,波特率115200,下载官方例程到ZC706开发板,连接SecureCRT_CN,初始化工程中串口打印信息如下:配置DCHP动态主机协议超时,自动转为IPv4,将板子的IP地址配置为192.168.1.10,子网掩码255.255.255.0,网关192.168.1.1,使用端口7。
在这里插入图片描述

  在SecureCRT_CN界面输入字符或字符串,回车,通过网口向开发板发送数据,开发板会返回同样的数据,测试正确。

在这里插入图片描述

2.分析源码

2.1 main函数

  打开main.c文件,找到main()函数。在main函数中创建了一个线程,传入的参数依次为线程名(调试用)、函数指针、函数需要的参数、需要的堆栈大小、优先级。
  按照如下配置,调用了main_thread函数,不需要传参(用0或NULL),堆栈大小由#define定义为1024,优先级为2。

int main()
{
   
	sys_thread_new("main_thrd", (void
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值