matlab制作以太网数据接收上位机_【正点原子FPGA连载】第四十三章 以太网通信实验-摘自【正点原子】开拓者 FPGA 开发指南...

1)实验平台:正点原子开拓者FPGA 开发板

2)摘自《开拓者FPGA开发指南》关注官方微信号公众号,获取更多资料:正点原子

3)全套实验源码+手册+视频下载地址http://www.openedv.com/docs/index.html

9255b79aa5b276e925e9901c46f68934.png

第四十三章 以太网通信实验

以太网(Ethernet)是当今现有局域网采用的最通用的通信协议标准,该标准定义了在局域

网中采用的电缆类型和信号处理方法。以太网凭借其成本低、通信速率高、抗干扰性强等优点

被广泛应用在网络远程监控、交换机、工业自动化等对通信速率要求较高的场合。本章我们将

使用FPGA开发板上的以太网接口完成上位机与FPGA通信的功能。

本章包括以下几个部分:

43.1 以太网简介

43.2 实验任务

43.3 硬件设计

43.4 程序设计

43.5 下载验证

以太网简介

以太网是一种产生较早,使用相当广泛的局域网。其最初是由Xerox(施乐)公司创建并

由Xerox、Intel和DEC公司联合开发的基带局域网规范,后来被电气与电子工程师协会(IEEE)

所采纳作为802.3的标准。

以太网的分类有标准以太网(10Mbit/s),快速以太网(100Mbit/s)和千兆以太网

(1000Mbit/s)。随着以太网技术的飞速发展,市场上也出现了万兆以太网(10Gbit/s),它

扩展了IEEE802.3协议和MAC规范,使其技术支持10Gbit/s的传输速率。然而在实际应用中,标

准以太网和快速以太网已经能够满足我们的日常需求,对通信速率要求较高的场合,才会用到

千兆以太网。

以太网通信离不开连接端口的支持,网络数据连接的端口就是以太网接口。以太网接口类

型有RJ45接口,RJ11接口(电话线接口),SC光纤接口等。其中RJ45接口是我们现在最常见的

网络设备接口(如:电脑网口),我们开发板使用的就是这种接口。

RJ45接口俗称“水晶头”,专业术语为RJ45连接器,由插头(接头、水晶头)和插座(母

座)组成,属于双绞线以太网接口类型。RJ45插头只能沿固定方向插入,设有一个塑料弹片与

RJ45插槽卡住以防止脱落。

RJ45接口样式如图 43.1.1所示:

26ee4c08f83e0ee4eda6beb0e2fcd280.png

图 43.1.1 RJ45插头(左)、插座(右)

RJ45接口定义以及各引脚功能说明如图 43.1.2所示,在以太网中只使用了1、2、3、6这

四根线,其中1、2这组负责传输数据(TX+、TX-),而3、6这组负责接收数据(RX+、RX-),

另外四根线是备用的。

c0ef81ef46bdeca9226152302013c2e0.png

图 43.1.2 RJ45插座接口定义

以太网是目前应用最广泛的局域网通讯方式,同时也是一种协议。以太网协议定义了一系

列软件和硬件标准,从而将不同的计算机设备连接在一起。我们知道串口通信单次只传输一个

字节,而以太网通信是以数据包的形式传输,其单包数据量达到几十,甚至成百上千个字节。

下图为以太网通过UDP(User Datagram Protocol,用户数据报协议)传输单包数据的格式,

从图中可以看出,以太网的数据包就是对各层协议的逐层封装来实现数据的传输。这里只是让

大家了解下以太网数据包的格式,后面会逐个展开来讲。

db5efb65d62e346a4785911a8c643383.png

图 43.1.3 以太网包数据格式

以太网MAC帧格式

以太网技术的正式标准是IEEE 802.3,它规定了以太网传输数据的帧结构,我们可以把以

太网MAC层理解成高速公路,我们必须遵循它的规则才能在上面通行,以太网MAC层帧格式如图

1.4所示。

595520f1c2376f68429a5e051d644c2a.png

图 43.1.4 以太网帧格式

以太网传输数据时按照上面的顺序从头到尾依次被发送和接收,我们下面进一步解释各个

区域。

前导码(Preamble):为了实现底层数据的正确阐述,物理层使用7个字节同步码(0和1

交替(55-55-55-55-55-55-55))实现数据的同步。

帧起始界定符(SFD,Start Frame Delimiter):使用1个字节的SFD(固定值为0xd5)来

表示一帧的开始,即后面紧跟着传输的就是以太网的帧头。

目的MAC地址:即接收端物理MAC地址,占用6个字节。MAC地址从应用上可分为单播地址、

组播地址和广播地址。单播地址:第一个字节的最低位为0,比如00-00-00-11-11-11,一般用

于标志唯一的设备;组播地址:第一个字节的最低位为1,比如01-00-00-11-11-11,一般用于

标志同属一组的多个设备;广播地址:所有48bit全为1,即FF-FF-FF-FF-FF-FF,它用于标志

同一网段中的所有设备。

源MAC地址:即发送端物理MAC地址,占用6个字节。

长度/类型:上图中的长度/类型具有两个意义,当这两个字节的值小于1536(十六进制为

0x0600)时,代表该以太网中数据段的长度;如果这两个字节的值大于1536,则表示该以太网

中的数据属于哪个上层协议,例如0x0800代表IP协议(网际协议)、0x0806代表ARP协议(地

址解析协议)等。

数据:以太网中的数据段长度最小46个字节,最大1500个字节。最大值1500称为以太网的

最大传输单元(MTU,Maximum Transmission Unit),之所以限制最大传输单元是因为在多个

计算机的数据帧排队等待传输时,如果某个数据帧太大的话,那么其它数据帧等待的时间就会

加长,导致体验变差,这就像一个十字路口的红绿灯,你可以让绿灯持续亮一小时,但是等红

灯的人一定不愿意的。另外还要考虑网络I/O控制器缓存区资源以及网络最大的承载能力等因

素,因此最大传输单元是由各种综合因素决定的。为了避免增加额外的配置,通常以太网的有

效数据字段小于1500个字节。

帧检验序列(FCS,Frame Check Sequence):为了确保数据的正确传输,在数据的尾部

加入了4个字节的循环冗余校验码(CRC校验)来检测数据是否传输错误。CRC数据校验从以太

网帧头开始即不包含前导码和帧起始界定符。通用的CRC标准有CRC-8、CRC-16、CRC-32、CRC

CCIT,其中在网络通信系统中应用最广泛的是CRC-32标准。

在这里还有一个要注意的地方就是以太网相邻两帧之间的时间间隔,即帧间隙(IFG,

Interpacket Gap)。帧间隙的时间就是网络设备和组件在接收一帧之后,需要短暂的时间来

恢复并为接收下一帧做准备的时间,IFG的最小值是96 bit time,即在媒介中发送96位原始数

据所需要的时间,在不同媒介中IFG的最小值是不一样的。不管10M/100M/1000M的以太网,两

帧之间最少要有96bit time,IFG的最少间隔时间计算方法如下:

10Mbit/s最小时间为:96*100ns = 9600ns;

100Mbit/s最小时间为:96*10ns = 960ns;

1000Mbit/s最小时间为:96*1ns = 96ns。

接下来我们介绍IP协议以及它和以太网MAC层的关系。在介绍IP协议之前,我们先了解下

TCP(传输控制协议)/IP(网际协议)协议簇。TCP/IP是网络使用中最基本的通信协议,虽然

从名字看上去TCP/IP包括两个协议,TCP和IP,但TCP/IP实际上是一组协议,它包括上百个各

种功能的协议,如:TCP、IP、UDP、ICMP(网际控制报文协议)等。而TCP协议和IP协议是保

证数据完整传输的两个重要的协议,因此TCP/IP协议用来表示Internet协议簇。

TCP/IP协议不仅可以运行在以太网上,也可以运行在FDDI(光纤分布式数据接口)和WLAN

(无线局域网)上。反过来,以太网的高层协议不仅可以是TCP/IP协议,也可以是IPX协议(互

联网分组交换协议)等,只不过以太网+TCP/IP成为IT行业中应用最普遍的技术。下面我们来

熟悉下IP协议。

IP协议

IP协议是TCP/IP协议簇中的核心协议,也是TCP/IP协议的载体,IP协议规定了数据传输时

的基本单元和格式。从前面介绍的图 43.1.3中可以看出,IP协议位于以太网MAC帧格式的数据

段,IP协议内容由IP首部和数据字段组成。所有的TCP、UDP及ICMP数据都以IP数据报格式传输,

IP数据包格式如图 43.1.5所示。

c13c04bb6d6c9e8b2870ef217f354e57.png

图 43.1.5 IP数据报格式

前20个字节和紧跟其后的可选字段是IP数据报的首部,前20个字节是固定的,后面可选字

段是可有可无的,首部的每一行以32位(4个字节)为单位。

版本:4位IP版本号(Version),这个值设置为二进制的0100时表示IPv4,设置为0110时

表示IPv6,目前使用比较多的IP协议版本号是4。

首部长度:4位首部长度(IHL,Internet Header Length),表示IP首部一共有多少个32

位(4个字节)。在没有可选字段时,IP首部长度为20个字节,因此首部长度的值为5。

服务类型:8位服务类型(TOS,Type of service),该字段被划分成两个子字段:3位优

先级字段(现在已经基本忽略掉了)和4位TOS字段,最后一位固定为0。服务类型为0时表示一

般服务。

总长度:16位IP数据报总长度(Total Length),包括IP首部和IP数据部分,以字节为单

位。我们利用IP首部长度和IP数据报总长度,就可以知道IP数据报中数据内容的起始位置和长

度。由于该字段长16bit,所以IP数据报最长可达65535字节。尽管理论上可以传输长达65535

字节的IP数据报,但实际上还要考虑网络的最大承载能力等因素。

标识字段:16位标识(Identification)字段,用来标识主机发送的每一份数据报。通常

每发送一份报文它的值就会加1。

标志字段:3位标志(Flags)字段,第1位为保留位;第2位表示禁止分片(1表示不分片

0:允许分片);第3位标识更多分片(除了数据报的最后一个分片外,其它分片都为1)。

片偏移:13位片偏移(Fragment Offset),在接收方进行数据报重组时用来标识分片的

顺序。

生存时间:8位生存时间字段,TTL(Time To Live)域防止丢失的数据包在无休止的传播,

一般被设置为64或者128。

协议:8位协议(Protocol)类型,表示此数据报所携带上层数据使用的协议类型,ICMP

为1,TCP为6,UDP为17。

首部校验和:16位首部校验和(Header Checksum),该字段只校验数据报的首部,不包

含数据部分;校验IP数据报头部是否被破坏、篡改和丢失等。

源IP地址:32位源IP地址(Source Address),即发送端的IP地址,如192.168.1.123。

目的IP地址:32位目的IP地址(Destination Address),即接收端的IP地址,如

192.168.1.102。

可选字段:是数据报中的一个可变长度的可选信息,选项字段以32bit为界,不足时插入

值为0的填充字节,保证IP首部始终是32bit的整数倍。

以上内容是对IP首部格式的详细阐述,还需要补充的内容是IP首部校验和的计算方法,其

计算步骤如下:

1、将16位检验和字段置为0,然后将IP首部按照16位分成多个单元;

2、对各个单元采用反码加法运算(即高位溢出位会加到低位,通常的补码运算是直接丢

掉溢出的高位);

3、此时仍然可能出现进位的情况,将得到的和再次分成高16位和低16位进行累加;

4、最后将得到的和的反码填入校验和字段。

例如,我们使用IP协议发送一个IP数据报总长度为50个字节(有效数据为30个字节)的数

据包,发送端IP地址为192.168.1.123,接收端IP地址为192.168.102,则IP首部数据如下:

0b7444879f6250c9e3d6ea995a9272b5.png

图 43.1.6 IP首部数据

按照上述提到的 IP 首部校验和的方法计算 IP 首部校验和,即:

1、 0x4500 + 0x0032 + 0x0000 + 0x4000 + 0x4011 + 0x0000(计算时强制置0) + 0xc0a8 + 0x017b

+ 0xc0a8 + 0x0166 = 0x24974

2、 0x0002 + 0x4974 = 0x4976

3、 0x0000 + 0x4976 = 0x4976(此种情况并未出现进位)

4、 check_sum = ~0x4976(按位取反) = 0xb689

到此为止IP协议内容已经介绍完了,我们从前面介绍的图 43.1.3可以知道,UDP的首部和

数据位于IP协议的数据段。既然已经有IP协议了,为什么还需要UDP协议呢?为什么我们选择

的是UDP还不是传输更可靠的TCP呢?带着这些疑问我们继续往下看。

UDP协议

首先回答为什么还需要UDP协议?事实上数据是可以直接封装在IP协议里而不使用TCP、

UDP或者其它上层协议的。然而在网络传输中同一IP服务器需要提供各种不同的服务,各种不

同的服务类型是使用端口号来区分的,例如用于浏览网页服务的80端口,用于FTP(文件传输

协议)服务的21端口等。TCP和UDP都使用两个字节的端口号,理论上可以表示的范围为0~65535,

足够满足各种不同的服务类型。

然后是为什么不选择传输更可靠的TCP协议,而是UDP协议呢?TCP协议与UDP协议作为传输

层最常用的两种传输协议,这两种协议都是使用IP作为网络层协议进行传输。下面是TCP协议

与UDP协议的区别:

1、TCP协议面向连接,是流传输协议,通过连接发送数据,而UDP协议传输不需要连接,是数据报协议;

2.TCP为可靠传输协议,而UDP为不可靠传输协议。即TCP协议可以保证数据的完整和有序,

而UDP不能保证;

3.UDP由于不需要连接,故传输速度比TCP快,且占用资源比TCP少;

4.应用场合:TCP协议常用在对数据文件完整性较高的一些场景中,如文件传输等。UDP常

用于对通讯速度有较高要求或者传输数据较少时,比如对速度要求较高的视频直播和传输数据

较少的QQ等。

首先可以肯定的告诉大家,使用FPGA实现TCP协议是完全没有问题的,但是,FPGA发展到

现在,却鲜有成功商用的RTL级的TCP协议设计,大部分以太网传输都是基于比较简单的UDP协

议。TCP协议设计之初是根据软件灵活性设计的,如果使用硬件逻辑实现,工程量会十分巨大,

而且功能和性能无法得到保证,因此,TCP协议设计并不适合使用硬件逻辑实现。UDP协议是一

种不可靠传输,发送方只负责数据发送出去,而不管接收方是否正确的接收。在很多场合,是

可以接受这种潜在的不可靠性的,例如视频实时传输显示等。

UDP数据格式如图 43.1.7所示:

569da27c1d5b75950af08340453b450c.png

图 43.1.7 UDP数据格式

UDP首部共8个字节,同IP首部一样,也是一行以32位(4个字节)为单位。

源端口号:16位发送端端口号,用于区分不同服务的端口,端口号的范围从0到65535。

目的端口号:16位接收端端口号。

UDP长度:16位UDP长度,包含UDP首部长度+数据长度,单位是字节(byte)。

UDP校验和:16位UDP校验和。UDP计算校验和的方法和计算IP数据报首部校验和的方法相

似,但不同的是IP数据报的校验和只检验IP数据报的首部,而UDP校验和包含三个部分:UDP伪

首部,UDP首部和UDP的数据部分。伪首部的数据是从IP数据报头和UDP数据报头获取的,包括源IP地址,目的IP地址,协议类型和UDP长度,其目的是让UDP两次检查数据是否已经正确到达

目的地,只是单纯为了做校验用的。在大多数使用场景中接收端并不检测UDP校验和,因此这

里不做过多介绍。

以太网的帧格式、IP数据报协议以及UDP协议到这里已经全部介绍完了,关于用户数据、

UDP、IP、MAC四个报文的关系如下图所示:

5cf9d321f20efe5fa8d99c3e3e1f31ad.png

图 43.1.8 以太网包数据格式

用户数据打包在UDP协议中,UDP协议又是基于IP协议之上的,IP协议又是走MAC层发送的,

即从包含关系来说:MAC帧中的数据段为IP数据报,IP报文中的数据段为UDP报文,UDP报文中

的数据段为用户希望传输的数据内容。现在再回过头看图 43.1.8的内容是不是很好理解了呢?

前面介绍的内容全部都是和协议相关的,以太网通信如果只有协议,没有硬件芯片的支持

是不行的,这个硬件芯片就是以太网PHY芯片。PHY是物理接口收发器,它实现物理层IEEE 802.3

标准定义的以太网PHY,包括MII(媒体独立接口)/GMII(千兆媒体独立接口)等。

以太网PHY芯片

PHY在发送数据的时候,接收MAC发过来的数据(对PHY来说,没有帧的概念,都是数据而

不管什么地址,数据还是CRC),把并行数据转化为串行流数据,按照物理层的编码规则把数

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值