博客系列

GMAC接口(1)——GMAC简介
GMAC接口(2)——协议
GMAC接口(3)——传输描述符

GMAC接口(4)——编程指南
GMAC接口(5)——LWIP移植

1.OSI

在这里插入图片描述
OSI,Open System Interconnect,开放式系统互连。
OSI是一个开放性的通信系统互连参考模型,它是一个定义得非常好的协议规范。
OSI模型有7层结构,每层都可以有几个子层。
OSI的7层从上到下分别是:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层。
其中高层(即应用层、表示层、会话层、传输层)定义了应用程序的功能,下面3层(即网络层、数据链路层、物理层)主要面向通过网络的端到端,点到点的数据流。

1.1.物理层

计算机之间需要用光缆、电缆、双绞线、无线电波等连接,完成组网,才能通讯
物理层功能:主要是基于电器特性发送高低电压(电信号),高电压对应1,低电压对应0。
物理层规定了激活、维持、关闭通信端点之间的机械特性、电气特性、功能特性以及过程特性。该层为上层协议提供了一个传输数据的物理媒体。
在这一层,数据的单位称为比特(bit)。
属于物理层定义包括:EIA/TIA RS-232、EIA/TIA RS-449、V.35、RJ-45等。

1.2.数据链路层

单纯的电信号0和1没有任何意义,必须规定电信号多少位一组,每组什么意思。

数据链路层功能:定义传输数据的分组方式,数据格式。
数据链路层在不可靠的物理介质上提供可靠的传输。该层的作用包括:物理地址寻址、数据的成帧、流量控制、数据的检错、重发等。
在这一层,数据的单位称为帧(frame)。
数据链路层协议包括:SDLC、HDLC、PPP、STP、帧中继等。

1.3.网络层

网络层负责对子网间的数据包进行路由选择。网络层还可以实现拥塞控制、网际互连等功能。
在这一层,数据的单位称为数据包(packet)。
网络层协议包括:IP、IPX、RIP、OSPF、ARP、RARP、ICMP、IGMP等。

1.4.传输层

传输层是第一个端到端,即主机到主机的层次。传输层负责将上层数据分段并提供端到端的、可靠的或不可靠的传输。此外,传输层还要处理端到端的差错控制和流量控制问题。
在这一层,数据的单位称为数据段(segment)。
传输层协议的包括:TCP、UDP、SPX等。

补充:端口范围:0 - 65535 , 0 -1023 为系统占用端口

tcp协议
可靠传输,TCP数据包没有长度限制,理论上可以无限长,但是为了保证网络的效率,通常TCP数据包的长度不会超过IP数据包的长度,以确保单个TCP数据包不必再分割。

udp协议
不可靠传输,“报头”部分一共只有8个字节,总长度不超过65,535字节,正好放进一个IP数据包。

1.5.会话层

会话层管理主机之间的会话进程,即负责建立、管理、终止进程之间的会话。会话层还利用在数据中插入校验点来实现数据的同步。

1.6.表示层

表示层对上层数据或信息进行变换以保证一个主机应用层信息可以被另一个主机的应用程序理解。表示层的数据转换包括数据的加密、压缩、格式转换等

1.7.应用层

应用层是OSI参考模型的最高层,是用户与网络的接口。该层通过应用程序来完成网络用户的应用需求,如文件传输、收发电子邮件等。
TCP与UDP用一个端口发送信息是否冲突不冲突,TCP,UDP可以绑定同一个端口来进行通信,许多协议已经这样做,udp/53和tcp/53,因为数据接受时根据五元组(传输协议,源ip,目的ip,源端口,目的端口)判断接受者的

用户使用的应用程序,工作于应用层

应用层功能:规定应用程序的数据格式

2.背景

以太网(Ethernet)是现实世界中最普遍的一种计算机网络,最早是由美国的Xerox公司和Stanford大学合作研制。

1980年,DEX、Intel和Xerox 3个公司合作制定了有关以太网的工业标准,提出了Ethernet规范V1.0,即蓝皮书《以太网:数据链路层和物理层规范1.0版》。

1982年修改为第二版规范,即DIX Ethernet V2,成为世界上第一个局域网产品的规范。1983年,IEEE802委员会以DIX Ethernet V2为基础,推出了IEEE802.3。IEEE802.3标准是以太网核心的内容,也是一个不断发展的协议体系。截止到现在IEEE802.3工作组总共定义了标准以太网、快速以太网、千兆以太网、万兆以太网、新型以太网五大以太网标准体系。这些标准最明显的区别就是速率不同。
在这里插入图片描述
在这里插入图片描述
10/100/1000:表示网线设计的频率,单位MHz。值越大,网线所支持的速度就越快。100 MHz表示以每秒100Mbit的速度传输,这在理论上指的就是12.5 MB/s。当然,实际应用中考虑到冗余设计和干扰等因素,真实值可能会小很多。
BASE:BASE是英文BASEband的缩写,指的就是基带。表示没有使用频分复用或者其它频率转换技术,每一个信号在一个单一频率上完全控制线缆。
数字/T/F/C等:最后一个如果是数字,则表示单段网线的最大长度(基准单位是100m);如果是字母,则依次解释如下:T代表承载信号的物理介质是双绞线缆(Twisted Pair Cable,又分为UTP(Unshielded Twisted Pair,非屏蔽双绞线)和STP(Shielded Twicted Pair,屏蔽双绞线)两种),在这里每一对传送信号的双绞线互相缠绕以减少电磁干扰和串扰;F表示光纤;
最后的字母或数字(4/X等): 在同一种传送速率下有多种不同的标准,它们之间以一个字母或数字跟随T/F/C之后的方式来区隔(例如TX)。它显示了网线的结构并指出包含的绞线对的数量。某些高速标准使用同轴电缆,则分配代号为CX。

3.GMAC系统框架

在这里插入图片描述

网络部分通常由MAC控制器和PHY构成。
在这里插入图片描述

CPU,MAC,PHY并不是集成在同一个芯片内,由于PHY包含大量模拟器件,而MAC是典型的数字电路,考虑到芯片面积及模拟/数字混合架构的原因,将MAC集成进SOC而将PHY留在片外,这种结构是最常见的。
MAC控制器主要完成数据链路层的IP数据报打包成网络帧并将数据发送给PHY。
PHY主要完成速度协商,数字信号到模拟信号的转换,最后把信号输出到网线上。

3.1MAC

MAC(Media Access Control),即媒体访问控制子层协议。
该协议位于OSI七层协议中数据链路层的下半部分,主要负责控制与连接物理层的物理介质。
在发送数据的时候,MAC协议可以事先判断是否可以发送数据,如果可以发送将给数据加上一些控制信息,最终将数据以及控制信息以规定的格式发送到物理层;
在接收数据的时候,MAC协议首先判断输入的信息并是否发生传输错误,如果没有错误,则去掉控制信息发送至LLC层.该层协议是以太网MAC由IEEE-802.3以太网标准定义.最新的MAC同时支持10Mbps和100Mbps两种速率。

3.2PHY

在这里插入图片描述

PHY是物理接口收发器,它实现物理层.IEEE-802.3标准定义了以太网PHY.包括MII/GMII(介质独立接口)子层,PCS(物理编码子层),PMA(物理介质附加)子层,PMD(物理介质相关)子层,MDI子层.它符合IEEE-802.3k中用于10BaseT(第14条)和100BaseTX(第24条和第25条)的规范

PHY在发送数据的时候,收到MAC过来的数据(对PHY来说,没有帧的概念,对它来说,都是数据而不管什么地址,数据还是CRC.对于100BaseTX因为使用4B/5B编码,每4bit就增加1bit的检错码),然后把并行数据转化为串行流数据,再按照物理层的编码规则把数据编码,再变为模拟信号把数据送出去.收数据时的流程反之.PHY还有个重要的功能就是实现CSMA/CD的部分功能.它可以检测到网络上是否有数据在传送,如果有数据在传送中就等待,一旦检测到网络空闲,再等待一个随机时间后将送数据出去.如果两个碰巧同时送出了数据,那样必将造成冲突,这时候,冲突检测机构可以检测到冲突,然后各等待一个随机的时间重新发送数据.这个随机时间很有讲究的,并不是一个常数,在不同的时刻计算出来的随机时间都是不同的,而且有多重算法来应付出现概率很低的同两台主机之间的第二次冲突.

PHY还提供了和对端设备连接的重要功能并通过LED灯显示出自己目前的连接的状态和工作状态让我们知道.当我们给网卡接入网线的时候,PHY不断发出的脉冲信号检测到对端有设备,它们通过标准的”语言”交流,互相协商并却定连接速度、双工模式、是否采用流控等.通常情况下,协商的结果是两个设备中能同时支持的最大速度和最好的双工模式.这个技术被称为AutoNegotiation或者NWAY,它们是一个意思–自动协商.

具体传输过程为,发送数据时,网卡首先侦听介质上是否有载波(载波由电压指示),如果有,则认为其他站点正在传送信息,继续侦听介质.一旦通信介质在一定时间段内(称为帧间缝隙IFG=9.6微秒)是安静的,即没有被其他站点占用,则开始进行帧数据发送,同时继续侦听通信介质,以检测冲突.在发送数据期间,如果检测到冲突,则立即停止该次发送,并向介质发送一个“阻塞”信号,告知其他站点已经发生冲突,从而丢弃那些可能一直在接收的受到损坏的帧数据,并等待一段随机时间(CSMA/CD确定等待时间的算法是二进制指数退避算法).在等待一段随机时间后,再进行新的发送.如果重传多次后(大于16次)仍发生冲突,就放弃发送.接收时,网卡浏览介质上传输的每个帧,如果其长度小于64字节,则认为是冲突碎片.如果接收到的帧不是冲突碎片且目的地址是本地地址,则对帧进行完整性校验,如果帧长度大于1518字节(称为超长帧,可能由错误的LAN驱动程序或干扰造成)或未能通过CRC校验,则认为该帧发生了畸变.通过校验的帧被认为是有效的,网卡将它接收下来进行本地处理.

PHY内部环回
在这里插入图片描述
PHY外部环回
在这里插入图片描述
在这里插入图片描述
自协商(Auto-Negotiation)
以太网技术发展到100Mbps速率以后,出现了一个如何与原10Mbps以太网设备兼容的问题,自协商技术就是为了解决这个问题而制定的。

自协商功能允许一个网络设备将自己所支持的工作模式信息传达给网络上的对端,并接受对方可能传递过来的相应信息。自协商功能完全由物理层芯片设计实现,因此并不使用专用数据报文或带来任何高层协议开销。

自协商功能的基本机制就是将协商信息封装进一连串修改后的连接整合性测试脉冲(FLP快速连接脉冲)。每个网络设备必须能够在上电、管理命令或是用户干预时发出此串脉冲。快速连接脉冲包含一系列连接整合性测试脉冲组成的时钟/数字序列。将这些数据从中提取出来就可以得到对端设备支持的工作模式,以及一些用于协商握手机制的其他信息。

当协商双方都支持一种以上的工作方式时,需要有一个优先级方案来确定一个最终工作方式。光纤以太网是不支持自协商的。对光纤而言,链路两端的工作模式必须使用手工配置(速度、双工模式、流控等),如果光纤两端的配置不同是不能正确通信的。在实际工作与项目中,对于所有介质的以太网,通过手动配置来确定端口参数,可以避免一些不必要的麻烦。

在具备自协商能力的端口没有Link的情况下,端口一直发送FLP,在FLP中包含着自己的连接能力信息,包括支持的速率能力、双工能力、流控能力等。这个连接能力是从自协商能力寄存器中得到的(Auto-Negotiation Advertisement Register ,PHY标准寄存器地址4 )。依靠脉冲位置编码携带数据。一个FLP突发包含33个脉冲位置。17个奇数位置脉冲为时钟脉冲,时钟脉冲总是存在的;16个偶数位置脉冲用来表示数据:此位置有脉冲表示1,此位置没有脉冲表示0。这样1个FPL的突发就可以传输16bit的数据。自协商交互数据就这样通过物理线路被传输。

如果两端都支持自协商,则都会接收到对方的FLP,并且把FLP中的信息解码出来。得到对方的连接能力。并且把对端的自协商能力值记录在自协商对端能力寄存器中(Auto-Negotiation Link Partner Ability Register , PHY标准寄存器地址5 )。同时把状态寄存器(PHY标准寄存器地址1)的自协商完成bit(bit5)置成1。在自协商未完成的情况下,这个bit一直为0。然后各自根据自己和对方的最大连接能力,选择最好的连接方式Link。比如,如果双方都即支持10M也支持100M,则速率按照100M连接;双方都即支持全双工也支持半双工,则按照全双工连接。一定连接建立后,FLP就停止发送。直到链路中断,或者得到自协商Restart命令时,才会再次发送FLP。

并行检测
为了保证在对端不能支持自协商的情况下也能连接,引入了被称为并行检测(Parallel Detection)的机制。在一端打开自协商,另一端关闭自协商的情况下,连接的建立就依靠并行检测功能实现。
并行检测机制是这样的:在具有自协商能力的设备端口上,如果接收不到FLP,则检测是否有10M链路的特征信号或100M链路的特征信号。
1) 如果设备是10M设备,不支持自协商,则在链路上发送普通连接脉冲(Normal Link Pulse)简称NLP。NLP仅仅表示设备在位,不包含其它的额外信息。
2) 如果是100M设备,不支持自协商,则在没有数据的情况下,在链路上一直发送4B/5B编码的Idle符号。
并行检测机制如果检测到NLP,则知道对方支持10M速率;如果检测到4B/5B编码的Idle符号,则知道对方支持100M速率。但是对方是否支持全双工、是否支持流控帧这些信息是无法得到的。因此在这种情况下,认为对方只支持半双工,不支持全双工,且不支持流控帧。
基于以上原理,在对端不打开自协商时,打开自协商的一方只能协商成半双工模式。

802.3协议规定,通过并行检测建立连接后,PHY的状态寄存器(PHY标准寄存器地址1)的自协商完成bit(bit5)依然要置位成1,尽管链路上并非使用了真正的自协商操作。同时规定在自协商完成bit为1的情况下,本地自协商能力寄存器(PHY标准寄存器地址4)和对端自协商能力寄存器(PHY标准寄存器地址5)是有意义的。所以,要把寄存器5中的数据更新。如果建立的连接为10M,则寄存器5的10M能力bit(bit5)置1,其它bit置0,表示对端只能支持10M半双工;如果建立的连接为100M,则寄存器5的100M能力bit(bit7)置1,其它bit置0,表示对端只能支持100M半双工。

4.接口

GMAC与PHY接口支持四种模式:MII、GMII、RMII、RGMII。
以太网的通信离不开物理层 PHY 芯片的支持,以太网 MAC 和 PHY 之间有一个接口,常用的接口有MII、 RMII、 GMII、 RGMII 等。

MII(Medium Independent Interface, 媒体独立接口): MII 支持 10Mbps 和 100Mbps 的操作,数据位宽为 4 位
在 100Mbps 传输速率下,时钟频率为 25Mhz
在 10Mbps 传输速率下,时钟频率为 2.5Mhz

RMII(Reduced MII): RMII 是 MII 的简化版, 数据位宽为 2 位
在 100Mbps 传输速率下,时钟频率为 50Mhz
在 10Mbps 传输速率下,时钟频率为 5Mhz

GMII(Gigabit MII): GMII 接口向下兼容 MII 接口, 支持 10Mbps、 100Mbps 和 1000Mbps 的操作,数据位宽为 8 位
在 1000Mbps 传输速率下,时钟频率为 125Mhz
在 100Mbps 传输速率下,时钟频率为 25Mhz
在 10Mbps 传输速率下,时钟频率为 2.5Mhz

RGMII(Reduced GMII): RGMII 是 GMII 的简化版,数据位宽为 4 位
在 1000Mbps 传输速率下,时钟频率为 125Mhz,在时钟的上下沿同时采样数据
在 100Mbps传输速率下,时钟频率为25MHz,为单个时钟沿采样
在 10Mbps传输速率下,时钟频率为2.5MHz,为单个时钟沿采样
在千兆以太网中,常用的接口为 RGMII 和 GMII 接口。 RGMII 接口的优势是同时适用于10M/100M/1000Mbps 通信速率,同时占用的引脚数较少。但 RGMII 接口也有其缺点,就是在 PCB 布线时需要尽可能对时钟、控制和数据线进行等长处理,且时序约束相对也更为严格。

4.1MII

MII(Media Independent Interface),媒体独立接口。
所有的这些接口都从MII而来,MII是(Medium Independent Interface)的意思 ,是指不用考虑媒体是铜轴、光纤、电缆等,因为这些媒体处理的相关工作都有PHY或者叫做MAC的芯片完成。
MII支持10兆和100兆的操作,一个接口由14根线组成 ,它的支持还是比较灵活的,但是有一个缺点是因为它一个端口用的信号线太多,如果一个8端口的交换机要用到112根线,16端口就要用到224根线,到32端口的话就要用到448根线,一般按照这个接口做交换机,是不太现实的,所以现代的交换机的制作都会用到其它的一些从MII简化出来的标准,比如RMII、SMII、GMII等。
MII,即媒体独立接口,是IEEE-802.3定义的以太网行业标准,用于 Fast Ethernet MAC-block 与各种类型的PHY 连接。 它包括一个数据接口 ,以及一个MAC和PHY之间的管理接口 。数据接口包括分别用于发送器和接收器的两条独立信道。每条信道都有自己的数据、时钟和控制信号 。MII数据接口总共需要16个信号。管理接口是个双信号接口:一个是时钟信号,另一个是数据信号。通过管理接口,上层能监视和控制PHY 。
在其他速率下工作的与 MII等效的接口有:AUI(10M以太网)、GMII(Gigabit以太网)和XAUI(10-Gigabit以太网)。MII Management interface只有两条信号线。
ETHERNET的接口实质是MAC通过MII总线控制PHY的过程。

MII以4位半字节方式传送数据双向传输,时钟速率25MHz。其工作速率可达100Mb/s。MII管理接口是个双信号接口,一个是时钟信号,另一个是数据信号。通过管理接口,上层能监视和控制PHY。其管理是使用SMI(Serial Management Interface)总线通过读写PHY的寄存器来完成的。PHY里面的部分寄存器是IEEE定义的,这样PHY把自己的目前的状态反映到寄存器里面,MAC通过SMI总线不断的读取PHY的状态寄存器以得知目前PHY的状态,例如连接速度,双工的能力等。当然也可以通过SMI设置PHY的寄存器达到控制的目的,例如流控的打开关闭,自协商模式还是强制模式等。不论是物理连接的MII总线和SMI总线还是PHY的状态寄存器和控制寄存器都是有IEEE的规范的,因此不同公司的MAC和PHY一样可以协调工作。当然为了配合不同公司的PHY的自己特有的一些功能,驱动需要做相应的修改。

PHY是物理接口收发器,它实现物理层。包括MII/GMII(介质独立接口)子层、PCS(物理编码子层)、PMA(物理介质附加)子层、PMD(物理介质相关)子层、MDI子层。

100BaseTX采用4B/5B编码。
PHY在发送数据的时候,收到MAC过来的数据(对PHY来说,没有帧的概念,对它来说,都是数据而不管什么地址,数据还是CRC),每4bit就增加1bit的检错码,然后把并行数据转化为串行流数据,再按照物理层的编码规则把数据编码,再变为模拟信号把数据送出去。收数据时的流程反之。PHY还有个重要的功能就是实现CSMA/CD的部分功能。它可以检测到网络上是否有数据在传送,如果有数据在传送中就等待,一旦检测到网络空闲,再等待一个随机时间后将送数据出去。如果两个碰巧同时送出了数据,那样必将造成冲突,这时候,冲突检测机构可以检测到冲突,然后各等待一个随机的时间重新发送数据。这个随机时间很有讲究的,并不是一个常数,在不同的时刻计算出来的随机时间都是不同的,而且有多重算法来应付出现概率很低的同两台主机之间的第二次冲突。通信速率通过双方协商,协商的结果是两个设备中能同时支持的最大速度和最好的双工模式。这个技术被称为Auto Negotiation或者NWAY。隔离变压器把PHY送出来的差分信号用差模耦合的线圈耦合滤波以增强信号,并且通过电磁场的转换耦合到连接网线的另外一端。RJ-45中1、2是传送数据的,3、6是接收数据的。新的PHY支持AUTO MDI-X功能(也需要隔离变压器支持)。它可以实现RJ-45接口的1、2上的传送信号线和3、6上的接收信号线的功能自动互相交换。
在这里插入图片描述
TXD(Transmit Data)[3:0]:数据发送信号,共4根信号线;
RXD(Receive Data)[3:0]:数据接收信号,共4根信号线;
TX_ER(Transmit Error): 发送数据错误提示信号,同步于TX_CLK,高电平有效,表示TX_ER有效期内传输的数据无效。对于10Mbps速率下,TX_ER不起作用;
RX_ER(Receive Error): 接收数据错误提示信号,同步于RX_CLK,高电平有效,表示RX_ER有效期内传输的数据无效。对于10Mbps速率下,RX_ER不起作用;
TX_EN(Transmit Enable): 发送使能信号,只有在TX_EN有效期内传的数据才有效;
RX_DV(Reveive Data Valid): 接收数据有效信号,作用类型于发送通道的TX_EN;
TX_CLK:发送参考时钟,100Mbps速率下,时钟频率为25MHz,10Mbps速率下,时钟频率为2.5MHz。注意,TX_CLK时钟的方向是从PHY侧指向MAC侧的,因此此时钟是由PHY提供的。
RX_CLK:接收数据参考时钟,100Mbps速率下,时钟频率为25MHz,10Mbps速率下,时钟频率为2.5MHz。RX_CLK也是由PHY侧提供的。
CRS:Carrier Sense,载波侦测信号,不需要同步于参考时钟,只要有数据传输,CRS就有效,另外,CRS只有PHY在半双工模式下有效;
COL:Collision Detectd,冲突检测信号,不需要同步于参考时钟,只有PHY在半双工模式下有效。
MII接口一共有16根线。

4.2GMII

GMII(Gigabit Media Independent Interface),千兆媒体独立接口。
GMII接口–(数据线: 11 * 2 + 2 == 24线)
GMII采用8位接口数据,工作时钟125MHz,因此传输速率可达1000Mbps(每个数据收发口每秒有125M个周期的电平变换,收发各8个口)。同时兼容MII所规定的10/100 Mbps工作方式。
发送:
GTXCLK/TXCLK:
千兆模式下,MAC提供这个时钟(与MII区别),其他信号和这个信号同步
百兆模式下,PHY提供这个时钟,其他信号和这个同步)
TXEN——发送器使能信号
TXER——发送器错误(用于破坏一个数据包)
TXD[7…0]——被发送数据

接收:
RXCLK——接收时钟信号(从收到的数据中提取,因此与GTXCLK无关联)
RXDV——接收数据有效指示
RXER——接收数据出错指示
RXD[7…0]——接收数据

管理配置:(用于配置PHY)
MDC——配置接口时钟
MDIO——配置接口I/O

4.3RMII

RMII(Reduced Media Independent Interface),精简媒体独立接口。

4.4RGMII

RGMII(Reduced Gigabit Media Independent Interface),精简千兆媒体独立接口。
Reduced GMII,GMII采用8位数据传输,RGMII采用4位数据传输,所以这个按字面意思理解就是减少的GMII。这个是因为RGMII在时钟的上升沿和下降沿均采样数据,所以数据位减少一般的情况下还是可以达到千兆的速率。其工作时钟125兆,兼容MII规定的10/100Mbps,
在这里插入图片描述
RX_CTL-:接收数据控制信号。
RD:四位并行的接收数据线。
TX_CTL:发送数据控制信号。
TD:四位并行的发送数据线。

由GMII的24线简化为14线,TX/RX数据宽度从8为变为4位。
为了保持1000Mbps的传输速率不变,RGMII接口在时钟的上升沿和下降沿都采样数据,时钟频率仍旧为125MHz。
(100M和10M时参考时钟为25Mhz和2.5MHz)
在参考时钟的上升沿发送GMII接口中的TXD[3:0]/RXD[3:0];
在参考时钟的下降沿发送GMII接口中的TXD[7:4]/RXD[7:4]。

使能和error合到一根线上:
TX_EN信号线上传送TX_EN和TX_ER两种信息,在TX_CLK的上升沿发送TX_EN,下降沿发送TX_ER;RX同理。

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐