__以太网__不是单一协议,而是不同标准的完整集合。这些标准来自 IEEE,它们的名字都以 802.3 开头。
以太网技术起源于施乐帕洛阿尔托研究中心的先锋技术项目。人们通常认为以太网发明于1973年,当年鲍勃.梅特卡夫(Bob Metcalfe)给他PARC的老板写了一篇有关以太网潜力的备忘录。但是梅特卡夫本人认为以太网是之后几年才出现的。在1976年,梅特卡夫和他的助手David Boggs发表了一篇名为《以太网:区域计算机网络的分布式数据包交换技术》的文章。
1979年,梅特卡夫为了开发个人电脑和局域网离开了施乐(Xerox),成立了3Com公司。3Com对DEC、英特尔和施乐进行游说,希望与他们一起将以太网标准化、规范化。这个通用的以太网标准于1980年9月30日提出。当时业界有两个流行的非公用网络标准令牌环网和ARCNET,在以太网浪潮的冲击下他们很快萎缩并被取代。而在此过程中,3Com也成了一个国际化的大公司。梅特卡夫曾经开玩笑说,Jerry Saltzer为3Com的成功作出了贡献。Saltzer在一篇[哪个/哪些?]与他人合著的很有影响力的论文中指出,在理论上令牌环网要比以太网优越。受到此结论的影响,很多电脑厂商或犹豫不决或决定不把以太网接口做为机器的标准配置,这样3Com才有机会从销售以太网网卡大赚。这种情况也导致了另一种说法“以太网不适合在理论中研究,只适合在实际中应用”。也许只是句玩笑话,但这说明了这样一个技术观点:通常情况下,网络中实际的数据流特性与人们在局域网普及之前的估计不同,而正是因为以太网简单的结构才使局域网得以普及。梅特卡夫和Saltzer曾经在麻省理工学院MAC项目(Project MAC)的同一层楼工作,当时他正在做自己的哈佛大学毕业论文,在此期间奠定了以太网技术的理论基础。
1985 年,美国电气和电子工程师协会 (IEEE) 制定了一系列局域网 (LAN)标准,称为 IEEE 802 标准。这些已被广泛接受,现在构成了大多数 LAN 的核心。IEEE 802 标准之一,IEEE 802.3,是一种称为“以太网”的标准。这是当今世界上使用最广泛的 LAN 技术。尽管IEEE 802.3与原始标准(“蓝皮书”)有些不同。它非常相似,两组标准都可以用于同一个局域网。
如今,以太网采用CSMA/CD(Carrier Sense Multiple Access/Collision Detection,载波监听多路存取和冲突检测)介质访问控制方式的局域网技术,最初由Xerox公司于1975年研制成功,1979年7月~1982年间,由__DEC、Intel和Xerox__三家公司制定了以太网的技术规范DIX,以此为基础形成的IEEE802.3以太网标准在1989年正式成为国际标准。在20多年中以太网技术不断发展,成为迄今最广泛应用的局域网技术,产生了多种技术标准。
以太网 (Ethernet)是一种计算机__局域网__技术。IEEE组织的IEEE 802.3标准制定了以太网的技术标准,它规定了包括物理层的连线、电子信号和介质访问控制的内容。以太网是目前应用最普遍的局域网技术,取代了其他局域网标准如令牌环、FDDI和ARCNET。
以太网的标准拓扑结构为__总线型拓扑__,但目前的快速以太网(100BASE-T、1000BASE-T标准)为了减少冲突,将能提高的网络速度和使用效率最大化,使用交换机(Switch hub)来进行网络连接和组织。如此一来,以太网的拓扑结构就成了星型;但在逻辑上,以太网仍然使用总线型拓扑和CSMA/CD(Carrier Sense Multiple Access/Collision Detection,即载波多重访问/碰撞侦测)的总线技术。
__以太网 __(Ethernet) 在组网技术中占的比例最高,很多人直接把以太网理解为互联网。因此这里有必要详细说明以太网和互联网的区别和联系。
__互联网__即INTERNET,它是一个全球性互联网络。它是由从地方到全球范围内几百万个私人的,政府的,学术界的,企业的和政府的网络所构成,通过电子,无线和光纤网络技术等等一系列广泛的技术联系在一起。它以TCP/IP协议簇作为通信方式,体系结构分为4层:应用层,传输层,网络层,网络接口层。
__以太网__是最通用的通信协议标准。以太网络使用CSMA/CD技术,(载波监听多路访问及冲突检测)并以10M/s的速率(或100M/s 、1000M/s等速率)运行在多种类型的电缆上。它规定了包括物理层的连线、电子信号和介质访问层协议的内容。简单来说,以太网(Ethernet),是让局域网连接的一种技术,取代了其他局域网标准如令牌环、FDDI和ARCNET。
以太网是指遵守 IEEE 802.3 标准组成的局域网,由 IEEE 802.3 标准规定的主要是位于参考模型的物理层 (PHY) 和数据链路层中的介质访问控制子层 (MAC)。在家庭、企业和学校所组建的 PC局域网形式一般也是以太网,其标志是使用水晶头网线来连接 (当然还有其它形式)。 IEEE 还有其它局域网标准,如 IEEE 802.11 是无线局域网,俗称 Wi-Fi。 IEEE802.15 是个人域网,即蓝牙技术,其中的 802.15.4 标准则是 ZigBee 技术。
以太网只是组成互联网的一个子集,以太网是现在主流的局域网标准,而互联网是指将大量的局域网连接起来,进行资源的分享。另外,互联网与以太网是两个不同的概念,前者是范围概念,后者是技术概念。互联网(Internet)、广域网(WAN)、局域网(LAN)可以算作一类,它们都是按照区域和范围来分类的。而以太网(Ethernet)、ATM网和FDDI网可以算作一类,它们是按照传输技术分类的。
以太网描述了__物理(PHY)层和数据链路(Data Link)层__,如下图所示。
在物理层,有不同的电缆选项和不同的速度。然而,以太网的优点之一是它使用相同的数据链路层标准。你可以在网络中混合使用不同的以太网标准。下面是一个例子:
上面我们看到三台主机连接到使用不同以太网标准的两台交换机。交换机之间的连接是 10 Gbps 光纤连接。即使我们混合了不同的标准,该网络也将能够转发以太网帧。
以太网的一大优点是,虽然有不同的标准,但都使用通用的以太网帧。自 70 年代的原始以太网标准以来,此框架没有太大变化。这是以太网帧的样子:
前导码 :这是一个 7 字节的 1 和 0 模式,用于同步。
SFD :“起始帧定界符”标记前导码的结尾,并告诉接收器接下来的字段将是实际的以太网帧,从目标字段开始。
目的地址 :这是接收方的目的地 MAC 地址。
源地址 :发送帧的设备的源MAC地址。
类型 :这告诉我们以太网帧内携带的内容。IPv4 数据包、IPv6 数据包或其他内容。
数据 :它携带我们尝试传输的实际数据,例如 IPv4 数据包。
FCS :帧校验序列帮助接收器确定帧是正确还是损坏。
绿色标记的字段就是我们所说的以太网头。
TCP/IP 协议栈中的每层协议报文的封装与拆装如下:
当用户发送数据时,将数据向下交给传输层,这是处于应用层的操作,应用层可以通过调用传输层的接口来编写特定的应用程序。而 TCP/IP 协议一般也会包含一些简单的应用程序如 Telnet 远程登录、 FTP 文件传输、 SMTP 邮件传输协议等。传输层会在数据前面加上传输层首部(此处以TCP 协议为例,传输层首部为 TCP 首部,也可以是 UDP 首部),然后向下交给网络层。同样地,网络层会在数据前面加上网络层首部(IP 首部),然后将数据向下交给链路层,链路层会对数据进行最后一次封装,即在数据前面加上链路层首部(此处使用以太网接口为例),然后将数据交给网卡。最后,网卡将数据转换成物理链路上的电平信号,数据就这样被发送到了网络中。
当设备的网卡接收到某个数据包后,它会将其放置在网卡的接收缓存中,并告知 TCP/IP 内核。然后 TCP/IP 内核就开始工作了,它会将数据包从接收缓存中取出,并逐层解析数据包中的协议首部信息,并最终将数据交给某个应用程序。数据的接收过程与发送过程正好相反,
常用的以太网MAC帧格式有两种标准 : DIX Ethernet II标准,IEEE 的 802.3 标准 。
Ethernet V2可以装载的最大数据长度是1500字节,而IEEE802.3可以装载的最大数据是1492字节(SNAP)或是1497字节; Ethernet V2不提供MAC层的数据填充功能,而IEEE802.3不仅提供该功能,还具备服务访问点(SAP)和SNAP层,能够提供更有效的数据链路层控制和更好的传输保证。那么我们可以得出这样的结论:Ethernet V2比IEEE802.3更适合于传输大量的数据,但EthernetV2缺乏数据链路层的控制,不利于传输需要严格传输控制的数据,这也正是IEEE802.3的优势所在,越需要严格传输控制的应用,越需要用IEEE802.3或SNAP来封装,但IEEE802.3也不可避免的带来数据装载量的损失,因此该格式的封装往往用在较少数据量承载但又需要严格控制传输的应用中。
在实际应用中,我们会发现,大多数应用的以太网数据包是EthernetV2的帧(如HTTP、FTP、SMTP、POP3等应用),而交换机之间的BPDU(桥协议数据单元)数据包则是IEEE802.3的帧,VLANTrunk协议如802.1Q和Cisco的CDP(思科发现协议)等则是采用IEEE802.3SNAP的帧。大家有兴趣的话,可以利用Sniffer等协议分析工具去捕捉数据包,然后解码查看是不是这样的。
在物理层,由 IEEE 802.3 标准规定了以太网使用的传输介质、传输速度、数据编码方式和冲突检测机制,物理层一般是通过一个 PHY 芯片实现其功能的。
传输介质包括__同轴电缆、双绞线 (Unshielded Twisted Pair, UTP)、光纤__。根据不同的传输速度和距离要求,基于这三类介质的信号线又衍生出很多不同的种类。最常用的是“五类线”适用于 100BASE-T和 10BASE-T 的网络,它们的网络速率分别为 100Mbps 和 10Mbps。
以太网有许多不同的标准,速度从 10 Mbps(兆比特每秒)到 100 Gbps(千兆比特每秒)。以下是一些流行的以太网标准的概述:
带宽 | 通用名称 | 非正式名称 | IEEE****名称 | 线缆类型 | 最大传输距离 |
---|---|---|---|---|---|
10 Mbps | 细缆 | 10BASE2 | 802.3 | 同轴电缆 | 200m(实际185m) |
10 Mbps | 以太网 | 10BASE-T | 802.3 | UTP | 100m |
100 Mbps | 快速以太网 | 100BASE-T | 802.3u | UTP | 100m |
1000 Mbps | 千兆以太网 | 1000BASE-LX | 802.3z | 光纤 | 5000m |
1000 Mbps | 千兆以太网 | 1000BASE-T | 802.3ab | UTP | 100m |
10 Gbps | 10千兆以太网 | 10GBASE-T | 802.3an | UTP | 100m |
不同的标准是由不同的名字组合而成:
下面以不同类型的传输介质进行介绍。
1.同轴电缆
同轴电缆的主要代表是10BASE5和10BASE2。
10BASE5 (又称粗缆(Thick Ethernet)或黄色电缆)──最早实现10 Mbit/s以太网。
早期IEEE标准,使用单根RG-11同轴电缆,最大距离为500米,并最多可以连接100台电脑的收发器,而缆线两端必须接上50欧姆的终端电阻。接收端通过所谓的“插入式分接头”插入电缆的内芯和屏蔽层。在电缆终结处使用N型连接器。
尽管由于早期的大量布设,到现在还有一些系统在使用,这一标准实际上被10BASE2取代。
利用基带的10M传输速率,采用曼彻斯特编码传输数据。 该系统在安装和维护上难度较大。
在IEEE Std 802.3™的Clause 8有详细的介绍。
Physical Layer partitioning, relationship to the ISO/IEC Open Systems Interconnection (OSI) reference model
10BASE2 (又称细缆(Thin Ethernet)或模拟网络)── 10BASE5后的产品,使用RG-58同轴电缆,最长转输距离约200米(实际为185米),仅能连接30台计算机,计算机使用T型适配器连接到带有BNC连接器的网卡,而__线路两头需要50欧姆的终结器__。
利用基带的10M传输速率,采用曼彻斯特编码传输数据。虽然在能力、规格上不及10BASE5,但是因为其线材较细、布线方便、成本也便宜,所以得到更广泛的使用,淘汰了10BASE5。由于双绞线的普及,它也被各式的双绞线网络取代。
在IEEE Std 802.3™的Clause 10有详细的介绍。
Physical Layer partitioning, relationship to the ISO/IEC Open Systems Interconnection (OSI) reference model
https://www.telecomworld101.com/Thinnet.html
【注】自2011年9月以来,该标准不再考虑维护变更。
2.双绞线
StarLAN是第一个双绞线上实现的以太网络标准10 Mbit/s。后发展成10BASE-T,以及100BASE-TX和1000BASE-T
__10BASE-T__使用两对非屏蔽双绞线,一对线发送数据,另一对线接收数据,用RJ-45模块作为端接器,星形拓扑结构,信号频率为20MHz,必须使用3类或更好的UTP电缆;布线按照EIA568标准,站点中继器和中继器中继器的最大距离为100m。保持了10base5的4中继器/5网段的设计能力,使10base-T局域网的最大直径为500m。
10Base-T的集线器和网卡每16秒就发出“滴答”(Hear-beat)脉冲,集线器和网卡都要监听此脉冲,收到“滴答” 信号表示物理连接已建立,10base-T设备通过LED向网络管理员指示链路是否正常。
如下图所示,UTP 电缆有 4 对线对,每对 2 根线。每对线都有两种匹配的颜色。例如,蓝色和蓝白色。在 UTP 电缆的末端,我们使用 RJ45 连接器。
RJ45 连接器有 8 个可以插入电线的位置,称为“引脚”。我们从左到右数针数,查看 RJ45 连接器的底部。
10base-T因为价格便宜、配置灵活和易于管理而流行起来,现在占整个以太网销售量的90%以上。
在IEEE Std 802.3™的Clause 14有详细的介绍。
10BASE-T relationship to the ISO/IEC Open Systems Interconnection (OSI) reference model and the IEEE 802.3 CSMA/CD LAN model
__100base-T__称Fast Ethernet(快速以太网),是许多以标称速率100 Mbit/s(较早的以太网速度为10 Mbit / s)传输流量的以太网标准的统称。在快速以太网标准中,100BASE-TX是最常见的。
名称中的“100”是指100Mbit/s的传输速度;而“BASE”是指基带信令; 破折号后面的字母(“T”或“F”)是指承载信号的物理介质(分别为双绞线或光纤);而最后一个字符(“X”,“4”等)指的是使用的行代码方法。 快速以太网有时被称为100BASE-X,其中“X”是FX和TX变体的占位符。
1995年5月正式通过了快速以太网/100Base-T规范,即IEEE 802.3u标准,是对IEEE802.3的补充。与10base-T一样采用星形拓扑结构,但100Base-T包含4个不同的物理层规范,并且包含了网络拓扑方面的许多新规则。可以说是10Base-T的升级版。
在IEEE Std 802.3™的Clause 21有详细的介绍。
Architectural positioning of 100BASE-T
__1000BASE-T__采用四对五类平衡电缆的1000 Mb/s 物理层规格。与10Base-T、100Base-T完全兼容。
前面两种标准有两根线对,一根用于传输,另一根用于接收。然而,1000BASE-T使用所有 4 对线。它不是使用不同的线对进行传输/接收,而是能够在每个线对上同时发送和接收。
RJ45 连接器中的引脚布局相同,但我们使用了额外的电线:
在IEEE Std 802.3™的Clause 40有详细的介绍。
Type 1000BASE-T PHY relationship to the ISO Open Systems Interconnection (OSI) Reference Model and the IEEE 802.3 CSMA/CD LAN Model
3.光纤
目前传输速度最快传播距离最长的就是光纤,主要有1000BASE-LX(long wavelength laser)、1000BASE-SX (Short Wavelength Laser)、1000BASE-T。
IEEE802.3z定义了基于光纤和短距离铜缆的1000Base-X,采用8B/10B编码技术,信道传输速度为1.25Gbit/s,去耦后实现1000Mbit/s传输速度。
1000BASE-X 采用单模或多模长波激光器的规格。采用直径为62.5um或50um的多模光纤时,工作波长范围为1270-1355nm,传输距离为550m;采用直径为9um或10um的单模光纤,工作波长范围为1270-1355nm,传输距离为5km左右。
在IEEE Std 802.3™的Clause 38有详细的介绍。
Relationship of 1000BASE-X and the PMDs
为了让接收方在没有外部时钟参考的情况也能确定每一位的起始、结束和中间位置,在传输信号时不直接采用二进制编码。在 10BASE-T 的传输方式中采用曼彻斯特编码,在 100BASE-T 中则采用 4B/5B 编码。
曼彻斯特编码把每一个二进制位的周期分为两个间隔,在表示“1”时,以前半个周期为高电平,后半个周期为低电平。表示“0”时则相反,具体见下图。
采用曼彻斯特码在每个位周期都有电压变化,便于同步。但这样的编码方式效率太低,只有 50%。在 100BASE-T 采用的 4B/5B 编码是把待发送数据位流的每 4 位分为一组,以特定的 5 位编码来表示,这些特定的 5 位编码能使数据流有足够多的跳变,达到同步的目的,而且效率也从曼彻斯特编码的 50% 提高到了 80%。
早期的以太网大多是多个节点连接到同一条网络总线上 (总线型网络),存在信道竞争问题,因而每个连接到以太网上的节点都必须具备冲突检测功能。
上面我们看到 H1 和 H2 都在发送以太网帧。集线器在连接到 H3 的端口上重复这些帧。当这同时发生时,我们会发生碰撞并且两帧都丢失了。
为了解决这个问题,我们必须使用半双工。
半双工意味着我们不能同时发送和接收。当一台计算机正在传输时,其他所有人都必须等待。当没有人传输时,我们可以拍摄并传输一帧。
然而,这并不意味着我们完全没有碰撞。当两台计算机决定“线路空闲”并开始传输时,我们仍然会发生碰撞。为了解决这个问题,我们有一个叫做 CSMA/CD 的协议 。
CSMA/CD全称是Carrier Sense Multiple Access with Collision Detection,载波侦听多路访问/冲突检测协议),已广泛应用于以太网中。
所谓__载波侦听__(Carrier Sense),意思是网络上各个工作站在发送数据前都要确认总线上有没有数据传输。若有数据传输(称总线为忙),则不发送数据;若无数据传输(称总线为空),立即发送准备好的数据。
所谓__多路访问__(Multiple Access),意思是网络上所有工作站收发数据共同使用同一条总线,且发送数据是广播式的。
所谓__冲突__(Collision),意思是若网上有两个或两个以上工作站同时发送数据,在总线上就会产生信号的混合,这样哪个工作站都辨别不出真正的数据是什么。这种情况称为数据冲突,又称为__碰撞__。
__CSMA/CD 冲突检测机制大致__如下:如果多个节点同时利用同一条总线发送数据,则会产生冲突,总线上的节点可通过接收到的信号与原始发送的信号的比较检测是否存在冲突,若存在冲突则停止发送数据,随机等待一段时间再重传。如果再次碰撞,发射节点再次等待,等待时间几乎是前一个的两倍:这就是所谓的退避(即“下降”)指数。除非它已经达到了最大值。
现在大多数局域网组建的时候很少采用总线型网络,大多是一个设备接入到一个独立的路由或交换机接口,组成星型网络,不会产生冲突。但为了兼容,新出的产品还是带有冲突检测机制。
CSMA/CD 的整个方案如下图所示:
CSMA/CD的帧格式
IEEE 802.3 标准规定的帧格式包含以下字段。
1.前导码 :提供位同步的七个字节(56 位)。它由交替的 Os 和 1s 组成。目的是提供警报和定时脉冲。
2.起始帧定界符(SFD) :它是一个字节字段,具有独特的模式:10 10 1011。它标志着帧的开始。
3.目标地址(DA) :它是包含数据包目标物理地址的六字节字段。
4.源地址(SA) :它也是一个六字节字段,包含源或最后一个转发数据包的设备(最近的路由器到接收器)的物理地址。
5.长度 :这两个字节字段指定数据字段中的长度或字节数。
6.数据 :它可以是 46 到 1500 字节,取决于帧的类型和信息字段的长度。
7.帧校验序列(FCS) :这对于字节字段包含用于错误检测的 CRC。
CSMA/CD流程
第一步:载波监听,当一个站点想要发送数据的时候,它检测网络查看是否有其他站点正在传输,即侦听信道是否空闲,要确保没有其他节点信道,所以该节点首先要监听信道上的动静,也就是先听后说。如果信道在一定时段内寂静无声(称为帧间缝隙IFG),则该节点就开始传输,也就是无声则说。
第二步:冲突检测,如果信道一直很忙碌,就一直监视信道,直到出现最小的IFG时段时,该节点才开始发送它的数据,也就是有空就说。如果两个节点或更多的节点都在监听和等待发送,然后在信道空时同时决定立即(几乎同时)开始发送数据,此时就发生碰撞。这一事件会导致冲突,并使双方信息包都受到损坏。以太网在传输过程中不断地监听信道,以检测__碰撞冲突__,也就是边听边说。
第三步:如果一个节点在传输期间检测出碰撞冲突,则立即停止该次传输,并向信道发出一个“拥挤”信号,以确保其他所有节点也发现该冲突,从而摒弃可能一直在接收的受损的信息包也就是冲突停止,即一次只能一人讲。
第四步:多路存取,在等待一段时间(称为后退)后,想发送的节点试图进行新的发送。 这时采用一种叫二进制指数退避策略(Binary Exponential Back off Policy)的算法来决定不同的节点在试图再次发送数据前要等待一段时间,也就是随机延迟。当延时一段时间后,总线为空闲时,再重新发送未发完的数据。
总结:先听后说,无声则说;有空就说,边听边说;一旦冲突,立即停说,随机延迟,等待再说。
CSMA/CD控制方式的优点是:原理比较简单,技术上易实现,网络中各工作站处于平等地位,不需集中控制,不提供优先级控制。但在网络负载增大时,发送时间增长,发送效率急剧下降。
接下来介绍一款常用于嵌入式的PHY芯片,其他芯片也是类似的原理。
LAN8742A是 SMSC 公司 (已被 Microchip 公司收购) 设计的一个体积小、功耗低、全能型10/100Mbps 的以太网PHY 层收发器,I/O 引脚电压符合 IEEE802.3-2005 标准。它是针对消费类电子和企业应用而设计的。 LAN8742A 总共只有 24Pin,仅支持 RMII 接口。LAN8742A可以通过自协商的方式与目的主机最佳的连接方式(速度和双工模式),支持 HP Auto-MDIX 自动翻转功能,无需更换网线即可将连接更改为直连或交叉连接。
LAN8742A的主要特点如下:
LAN8742A组成的网络结构见下图。
LAN8742A通过 RMII 与 MAC 连接。 RJ45 是网络插座,在与 LAN8742A连接之间还需要一个变压器,所以一般使用带电压转换和 LED 指示灯的 HY911105A 型号的插座。一般来说,必须为使用 RMII 接口的 PHY 提供 50MHz 的时钟源输入到 REF_CLK 引脚,不过 LAN8742A内部集成PLL,可以将 25MHz 的时钟源陪频到 50MHz 并在指定引脚输出该时钟,所以我们可以直接使其与 REF_CLK 连接达到提供 50MHz 时钟效果。
LAN8742A内部系统结构见下图。
LAN8742A有各个不同功能模块组成,最重要的要数接收控制器和发送控制器,其它的基本上都是与外部引脚挂钩,实现信号传输。部分引脚是具有双重功能的,比如 PHYAD0 与 RXER 引脚是共用的,在系统上电后 LAN8742A会马上读取这部分共用引脚的电平,以确定系统的状态并保存在相关寄存器内,之后则自动转入作为另一功能引脚。
__PHYAD[0]__引脚用于配置 SMI 通信的 LAN8742A地址,在芯片内部该引脚已经自带下拉电阻,默认认为 0(即使外部悬空不接),在系统上电时会检测该引脚获取得到 LAN8742A的地址为 0 或者1,并保存在特殊模式寄存器 (R18) 的 PHYAD 位中,该寄存器的 PHYAD 有 5 个位,在需要超过2 个 LAN8742A时可以通过软件设置不同 SMI 通信地址。 PHYAD[0] 是与 RXER 引脚共用。
__MODE[2:0]__引脚用于选择 LAN8742A网络通信速率和工作模式,可选 10Mbps 或 100Mbps 通信速度,半双工或全双工工作模式,另外 LAN8742A支持 HP Auto-MDIX 自动翻转功能,即可自动识别直连或交叉网线并自适应。一般将 MODE 引脚都设置为 1,可以让 LAN8742A启动自适应功能,它会自动寻找最优工作方式。 MODE[0] 与 RXD0 引脚共用、 MODE[1] 与 RXD1 引脚共用、MODE[2] 与 CRS_DV 引脚共用。
__nINT/REFCLKO__引脚用于 RMII 接口中 REF_CLK 信号线,当 nINTSEL 引脚为低电平时,也就是REF_CLK Out 模式,nINT/REFCLKO 作为 REF_CLK 时钟源。它也可以被设置成 50MHz 时钟输出,这样可以直接与 STM32F746 的 REF_CLK 引脚连接为其提供50MHz 时钟源,这种模式要求为 XTAL1 与 XTAL2 之间或为 TAL1/CLKIN 提供 25MHz 时钟,由LAN8742A内部 PLL 电路陪频得到 50MHz 时钟,此时 nIN/REFCLKO 引脚的中断功能不可用,用于 50MHz 时钟输出。
当 nINTSEL 引脚为高电平时,也就是REF_CLK In 模式,nINT/REFCLKO 作为中断引脚。LAN8742A被设置为时钟输入,即外部时钟源直接提供 50MHz 时钟接入 STM32F46的REF_CLK 引脚和 LAN8742A的 XTAL1/CLKIN 引脚,此时 INT/REFCLKO 可用于中断功能。 nINTSEL 与 LED2 引脚共用,一般使用下拉。
REGOFF 引脚用于配置内部 +1.2V 电压源, LAN8742A内部需要 +1.2V 电压,可以通过 VDDCR引脚输入 +1.2V 电压提供,也可以直接利用 LAN8742A内部 +1.2V 稳压器提供。当 REGOFF 引脚为低电平时选择内部 +1.2V 稳压器。 REGOFF 与 LED1 引脚共用。
数据链路层的主要职责是通过单个链路传输数据报。数据链路层协议定义了跨节点交换的数据包的格式以及错误检测,重传,流控制和随机访问等操作。
数据链路层提供服务:
成帧和链路访问 :数据链路层协议在链路层传输之前将每个网络帧封装在链路层帧内。帧由包含网络层数据报的数据字段和多个数据字段组成。它规定了帧的结构以及通过链路传输帧的信道访问协议。
可靠的交付 :数据链路层提供可靠的交付服务,即无错误地传输网络层数据报。通过传输和确认完成可靠的传送服务。数据链路层主要通过链路提供可靠的传送服务,因为它们具有较高的错误率并且可以在本地校正,发生错误的链路而不是强制重新传输数据。
流控制 :接收节点可以以比处理帧更快的速率接收帧。如果没有流量控制,接收器的缓冲区可能会溢出,帧可能会丢失。为了克服这个问题,数据链路层使用流控制来防止链路一侧的发送节点压倒链路另一侧的接收节点。
错误检测 :可以通过信号衰减和噪声引入错误。数据链路层协议提供了一种检测一个或多个错误的机制。这是通过在帧中添加错误检测位来实现的,然后接收节点可以执行错误检查。
纠错 :纠错与错误检测类似,不同之处在于接收节点不仅检测错误,还确定错误发生在帧中的位置。
半双工和全双工 :在全双工模式下,两个节点都可以同时传输数据。在半双工模式下,只有一个节点可以同时传输数据。
当数据从一台设备传输到另一台设备时,系统不保证该设备接收到的数据与另一台设备发送的数据是否相同。错误是接收端收到的消息与传输的消息不同的情况。
错误可以分为两类: 单比特错误和突发错误 。
1.单比特错误
给定数据单元的唯一一位从1变为0或从0变为1。
单比特错误主要发生在并行数据传输中。例如,如果使用8条线来发送一个字节的8位,如果其中一条线路有噪声,则每个字节会损坏单个位。
2.突发错误
两个或多个位从0更改为1或从1更改为0称为突发错误。从第一个损坏位到最后一个损坏位确定突发错误。
突发错误最有可能发生在串行数据传输中。受影响的位数取决于噪声和数据速率的持续时间。
最流行的错误检测技术是: 单一奇偶校验、二维奇偶校验、校验、循环冗余校验 。
1.单一奇偶校验
单奇偶校验是一种简单的机制,检测错误的成本低廉。在该技术中,冗余比特也称为奇偶校验比特,其附加在数据单元的末端,使得1的数量变为偶数。因此,传输比特的总数将是9比特。
如果1位的数量是奇数,则附加奇偶校验位1,如果1位的数量是偶数,则在数据单元的末尾附加奇偶校验位0。
在接收端,根据接收的数据位计算奇偶校验位,并与接收的奇偶校验位进行比较。
此技术生成偶数的总数为1,因此称为偶数奇偶校验。
单奇偶校验的缺点有两点:第一,它只能检测非常罕见的单位错误;第二,如果两个位互换,则它无法检测到错误。
2.二维奇偶校验
使用以表格形式组织数据的二维奇偶校验可以提高性能。为每一行计算奇偶校验位,相当于单奇偶校验。
在二维奇偶校验中,将一个位块分成行,并将冗余位行添加到整个块中。
在接收端,奇偶校验位与根据接收数据计算的奇偶校验位进行比较。
二维奇偶校验的缺点有两点:第一,如果一个数据单元中的两个位被破坏,而另一个数据单元中完全相同位置的两个位也被破坏,那么二维奇偶校验器将无法检测到错误;第二,在某些情况下,此技术不能用于检测 4 位或更多位错误。
3.校验
校验和是基于冗余概念的__错误检测__技术。它分为两部分: 校验和生成器以及校验和检查 。
校验和__在发送方生成。校验和生成器将数据细分为每个n位的相等段,并且所有这些段通过使用一个补码算法加在一起。该和被补充并附加到原始数据,称为__校验和字段 。扩展数据通过网络传输。
校验和在接收方验证。接收器将输入数据细分为每个n比特的相等段,并且将所有这些段加在一起,然后补充该总和。如果和的补码为零,则接受数据,否则拒绝数据。
接收方遵循以下步骤:
4.循环冗余校验(CRC)
CRC是用于确定错误的__冗余错误__技术。以下是CRC中用于错误检测的步骤:
第一步:在CRC技术中,一串n 0被附加到数据单元,并且该n数小于预定数量的比特数,称为n + 1比特的除法。
第二步:使用一个过程将新扩展的数据除以除数称为二进制除法。从该除法产生的余数称为CRC余数。
第三步:CRC余数替换原始数据末尾的附加0。这个新生成的单元被发送到接收器。
第四步:接收器接收数据,然后接收CRC余数。接收器将整个单元视为一个单元,并将其除以用于查找CRC余数的相同除数。
如果该除法的结果为零,这意味着它没有错误,并且数据被接受。如果该除法的结果不为零,则意味着数据由错误组成。因此,数据被丢弃。
数据链路控制是数据链路层提供的服务,可通过物理介质提供可靠的数据传输。例如,在半双工传输模式中,一个设备一次只能传输数据。如果链路末端的两个设备同时传输数据,它们将发生冲突并导致信息丢失。数据链路层提供设备之间的协调,以便不发生冲突。
数据链路层提供三个功能:
1.线路控制
线路控制是数据链路层的一项功能,它提供链路系统之间的协调。它确定哪个设备可以发送,以及何时可以发送数据。
线路控制可以通过两种方式实现:ENQ/ACK、Poll/select。
(1) END / ACK
END / ACK代表查询/确认当链路上没有错误的接收器并且在两个设备之间具有专用路径以使得能够接收传输的设备是预期的设备时使用。END / ACK协调哪个设备将开始传输以及接收者是否准备好。
发送器发送称为查询(ENQ)的帧,询问接收器是否可用于接收数据。
接收器响应肯定确认(ACK)或否定确认(NACK),其中肯定确认意味着接收器准备接收传输,否定确认意味着接收器不能接受传输。
以下是接收者的回复:
(2) Pool/Select
线路控制的Pool/Select方法适用于将一个设备指定为主站,而其他设备为二级站的拓扑。
在这种情况下,主设备和多个从设备组成一条传输线,所有的交换都是通过主设备进行的,即使目的地是从设备。主要设备控制通信链路,而次要设备遵循主要设备的指令。主要设备确定允许哪个设备使用通信信道。因此,我们可以说它是会话的发起者。
如果主设备想要从辅助设备接收数据,它会要求辅助设备发送任何数据,这个过程称为Pool。如果主设备想要向从设备发送一些数据,那么它会告诉目标从设备准备接收数据,这个过程称为Select。
Select
当主设备有要发送的内容时使用Select模式。
当主设备想要发送一些数据时,它通过发送选择(SEL)帧向辅助设备警告即将到来的传输,帧的一个字段包括预期的辅助设备的地址。
当辅助设备接收SEL帧时,它发送指示辅助就绪状态的确认。
如果辅助设备准备好接受数据,则主设备将两个或更多个数据帧发送到预期的辅助设备。数据传输完成后,辅助设备会发送一个确认,指出已收到数据。
Pool
当主设备想要从辅助设备接收一些数据时,使用轮询模式。
当主设备想要接收数据时,它会询问每个设备是否有任何要发送的内容。
首先,主要询问(轮询)第一个辅助设备,如果它以NACK(否定确认)响应则表示它没有任何要发送的内容。现在,它接近第二个辅助设备,它用ACK响应意味着它有要发送的数据。辅助设备可以一个接一个地发送一个以上的帧,或者有时可能需要在发送每个帧之前发送ACK,这取决于所使用的协议的类型。
2.流量控制
它是一组程序,告诉发送方在数据压倒接收方之前它可以传输多少数据。接收设备具有有限的速度和有限的存储器来存储数据。因此,接收设备必须能够在达到限制之前通知发送设备暂时停止发送。它需要一个缓冲区,一块内存,用于存储信息,直到它们被处理完毕。
目前有两种方法来控制数据流: 停止与等待、滑动窗口 。
(1) 停止与等待
在停止与等待方法中,发送方在它发送的每个帧之后等待确认。
收到确认后,只发送下一帧。交替发送和等待帧的过程继续,直到发送者发送EOT(发送结束)帧。
停止等待的好处
停止与等待方法很简单,因为在发送下一帧之前检查并确认每个帧。
停止等待的缺点
停止等待技术使用效率低,因为每个帧必须一直传输到接收器,并且确认在下一帧发送之前一直传播。发送和接收的每个帧使用遍历链路所需的整个时间。
(2) 滑动窗口
滑动窗口是一种流控制方法,其中发送方可以在获得确认之前发送若干帧。在滑动窗口控制中,可以一个接一个地发送多个帧,由于可以有效地利用通信信道的容量。滑动窗口是指发送方和接收方端的虚拟框。窗口可以在任一端保持帧,并且它提供在确认之前可以传输的帧数的上限。
发件人窗口
在传输开始时,发送方窗口包含n-1帧,当它们被发送出去时,左边界向内移动缩小窗口的大小。例如,如果窗口的大小为w,如果发送了三个帧,则发送方窗口中遗漏的帧数为w-3。
一旦ACK到达,则发送方窗口扩展到将等于ACK确认的帧数的数字。
例如,窗口的大小为7,如果已发送帧0到4并且没有到达确认,则发送方窗口仅包含两个帧,即5和6.现在,如果ACK已到达,则数字4表示0到3帧未损坏,发送方窗口扩展到包括接下来的四个帧。因此,发送方窗口包含六个帧(5,6,7,0,1,2)。
接收窗口
在传输开始时,接收器窗口不包含n帧,但它包含n-1个帧空间。当新帧到达时,窗口的大小会缩小。
接收器窗口不表示接收的帧数,但它表示在发送ACK之前可以接收的帧数。例如,窗口的大小是w,如果接收到三个帧,则窗口中可用的空间数是(w-3)。
一旦发送确认,接收器窗口扩展的数量等于确认的帧数。
假设窗口的大小为7意味着接收器窗口包含七个帧的七个空格。如果接收到一帧,则接收器窗口收缩并将边界从0移动到1.这样,窗口逐个缩小,因此窗口现在包含六个空格。如果已发送0到4的帧,则窗口在发送确认之前包含两个空格。
3.错误控制
错误控制是一种错误检测和重传技术。错误控制的类型如下:
(1) 停止等待ARQ
停止等待ARQ是一种用于在帧损坏或丢失的情况下重新传输数据的技术。该技术的工作原理是发送方在收到最后发送帧的确认之前不发送下一帧。
(2) 重传
重传需要四个功能:
重传的两种可能性:
(3) 滑动窗ARQ
__滑动窗__ARQ是一种用于连续传输错误控制的技术。
用于重传的三个功能:
滑动窗口ARQ中使用的两个协议:
Go-Back-n ARQ :在Go-Back-N ARQ协议中,如果一帧丢失或损坏,则它重新发送所有帧,之后它不接收肯定ACK。
选择性拒绝ARQ :选择性拒绝ARQ技术比Go-Back-n ARQ更有效。在该技术中,仅重传那些已经接收到否定确认(NAK)的帧。接收器存储缓冲区保持所有损坏的帧保持不变,直到正确接收到错误帧。接收器必须具有适当的逻辑,以便以正确的顺序重新插入帧。发送方必须包含一个搜索机制,该机制仅选择所请求的重传帧。
前文讲解了以太网的相关理论知识,接下来笔者将从实际出发,介绍STM32XX7系列ETH外设,从而将理论结合实际应用。
如果从硬件角度来看以太网,则由CPU,MAC,PHY三部分组成的,如下图所示:
上图中DMA集成在CPU,CPU、MAC、PHY并不是集成在同一个芯片内,由于PHY包含大量模拟器件,而MAC是典型的数字电路,考虑到芯片面积及模拟/数字混合架构的原因,将MAC集成进CPU而将PHY留在片外,这种结构是最常见的。 下图是网络接口内部结构图,虚框表示CPU,MAC集成在CPU中,PHY芯片通过MII接口与CPU上的MAC连接。
STM32XX7系列控制器内部集成了一个以太网外设,它实际是一个通过 DMA 控制器进行介质访问控制 (MAC),它的功能就是实现 MAC 层的任务。
以太网提供了可配置、灵活的外设,用以满足客户的各种应用需求。它支持与外部物理层(PHY) 相连的两个工业标准接口:默认情况下使用的介质独立接口 (MII)(在 IEEE 802.3 规范中定义)和简化介质独立接口 (RMII)。它有多种应用领域,例如交换机、网络接口卡等。Nucleo-F746ZG借助以太网外设,STM32F746 控制器可以通过 ETH 外设按照 IEEE 802.3-2002 标准发送和接收 MAC 数据包。遵循IEEE 1588-2008 标准,用于规定联网时钟同步的精度。
ETH 内部自带专用的 DMA 控制器用于 MAC, ETH 支持两个工业标准接口介质独立接口 (MII)和简化介质独立接口 (RMII) 用于与外部 PHY 芯片连接。 MII 和 RMII 接口用于 MAC 数据包传输, ETH 还集成了站管理接口 (SMI) 接口专门用于与外部 PHY 通信,用于访问 PHY 芯片寄存器。
ETH 有专用的 DMA 控制器,它通过 AHB 主从接口与内核和存储器相连, AHB 主接口用于控制数据传输,而 AHB 从接口用于访问“控制与状态寄存器” (CSR) 空间。在进行数据发送是,先将数据有存储器以 DMA 传输到发送 TX FIFO 进行缓冲,然后由 MAC 内核发送;接收数据时, RXFIFO 先接收以太网数据帧,再由 DMA 传输至存储器。 ETH 系统功能框图见下图。
【注】当使用以太网时, AHB 时钟频率必须至少为 25 MHz。
站管理接口 (SMI) 允许应用程序通过 2 线时钟和数据线访问任意 PHY 寄存器。该接口支持访问多达 32 个 PHY。
应用程序可以从 32 个 PHY 中选择一个 PHY,然后从任意 PHY 包含的 32 个寄存器中选择一个寄存器,发送控制数据或接收状态信息。任意给定时间内只能对一个 PHY 中的一个寄存器进行寻址。
MDC 时钟线和 MDIO 数据线在微控制器中均用作复用功能 I/O:
SMI 帧格式
下表中给出了与读操作或写操作有关的帧结构,位传输顺序必须从左到右。
管理帧字段 | |
---|---|
报头(32位) | |
读取 | 1... 1 |
写入 | 1... 1 |
管理帧包括八个字段:
SMI 写操作
当应用程序将 MII 写入位和繁忙位(在以太网 MAC MII 地址寄存器 (ETH_MACMIIAR) 中)置 1 时, SMI 将通过传输 PHY 地址、 PHY 中的寄存器地址以及写入数据(在以太网 MACMII 数据寄存器 (ETH_MACMIIDR) 中)来触发对 PHY 寄存器进行写操作。事务进行期间,应用程序不应更改 MII 地址寄存器的内容或 MII 数据寄存器。在此期间对 MII 地址寄存器或MII 数据寄存器执行的写操作将会忽略(繁忙位处于高电平状态),事务将无错完成。写操作完成后, SMI 将通过复位繁忙位进行指示。
下图显示了写操作的帧格式。
SMI 时钟选择
MAC 启动管理写/读操作。 SMI 时钟是一个分频时钟,其时钟源为应用时钟( AHB 时钟)。分频系数取决于 MII 地址寄存器中设置的时钟范围。下表显示了如何设置时钟范围。
选择 | HCLK时钟 | MDC时钟 |
---|---|---|
000 | 60-100MHz | AHB时钟/42 |
001 | 100-150MHz | AHB时钟/62 |
010 | 20-35MHz | AHB时钟/16 |
011 | 35-60MHz | AHB时钟/26 |
100 | 150-216MHz | AHB时钟/102 |
101, 110,111 | 保留 | - |
介质独立接口 (MII) 定义了 10 Mb/s 和 100 Mb/s 的数据传输速率下 MAC 子层与 PHY 之间的互连。
TX 接口信号编码
MII_TX_EN | MII_TXD[3:0] | 说明 |
---|---|---|
0 | 0000到1111 | 正常帧间 |
1 | 0000到1111 | 正常数据发送 |
RX 接口信号编码
MII_RX_DV | MII_RX_ERR | MII_RXD[3:0] | 说明 |
---|---|---|---|
0 | 0 | 0000到1111 | 正常帧间 |
0 | 1 | 0000 | 正常帧间 |
0 | 1 | 0001到1101 | 保留 |
0 | 1 | 1110 | 错误载波检测 |
0 | 1 | 1111 | 保留 |
1 | 0 | 0000到1111 | 正常数据接收 |
1 | 1 | 0000到1111 | 数据接收出现错误 |
MII 时钟源
要生成 TX_CLK 和 RX_CLK 时钟信号,必须向外部 PHY 提供 25MHz 时钟,如图 474 所示。除了使用外部 25 MHz 石英晶体提供该时钟,还可以通过 STM32F75xxx 和 STM32F74xxx 微控制器的 MCO 引脚输出该信号。这种情况下,必须对 PLL 倍频进行配置,以通过 25 MHz外部石英晶体在 MCO 引脚上获得所需频率。
精简介质独立接口 (RMII) 规范降低了 10/100 Mb/s 下微控制器以太网外设与外部 PHY 间的引脚数。根据 IEEE 802.3u 标准, MII 包括 16 个数据和控制信号的引脚。 RMII 规范将引脚数减少为 7 个(引脚数减少 62.5%)。
RMII 是 MAC 和 PHY 之间的实例化对象。这有助于将 MAC 的 MII 转换为 RMII。 RMII 具有以下特性:
RMII 时钟源
使用外部 50 MHz 时钟驱动 PHY 或使用嵌入式 PLL 生成 50 MHz 频率信号来驱动 PHY。
如果使用RMII接口时,50MHz时钟来源有以下几种方式:
方式一:外部时钟
一个50MHz的外部晶振同时给MAC和PHY供应50MHz时钟,MCU其他的部分用自己独立的时钟。这个方式需要外挂一颗晶振。
方式二:与MCU共用外部时钟
MAC, PHY, MCU都用一颗50MHz外部晶振统一提供时钟源。
方式三:STM32输出时钟源
把50MHz换成25MHz,通过STM32的MCO引脚可以输出同样的25MHz时钟给PHY,然后用PHY内部的PLL配置出50MHz时钟反补给STM32的MAC,这样就满足了PHY和MAC都是50MHz。
值得注意的是,以上设计针对STM32XX7系列。
最后,来看看一个实际硬件案例。
下图是Nucleo-F746ZG开发板的ETH硬件电路图。主要是 LAN8742A 通过 RMII 和 SMI接口与 STM32F746 控制器连接,见下图。
STM32F746通过RMII 接口连接PHY芯片LAN8742, 然后经过百兆网络变压器到RJ45接口。因为 LAN8742A只有 RMII 接口,因此这里与开发板的连接采用了 RMII 接口。电路设计时,将 nINTSEL 引脚通过下拉电阻拉低,也就是REF_CLK Out 模式,设置 nINT/FEFCLKO 为输出 50MHz 时钟,当然前提是在 XTAL1 和 XTAL2 接入了 25MHz 的时钟源。
PHY芯片LAN8742的nRST复位引脚连接到了STM32F746的复位引脚, 两者可以同时使用复位按钮。
全部0条评论
快来发表一下你的评论吧 !