[米联客-安路飞龙DR1-FPSOC] UDP通信篇连载-09 ICMP层程序设计

软件版本:Anlogic -TD5.9.1-DR1_ES1.1

操作系统:WIN10 64bit

硬件平台:适用安路(Anlogic)FPGA

实验平台:米联客-MLK-L1-CZ06-DR1M90G开发板

板卡获取平台:https://milianke.tmall.com/

登录"米联客"FPGA社区 http://www.uisrc.com 视频课程、答疑解惑!

 

5 上板调试

5.1 硬件连接

本次实验的物理层选择千兆以太网RJ45网口来验证该UDP协议栈的功能。首先将开发板的RJ45网口通过网线和PC连接,插入开发板的电源和下载器,硬件连接图如图5.1所示。打开电源开关,等待网口的黄灯亮起,PHY芯片自协商成功。可以进行下一步操作。

5.2 PC设置

5.2.1 PC地址查询

为实现以太网的各种通信测试,我们需要先查找到PC端以太网网卡的物理地址和IP地址,以进行组包发送和对结果进行验证。

windows开始菜单界面的搜索框中输入cmd,找到命令提示符并打开,如图5.2所示。

 

5.2 搜索并打开命令提示符

 

打开命令提示符界面后,在界面中输入"ipconfig -all",得到网卡的各种信息,如图所示,其中"CC-28-AA-06-33-56"为网卡的MAC地址,其数据格式为16进制,"169.254.81.184"为网卡的IP地址,其数据格式为10进制。子网掩码"255.255.0.0"表示若要使FPGAPC之间建立正常的以太网通信,FPGAPCIP地址的高位的两个字节必须相等,如"169.254.xx.xx"

接下来输入"arp -a"查询PC网卡中ARP链表缓存的地址,192开头的地址为WIFI网卡的IP地址,169开头的地址为该PC上网卡的IP地址,通过将IP地址和MAC地址绑定到ARP静态链表上,可以使用ARP功能就能实现以太网UDP通信,由于本UDP协议栈实现了ARP应答和主动请求功能,不需要绑定地址。可以看到,网卡上并没有缓存其它动态地址。

5.2.2 网络调试软件

本次实验需要用到三种网络调试软件,分别为wiresharknetassist、科来数据包生成器,接下来介绍这几款软件的界面和功能。

wireshark的界面如图所示,它可以抓取到不同类型的数据包如ARP包、ICMP包、UDP包,并显示除帧头和校验位以外的数据包的全部内容。

 

Netassist的界面如图所示,该工具可以通过绑定IP地址,对UDP数据进行发送或接收,并且显示接收的具体内容和收发数据的计数。

科来数据包生成器的界面如图所示,它可以组任意类型的数据包并可以将不同的数据包按照一定的间隔顺序发送。

5.3 UDP回环验证

netassist连续发送数据给FPGAFPGA将接收到的数据传回,以此测试UDP协议栈的ARP应答功能以及UDP通信功能。

在代码顶层文件中将接收到的UDP数据包有效数据缓存中,待udp_txtbusy信号为低时,发送一次请求,握手成功后,发送接收到的一包数据,这样就能实现UDP数据的回环。在顶层中设置FPGAMAC地址为48'h01_23_45_67_89_abIP地址为169.254.81.180

5.3.1 wireshark抓取PC发送的ARP广播

由于ARP链表中没有缓存FPGA的地址,PC在发送数据时,找不到IP地址对应的MAC地址,于是PC会发送ARP广播,请求获取FPGA上设置的物理地址。先不要将程序下载进芯片中,通过wireshark抓取ARP广播,抓取到的数据包信息如图所示。

由上图可以得知,发送方发送的目的MAC地址为48'hff_ff_ff_ff_ff_ff,类型为16'h0806,操作码为16'h0001,表示ARP请求,请求的IP地址为169.254.81.180。接着将程序下载进FPGA中,重新发送数据,wireshark抓取到的数据包如图所示。

可以看到,FPGAPC发送的ARP广播回复了一个ARP应答包,将自己的MAC地址发送出去,操作码为16'h0002,表示ARP应答。

5.3.2 netassist收发UDP数据包

使用netassist接收和发送的数据如图所示,可以看出每次发送和传回的数据内容保持一致,并且接收和发送的数据包数量和有效数据数量均相等,表示程序中UDP发送和接收的部分功能正确。

5.3.3 通过PING命令发送ICMP请求

打开WINDOWS命令提示符界面,输入"ping 169.254.81.180 -t"命令,PC会向FPGA持续发送ICMP请求包,按住键盘上的control + c停止发送,如图。

 

通过wireshark抓取到的ICMP请求包如图,其中type字段数据为8'h08code字段数据为8'h00,表示主动请求。

FPGA接收到PC发送的ICMP请求包,会回复一个ICMP应答包,通过wireshark抓取到的ICMP应答包如图所示,其中type字段数据为8'h00code字段数据为8'h00,表示回显应答。

UDPICMP数据包都要经过IP层进行发送,为验证它们在发送时是否冲突,我们在操作PC在发送ICMP请求的同时发送UDP数据包给FPGAwireshark可以抓取到ICMP包和UDP包,在netassist界面中,接收和发送的UDP包数量和有效数据数量相等,说明由于在发送端使用了FIFO缓存数据,二者在发送时并无冲突。

5.4 FPGA主动发送验证

修改顶层文件,每隔一定的时间,FPGA主动发送一帧数据给PCFPGA会先发送ARP广播给PCPC收到广播后,将自己的MAC地址通过ARP应答包发送给FPGAFPGAPCMAC地址存入cache中,开始对PC发送数据帧。PC端通过科来数据包生成器发送PAUSE帧给FPGA,以实现流量控制效果。

5.4.1 FPGA发送ARP主动请求

将程序下载进FPGA中,FPGA会发送ARP广播包给PCwireshark抓取的ARP广播内容如图所示。

 

PC收到广播后,将自己的MAC地址打包成ARP应答包发送给FPGAwireshark抓取的ARP应答包的内容如图所示。之后FPGA开始发送数据帧到PC

 

5.4.2 通过PAUSE帧控制流量

通过科来数据包生成器组PAUSE帧,以固定间隔发送给FPGAPAUSE帧的内容如图所示。

 

通过ILA抓取FPGA中的暂停标志信号pause_flag,可以看到pause_flag成功拉高一段时间。

米联客UDP协议栈的所有功能验证完毕

posted @ 2024-08-09 19:02  米联客(milianke)  阅读(35)  评论(0编辑  收藏  举报