谁能提供一份特权同学的,fpga与pc机以太网通信,FPGA就一定能搞定之TCP客户端模式传输实例中的代码实例?

以太网,FPGA就一定能搞定之TCP客户端模式传输实例—下
以太网,FPGA就一定能搞定之TCP客户端模式传输实例—下
以太网,FPGA就一定能搞定系列之UDP传输实例
本系列博文节选自特权同学的FPGA开发电子书《SF-CY3 FPGA套件开发指南》。
最新设计文档下载地址:
6 板级调试
&&&&&&&&&&&&&&& 运行该实例软件,打开TCP调试工具。如图所示,此时只是运行作为客户端的FPGA软件工程,而作为服务器的Labview调试工具还未启动。客户端在不断的侦听,试图建立连接,但却一直处于“超时”状态。
&&&&&&&&&&&&&&& 如图所示,设置Labview调试工具工作于服务器模式,并且启动运行。 作为客户端的FPGA产生了“连接中断”,表示连接成功。
&&&&&&&&&&&&&&& 输入一串“发送数据”,点击“发送”按钮,客户端打印接收到的数据,同时取反后发送回去。随后一串被取反的“发送数据”出现在TCP调试工具的“接收数据”中。
&&&&&&&&&&&&&&& 如图所示,在我们前面进行通信前,就已经打开的“科来网络分析系统”,定位到TCP通信监测栏。我们可以找到192.168.1.101(本实例的FPGA客户端IP地址)和192.168.1.103(本实例的PC服务器IP地址)两个节点对应端口6340的数据包列表。
如图所示,数据包按照时间顺序排列,这里的头3个数据包,即建立连接的握手过程。
&&&&&&&&&&&&&&& 如图所示,这里放大3个握手数据包的“概要”信息。第一次握手,我们看到客户端首先发送的序列号为6511;第二次握手,服务器返回序列号和确认号6512(即客户端的序列号6511加1);第三次握手,客户端再次发送序列号6512和确认号(第二次握手时,服务器发出的序列号加1)。这便是前面理论部分我们所说的TCP建立连接的3次握手机制。
&&&&&&&&&&&&&&& 此外,大家可以注意一下3此握手数据帧中,TCP协议的标志字节的各个位定义情况。前面理论中提到第一次握手是SYN=1,第二次是SYN=1且ACK=1,第三次握手则是ACK=1,而实际情况也的确如此。&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&& &在科来网络分析系统中我们可以看到收发双发的“数据流”,如图所示。
&&&&&&&&& 在TCP调试工具上,我们切换到ASCII码显示发送和接收数据,则和前面显示的字符串一致。
最后,我们可以来看看断开连接的握手过程。
3次握手过程,大家可以注意第一次终止连接发起方发出FIN,第二次另一方返回FIN+ACK,第三次终止连接方返回ACK完成断开。
关注微信公众号【技术分享】以太网,FPGA就一定能搞定系列之概述篇
以太网,FPGA就一定能搞定系列之概述篇
本系列博文节选自特权同学的FPGA开发电子书《SF-CY3 FPGA套件开发指南》。
最新设计文档下载地址:/s/1em79m
&&&&&&&& 如图所示,SF-NET子板围绕CH395芯片,一端通过32PIN的OUTTPIN连接器连接到SF-CY3核心板的FPGA上进行数字通信,另一端通过RJ45水晶头连接器连接到以太网中。CH395是一颗集成了以太网MAC和PHY的专用芯片,功能强大,能够进行10M/100M的以太网传输。在数字端,CH395可以使用简单的SPI或UART接口和其他处理器进行数据交互。CH395的I/O电压使用3.3V,由SF-CY3核心板直接供给;内核电压使用1.8V,需要通过一颗LDO转换得到。此外,CH395还需要外部30MHz的晶体时钟输入,这在图中未示意,大家可以参看电路图。
& & & & SF-NET子板套件的全家福如图所示。
最新设计文档下载地址:/s/1em79m
2 模块电路介绍
&&&&&&&& CH395是以太网协议栈管理芯片,用于单片机系统进行以太网通讯。
&&&&&&&& CH395 芯片自带10/100M 以太网介质传输层(MAC)和物理层(PHY),完全兼容IEEE802.3
10/100M协议,内置了PPPOE、IP、DHCP、ARP、ICMP、IGMP、UDP、TCP等以太网协议栈固件。嵌入式处理器可以方便的通过CH395芯片进行网络通讯。
&&&&&&&& CH395支持三种通讯接口:8位并口、SPI接口或者异步串口,单片机/DSP/MCU/MPU等控制器可以通过上述任何一种通讯接口控制CH395芯片进行以太网通讯。我们使用的CH395Q封装只支持SPI和UART通信。
&&&&&&&& 下图为CH395的应用框图。
&&&&&&&& CH395芯片的主要特性如下。
● 内部自带以太网介质传输层(MAC)和物理层(PHY)。
● 支持10/100M,全双工/半双工自适应,兼容802.3 协议。
● 支持多种模式的地址过滤。
● 与 802.3x 全双工流控和半双工背压流控完全兼容。
● 支持MDI/MDIX 线路自动转换。
● 内置TCP/IP协议簇,支持IPv4、DHCP 、ARP、ICMP、IGMP、UDP、TCP协议。
● 内置PPPOE(仅CH395Q)协议,支持PAP和CHAP认证。
● 提供4个独立的Socket对,可以同时进行数据收发。
● 提供高速8位被动并行接口,支持连接到单片机的并行数据总线。
● 提供最高30MHz速度的SPI设备接口,支持连接到单片机的SPI串行总线。
● 提供最高3Mbps速度的异步串口,支持连接到单片机的串行口,支持通讯波特率动态调整。
● 支持低功耗模式。
● 内置24K RAM,可用于以太网数据收发。每传输通道独立拥有2KB发送缓冲区和4KB的接收缓冲区。
● 提供LQFP64M和LQFP128无铅封装,兼容RoHS。
3 装配示意图
&&&&&&&& 如图所示,SF-NET子板的P5插座连接SF-CY3核心板的P3插座,SF-NET子板的P6插座用于连接网线。
4 实验效果展示图
&&&&&&&& 如图所示,这是使用labview调试工具进行以太网数据收发的界面。
关注微信公众号【技术分享】以太网,FPGA就一定能搞定系列之UDP传输实例
以太网,FPGA就一定能搞定系列之UDP传输实例
本系列博文节选自特权同学的FPGA开发电子书《SF-CY3 FPGA套件开发指南》。
最新设计文档下载地址:/s/1em79m
&&&&&&&& 本实例的硬件系统和前面两个实例一样,只是在CH395芯片的应用上使用了不同的传输模式。本实例要传输的是UDP协议的IP包,只要设置CH395工作于UDP模式,设置好收发端口号,就可以收发UDP协议的IP包了。通过这个实例大家可以初步掌握UDP协议的传输和格式。
2 UDP协议解析
&&&&&&&& UDP不提供可靠性:它把应用程序传给IP层的数据发送出去,但是并不保证它们能到达目的地。UDP帧是IP帧的一种,它的协议格式如图所示。IP首部的协议字段数据必须为0x11(即10进制的17);在原有的IP数据报中,又分为了UDP首部和UDP数据两部分;UDP首部有2个字节的源端口号、2个字节的目的端口号、2个字节的UDP长度和2个字节的UDP校验和。
UDP是一个简单的,不可靠的,面向数据报文的运输层协议,传输速度较快,不能保证数据能达到目的地,必须由应用层来保证传输的可靠稳定。
如图所示,FPGA向CH395写入若干字节数据流后,CH395数据流封装在UDP数据部分进行发送。UDP一包可以发送的最大长度为1472字节,如果FPGA写入的数据流长度大于1472字节,CH395会将数据流封装成若干个UDP包进行发送且每包成功发送后都会产生SINT_STAT_SEND_OK中断。FPGA每次写入的字节长度不得大于发送缓冲区长度(2KB),且收到SINT_STAT_SENBUF_FREE中断后才可以进行下一次写数据。
当CH395接收到UDP报文后,将UDP数据复制到socket接收缓冲区中并产生SINT_STAT_RECV中断,FPGA收到此中断后,可以发送命令CMD_GET_RECV_LEN_SN来获取接收缓冲区数据的长度,然后发送命令CMD_READ_RECV_SN来读取缓冲区的数据。FPGA可以一次将所有数据读出也可以只读出部分数据,由于UDP模式下CH395无法提供流控,建议接收到的数据及时快速的读完,以免被后续的数据覆盖。
3 UDP模式介绍
UDP是一个简单的,不可靠的,面向数据报文的运输层协议,传输速度较快,不能保证数据能达到目的地,必须由应用层来保证传输的可靠稳定。
如图所示,FPGA向CH395写入若干字节数据流后,CH395数据流封装在UDP数据部分进行发送。UDP一包可以发送的最大长度为1472字节,如果FPGA写入的数据流长度大于1472字节,CH395会将数据流封装成若干个UDP包进行发送且每包成功发送后都会产生SINT_STAT_SEND_OK中断。FPGA每次写入的字节长度不得大于发送缓冲区长度(2KB),且收到SINT_STAT_SENBUF_FREE中断后才可以进行下一次写数据。
当CH395接收到UDP报文后,将UDP数据复制到socket接收缓冲区中并产生SINT_STAT_RECV中断,FPGA收到此中断后,可以发送命令CMD_GET_RECV_LEN_SN来获取接收缓冲区数据的长度,然后发送命令CMD_READ_RECV_SN来读取缓冲区的数据。FPGA可以一次将所有数据读出也可以只读出部分数据,由于UDP模式下CH395无法提供流控,建议接收到的数据及时快速的读完,以免被后续的数据覆盖。
4 TCP/UDP端口介绍
TCP和UDP服务通常有一个用户/服务器的关系,例如,一个Telnet服务进程开始在系统上处于空闲状态,等待着连接。用户使用Telnet用户程序与服务进程建立一个连接。用户程序向服务进程写入信息,服务进程读出信息并发出响应,用户程序读出响应并向用户报告。因而,这个连接是双工的,可以用来进行读写。
TCP或UDP连接唯一地使用每个信息中的如下四项进行确认:
●& 源IP地址:发送包的IP地址。
●& 目的IP地址:接收包的IP地址。
●& 源端口:源系统上的连接的端口。
●& 目的端口:目的系统上的连接的端口。
&&& 端口指网络中面向连接服务和无连接服务的通信协议端口,是一种抽象的软件结构,包括一些数据结构和I/O(基本输入输出)缓冲区。它是一个软件结构,被客户程序或服务进程用来发送和接收信息。一个端口对应一个16比特的数。
电脑一共有65535个端口,1-1024属于保留端口,是标准服务端口,是一些系统服务的端口,随便用的话,会起冲突,导致服务无法运行,如21,。1024后面的就属于自由端口了,供后续开发的小程序使用。
上面的描述可能有些学术化了,不是很容易理解消化。我们可以简单的打个比方来说明TCP/UDP的端口为何物。如图所示,这是一个港口,布满了密密麻麻又井然有序的集装箱。我相信对于这样一个港口,对于集装箱的摆放一定划分了很多区域或者打上了很多标签,便于分类和管理。如果把以太网帧比喻为一个个装满货物的集装箱,那么港口的区域划分或者标签张贴就好比TCP/UDP的端口定义,端口的作用应该就是为了便于管理和分类,避免一个新的以太网帧到来时,所有的应用程序一拥而上。TCP/UDP端口保证了“一个萝卜一个坑“式的井然有序。
5 软件设计
本实例软件流程如图所示。UDP模式设置中需要设置目的主机的IP地址,即PC机的IP地址192.168.1.103;并且设置目的端口为8000(10进制),源端口为5000(10进制)。随后在主循环中等待PC端来的一个UDP帧,则FPGA打印接收帧数据,将所有数据取反后发回给PC机。那么随后的板级调试,我们需要率先在PC端制作一个端口号对应的UDP帧发给FPGA端,随后在PC端观察数据取反后的UDP帧是否返回了。
6 板级调试
&&&&&&&& 下载sof文件,在线运行EDS软件工程。随后我们打开“科来软件分析系统”,按照前面一个实例新建一个IP包,如图所示,该IP包的源主机是PC端,目的主机是我们的FPGA端,因此我们需要相应的设定源主机和目的主机的MAC地址和IP地址。另外,这个IP包是UDP协议格式的,因此我们也需要设定上层协议值为17(10进制)。在FPGA端,我们设置源主机(FPGA)的端口号为5000,目标主机(PC)的端口号为8000;因此,在PC端则恰恰相反,我们设定源主机端口号为8000,目的主机端口号为5000。IP包的总数据长度为108个字节,包括8个字节的UDP首部和100个字节的用户数据,100个字节数据是我们自己输入的,随后FPGA端会对这些数据取反然后发送回PC端。
&&&&&&&& 当我们在PC端发送UDP协议的IP包后,如图所示,Nios II Console窗口除了之前打印的版本和连接信息外,同时也打印除了新接收到的100个字节数据,随后取反并发送出去了。
&&&&&&&& 我们可以回到“科来网络分析系统”,我们查看IPàUDP包的解析,这里有两个包,即以192.168.1.103和192.168.1.101为源IP地址互发的UDP包,即我们刚刚的实验中所产生的两个包。如图所示,我们可以分别查看这两个包的解析,尤其大家可以对照两个包的数据是取反的。这和我们的实验初衷是一致的,这两个UDP包都很好的完成了任务。
7 基于labview UDP调试助手的板级调试
&&&&&&&& 首先我们需要安装SF-CY3配套光盘tools文件夹下的SF-NET UDP Tools.rar压缩包内的UDP调试助手工具,这个UDP调试助手是使用labview编写。双击压缩包内的setup.exe安装软件,弹出安装界面如图所示。
&&&&&&&& 完成软件工具安装,和前面一样,在线运行实例工程。接着我们打开开始菜单的“程序àUDPà应用程序”。
&&&&&&&& 随后就弹出如图所示的UDP调试助手主界面。第一次开启软件默认就运行了,在设置好远程目的IP地址和端口号后,若希望其能够生效,大家需要先点击停止运行,然后重新开始运行方可。
&&&&&&&& 前面的实例我们已经知道,FPGA端的IP地址是192.168.1.101,PC端的本地端口是8000(即FPGA的目的端口号),PC端的远程端口号是5000(即FPGA的本地端口号)。
&&&&&&&& 我们重新运行UDP调试助手,为了便于观察显示数据的收发情况,我们将“发送数据”和“接收数据”对应的“显示格式”都设置为“16进制”,在发送数据窗口中输入一长串的16进制数据,然点击右侧的“发送”按钮,随后我们便可以看到“接收数据”窗口中打印了一长串由FPGA端返回的数据,大家可以仔细看看,这些数据是否都是发送数据取反后的结果。
&&&&&&&& 在EDS的Nios II Console中,我们也可以看到打印信息如图所示。
&&&&&&&& 有兴趣的朋友也可以用科来网络分析系统来监控我们使用UDP调试助手收发数据的过程。
关注微信公众号}

我要回帖

更多关于 fpga与pc机以太网通信 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信