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

news2025/3/2 1:30:35

软件版本: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 硬件连接

5.2 PC设置

5.2.1 PC地址查询

5.2.2 网络调试软件

5.3 UDP回环验证

5.3.1 wireshark抓取PC发送的ARP广播

5.3.2 netassist收发UDP数据包

5.3.3 通过PING命令发送ICMP请求

5.4 FPGA主动发送验证

5.4.1 FPGA发送ARP主动请求

5.4.2 通过PAUSE帧控制流量

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”表示若要使FPGA和PC之间建立正常的以太网通信,FPGA与PC的IP地址的高位的两个字节必须相等,如”169.254.xx.xx”。

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

5.2.2 网络调试软件

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

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

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

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

5.3 UDP回环验证

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

在代码顶层文件中将接收到的UDP数据包有效数据缓存中,待udp_tx的tbusy信号为低时,发送一次请求,握手成功后,发送接收到的一包数据,这样就能实现UDP数据的回环。在顶层中设置FPGA的MAC地址为48’h01_23_45_67_89_ab,IP地址为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抓取到的数据包如图所示。

可以看到,FPGA向PC发送的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’h08,code字段数据为8’h00,表示主动请求。

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

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

5.4 FPGA主动发送验证

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

5.4.1 FPGA发送ARP主动请求

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

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

5.4.2 通过PAUSE帧控制流量

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1987968.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

github技巧和bug解决方法短篇收集

有一些几句话就可以说明白的观点或者解决的的问题,小虎单独收集到这里。 Commits没有算入每天的activity fork的仓库是不算的。 Commits made in a fork will not count toward your contributions. 参考: Contribution activity not shown for github…

win7一键修复所有dll缺失详细方法,7个dll修复方法深度解析(2024)

dll文件是一种包含函数和其他关键信息的文件,供 Windows 应用程序使用。虽然大多数普通用户对.dll 文件的具体工作原理并不熟悉,但这些文件对于系统应用来说是至关重要的。通常情况下,人们在遇到因 DLL 文件缺失或损坏而导致的错误时&#xf…

Vue3+Ts项目中经常遇到导入组件,vscode报无法找到模块xxx,xxx隐式拥有 “any“ 类型解决办法~

1、报错截图: 2、解决办法:在确保路径正确的情况下,你会在 src 目录下找到一个名为 env.d.ts 的文件(或者类似的名称)。在这个文件中,你可以声明 .vue 文件的模块类型。例如:(这告诉 TypeScript…

探索Cohere的Prompt Tuner:革新你的提示优化工具

在今天的文章中,我们将深入探讨Cohere的Prompt Tuner。这是一款在你指尖的提示优化工具,至少这是他们所宣称的。Prompt Tuner的主要理念是,它提供了一种最简化、最标准化的方式来生成你所需要的提示。而最棒的部分是,你不需要成为…

vtkConnectivityFilter提取连通区域中的问题

直接使用vtkConnectivityFilter提取连通区域&#xff0c;渲染上没问题&#xff0c;但是打印出polydata中的点数&#xff0c;发现跟原始数据是一致的。 for (int i 0; i < numRegions; i){vtkSmartPointer<vtkConnectivityFilter> connectivityFilter vtkSmartPointe…

嵌入式人工智能(树莓派4B基础实验代码等)

本专栏收录了近40个实验,含全部实验代码,都已经打包。 1、简介 本实验平台为树莓派4B,处理器4核ARMV8架构-A72,内存8G版本,SD卡容量为64G。操作系统版本lsb_release -a 操作系统内核为uname -a 本专栏收录了树莓派系统的基本知识,环境基本配置,常用Linux系统操作、基…

Ecovadis丨Ecovadis认证丨Ecovadis评估

EcoVadis 是以下这样的一个存在和具有以下这些特点等&#xff1a; 背景方面&#xff1a; 它源自法国 &#xff0c;前身由“携手实现可持续发展 - 全球化学联盟&#xff08;TFS - CI&#xff09;”、“联合国全球契约组织&#xff08;UN Global Compact&#xff09;”、IPE公众…

<数据集>腐烂水果识别数据集<目标检测>

数据集格式&#xff1a;VOCYOLO格式 图片数量&#xff1a;3304张 标注数量(xml文件个数)&#xff1a;3304 标注数量(txt文件个数)&#xff1a;3304 标注类别数&#xff1a;6 标注类别名称&#xff1a;[good apple, bad apple, good orange, bad orange, good banana, bad …

从“抠图”到“抠视频”,Meta上新AI工具SAM 2。

继2023年4月首次推出SAM&#xff0c;实现对图像的精准分割后&#xff0c;Meta于北京时间2024年7月30日推出了能够分割视频的新模型SAM 2&#xff08;Segment Anything Model 2&#xff09;。SAM 2将图像分割和视频分割功能整合到一个模型中。所谓“分割”&#xff0c;是指区别视…

Python 如何处理命令行参数(argparse)?

在Python编程中&#xff0c;处理命令行参数是一项非常重要的技能&#xff0c;特别是在编写可执行脚本或工具时。Python的标准库提供了一个强大的模块来处理命令行参数&#xff0c;即argparse模块。 一、argparse模块简介 argparse模块是Python标准库中用于解析命令行参数的模…

达梦数据库的系统视图v$mem_pool

达梦数据库的系统视图v$mem_pool 达梦数据库的V$MEM_POOL视图主要用于显示所有内存池的信息。通过查询这个视图&#xff0c;用户可以监控数据库中各个内存组件的使用状况&#xff0c;包括内存池的大小、使用情况等。这有助于用户判断内存池是否空闲或紧张&#xff0c;从而进行…

使用消息队列完成两个进程之间相互通信

/*执行两个程序&#xff0c;程序间通过一个消息队列实现同时收发消息*/ #include <myhead.h>// 消息队列的大小 #define SIZE (sizeof(struct msgbuf) - sizeof(long)) // 消息队列结构体 struct msgbuf {long mtype; // 消息类型char mtext[1024]; // 消息内容 };…

微服务面试必读:拆分、事务、设计的综合解析与实践指南

谈谈你对微服务的理解&#xff0c;微服务有哪些优缺点&#xff1f; 首先&#xff0c;微服务是对传统单体架构的一种优化。当一个单体架构随着业务的增加而变得臃肿时&#xff0c;微服务通过将业务拆分成小的独立单元来进行优化。 微服务的优点有以下几点&#xff1a; 业务清…

SpirngCloud+Vue3通过id批量修改某一个字段的值

♥️作者&#xff1a;小宋1021 &#x1f935;‍♂️个人主页&#xff1a;小宋1021主页 ♥️坚持分析平时学习到的项目以及学习到的软件开发知识&#xff0c;和大家一起努力呀&#xff01;&#xff01;&#xff01; &#x1f388;&#x1f388;加油&#xff01; 加油&#xff01…

MiniCPM 多模态VLM图像视频理解代码案例

参考: https://huggingface.co/openbmb/MiniCPM-V-2_6 https://github.com/OpenBMB/MiniCPM-V 效果很好,20g现场可以运行: 下载模型 export HF_ENDPOINT=https://hf-mirror.comhuggingface-cli download --resume-download --local-dir-use-symlinks False openbmb/MiniC…

公司居然还在用zookeeper,吓得我马上学习了相关命令

zookeeper的数据结构优点类似linux系统中的文件系统&#xff0c;例如/opt/mysql&#xff0c;/usr/local&#xff0c;都是可以有树形结构的&#xff0c;但是又有些不同&#xff0c;因为他的节点也是可以存储信息的&#xff0c;例如在linux中/usr/local 本来是个文件夹&#xff0…

STM32G474CBT6之HAL_RCC_ClockConfig()问题?

STM32G474CBT6之HAL_RCC_ClockConfig()问题&#xff1f; 很多人在用HAL库时&#xff0c;都用到了寄存器&#xff0c;特别是在数字电源案例中。我也在想&#xff0c;有了标准库&#xff0c;为什么要搞HAL库&#xff1f;HAL库降低了入门的门槛&#xff0c;但在实际应用中&#x…

24/8/6算法笔记 支持向量机

支持向量机&#xff08;Support Vector Machine, SVM&#xff09;是一种监督学习算法&#xff0c;主要用于分类和回归任务。它基于统计学习理论中的结构风险最小化原理&#xff0c;通过找到数据点之间的最优边界来实现模型的泛化能力。 import numpy as np import matplotlib.…

Android SurfaceFlinger——Fence流转状态(五十)

明白了 fence 的基本原理&#xff0c;我们可以进一步的探索整个 SurfaceFlinger 的中 fence 在其中处于什么角色。 一、流转状态 从启动到屏幕的第一帧的渲染&#xff0c;fence 是不会有任何效果的。因为此时 fence 还没有经过 hwc_set 给 fence 进行赋值。但是到了第二帧开始…

《知识点扫盲 · 请求类型 ContentType》

&#x1f4e2; 大家好&#xff0c;我是 【战神刘玉栋】&#xff0c;有10多年的研发经验&#xff0c;致力于前后端技术栈的知识沉淀和传播。 &#x1f497; &#x1f33b; CSDN入驻不久&#xff0c;希望大家多多支持&#xff0c;后续会继续提升文章质量&#xff0c;绝不滥竽充数…