Mac与Phy组成原理的简单分析
2011-12-28 15:30:43
分类: LINUX
本文乃fireaxe原创,使用GPL发布,可以自由拷贝,。但请保持文档的完整性,并注明原作者及原。容可任意使用,但对因使用该容引起的后果不做任何保证。 作者:fireaxe_hqhotmail. 博客:fireaxe.blog.chinaunix.net
Mac与Phy组成原理的简单分析 1 1. general
下图是网口结构简图。网口由CPU、MAC和PHY三部分组成。DMA控制器通常属于CPU的一部分,用虚线放在这里是为了表示DMA控制器可能会参与到网口数据传输中。
对于上述的三部分,并不一定都是独立的芯片,根据组合形式,可分为下列几种类型:
方案一:CPU集成MAC与PHY;
方案二:CPU集成MAC,PHY采用独立芯片;
方案三:CPU不集成MAC与PHY,MAC与PHY采用集成芯片;
本例中选用方案二做进一步说明,因为CPU总线接口很常见,通常都会做成可以像访问存一样去访问,没必要拿出来说,而Mac与PHY之间的MII接口则需要多做些说明。
下图是采用方案二的网口结构图。虚框表示CPU,MAC集成在CPU中。PHY芯片通过MII接口与CPU上的Mac连接。
在软件上对网口的操作通常分为下面几步: 1) 1) 为数据收发分配存; 2) 2) 初始化MAC寄存器;
3) 3) 初始化PHY寄存器(通过MIIM); 4) 启动收发; 2. 2. MII
MII接口是MAC与PHY连接的标准接口。因为各厂家采用了同样的接口,用户可以根据所需的性能、价格,采用不同型号,甚至不同公司的phy芯片。 需要发送的数据通过MII接口中的收发两组总线实现。而对PHY芯片寄存器的配置信息,则通过MII总的一组串口总线实现,即MIIM(MII Management)。 下表列出了MII总线中主要的一些引脚 PIN Name TXD[0:3] TXEN TXCLK RXD[0:3] RXEN RXCLK MDC Direction Description Mac to Phy Transmit Data Mac to Phy Transmit Enable Mac to Phy Transmit Clock Phy to Mac Receive Data Phy to Mac Receive Enable Phy to Mac Receive Clock Mac to Phy Management Data Clock MDIO Bidirection Management Data I/O MIIM只有两个线,时钟信号MDC与数据线MDIO。读写命令均由Mac发起,PHY不能通过MIIM主动向Mac发送信息。由于MIIM只能有Mac发起,我们可以操作的也就只有MAC上的寄存器。
3. 3. DMA
收发数据总是间费时费力的事,尤其对于网络设备来说更是如此。CPU做这些事情显然不合适。既然是数据搬移,最简单的办法当然是让DMA来做。毕竟专业的才是最好的。
这样CPU要做的事情就简单了。只需要告诉DMA起始地址与长度,剩下的事情就会自动完成。
通常在MAC中会有一组寄存器专门用户记录数据地址,tbase与rbase,cpu按MAC要的格式把数据放好后,启动MAC的数据发送就可以了。启动过程常会用到寄存器tstate。 4. 4. MAC
CPU上有两组寄存器用与MAC。一组用户数据的收发,对应上面的DMA;一组用户MIIM,用户对PHY进行配置。
两组寄存器由于都在CPU上,配置方式与其他CPU上寄存器一样,直接读写即可。 数据的转发通过DMA完成。 5. 5. PHY
该芯片是一个10M/100M Ethernet网口芯片
PHY芯片有一组寄存器用户保存配置,并更新状态。CPU不能直接访问这组寄存器,只能通过MAC上的MIIM寄存器组实现间接访问。
同时PHY芯片负责完成MII总线的数据与Media Interface上数据的转发。该转发根据寄存器配置自动完成,不需要外接干预。
一块以太网网卡包括OSI(开方系统互联)模型的两个层。物理层和数据链路层。物理层定义了数据传送与接收所需要的电与光信号、线路状态、时钟基准、数据编码和电路等,并向数据链路层设备提供标准接口。数据链路层则提供寻址机构、数据帧的构建、数据差错检查、传送控制、向网络层提供标准的数据接口等功能。 1.网卡的基本结构
以太网卡中数据链路层的芯片一般简称之为MAC控制器,物理层的芯片我们简称之为PHY。许多网卡的芯片把MAC和PHY的功能做到了一颗芯片中,比如Intel 82559网卡的和3COM 3C905网卡。但是MAC和PHY的机制还是单独存在的,只是外观的表现形式是一颗单芯片。当然也有很多网卡的MAC和PHY是分开做的,比如D-LINK的DFE-530TX等。
图一:MAC和PHY分开的以太网卡(点击放大)
图二:MAC和PHY集成在一颗芯片的以太网卡(点击放大) ①RJ-45接口 ②Transformer(隔离变压器) ③PHY芯片
④MAC芯片 ⑤EEPROM ⑥BOOTROM插槽 ⑦WOL接头 ⑧晶振 ⑨电压转换芯片
⑩LED指示灯
2.什么是MAC?
首先我们来说说以太网卡的MAC芯片的功能。以太网数据链路层其实包含MAC(介质访问控制)子层和LLC(逻辑链路控制)子层。一块以太网卡MAC芯片的作用不但要实现MAC子层和LLC子层的功能,还要提供符合规的PCI界面以实现和主机的数据交换。
MAC从PCI总线收到IP数据包(或者其他网络层协议的数据包)后,将之拆分并重新打包成最大1518Byte,最小64Byte的帧。这个帧里面包括了目标MAC地址、自己的源MAC地址和数据包里面的协议类型(比如IP数据包的类型用80表示)。最后还有一个DWORD(4Byte)的CRC码。
可是目标的MAC地址是哪里来的呢?这牵扯到一个ARP协议(介乎于网络层和数据链路层的一个协议)。第一次传送某个目的IP地址的数据的时候,先会发出一个ARP包,其MAC的目标地址是广播地址,里面说到:”谁是xxx.xxx.xxx.xxx这个IP地址的主人?”因为是广播包,所有这个局域网的主机都收到了这个ARP请求。收到请求的主机将这个IP地址和自己的相比较,如果不相同就不予理会,如果相同就发出ARP响应包。这个IP地址的主机收到这个ARP请求包后回复的ARP响应里说到:”我是这个IP地址的主人”。这个包里面就包括了他的MAC地址。以后的给这个IP地址的帧的目标MAC地址就被确定了。(其它的协议如IPX/SPX也有相应的协议完成这些操作。)
IP地址和MAC地址之间的关联关系保存在主机系统里面,叫做ARP表,由驱动程序和操作系统完成。在Microsoft的系统里面可以用 arp -a 的命令查看ARP表。收到数据帧的时候也是一样,做完CRC以后,如果没有CRC效验错误,就把帧头去掉,把数据包拿出来通过标准的借口传递给驱动和上层的协议客栈,最终正确的达到我们的应用程序。
还有一些控制帧,例如流控帧也需要MAC直接识别并执行相应的行为。
以太网MAC芯片的一端接计算机PCI总线,另外一端就接到PHY芯片上。以太网的物理层又包括MII/GMII(介质独立接口)子层、PCS(物理编码子层)、PMA(物理介质附加)子层、PMD(物理介质相关)子层、MDI子层。而PHY芯片是实现物理层的重要功能器件之一,实现了前面物理层的所有的子层的功能。
3.网络传输的流程
PHY在发送数据的时候,收到MAC过来的数据(对PHY来说,没有帧的概念,对它来说,都是数据而不管什么地址,数据还是CRC),每4bit就增加1bit的检错码,然后把并行数据转化为串行流数据,再按照物理层的编码规则(10Based-T的NRZ编码或100based-T的曼彻斯特编码)把数据编码,再变为模拟信号把数据送出去。(注:关于网线上数据是数字的还是模拟的比较不容易理解清楚。最后我再说) 收数据时的流程反之。
PHY还有个重要的功能就是实现CSMA/CD的部分功能。它可以检测到网络上是否有数据在传送,如果有数据在传送中就等待,一旦检测到网络空闲,再等待一个随机时间后将送数据出去。如果两块网卡碰巧同时送出了数据,那样必将造成冲突,这时候,冲突检测机构可以检测到冲突,然后各等待一个随机的时间重新发送数据。
这个随机时间很有讲究的,并不是一个常数,在不同的时刻计算出来的随机时间都是不同的,而且有多重算法来应付出现概率很低的同两台主机之间的第二次冲突。
许多网友在接入Internt宽带时,喜欢使用”抢线”强的网卡,就是因为不同的PHY碰撞后计算随机时间的方法设计上不同,使得有些网卡比较”占便宜”。不过,抢线只对广播域的网络而言的,对于交换网络和ADSL这样点到点连接到局端设备的接入方式没什么意义。而且”抢线”也只是相对而言的,不会有质的变化。 4.关于网络间的冲突
现在交换机的普及使得交换网络的普及,使得冲突域网络少了很多,极提高了网络的带宽。但是如果用HUB,或者共享带宽接入Internet的时候还是属于冲突域网络,有冲突碰撞的。交换机和HUB最大的区别就是:一个是构建点到点网络的局域网交换设备,一个是构建冲突域网络的局域网互连设备。 我们的PHY还提供了和对端设备连接的重要功能并通过LED灯显示出自己目前的连接的状态和工作状态让我们知道。当我们给网卡接入网线的时候,PHY不断发出的脉冲信号检测到对端有设备,它们通过标准的”语言”交流,互相协商并却定连接速度、双工模式、是否采用流控等。
通常情况下,协商的结果是两个设备中能同时支持的最大速度和最好的双工模式。这个技术被称为Auto Negotiation或者NWAY,它们是一个意思–自动协商。 5.PHY的输出部分
现在来了解PHY的输出后面部分。一颗CMOS制程的芯片工作的时候产生的信号电平总是大于0V的(这取决于芯片的制程和设计需求),但是这样的信号送到100米甚至更长的地方会有很大的直流分量的损失。而且如果外部网现直接和芯片相连的话,电磁感应(打雷)和静电,很容易造成芯片的损坏。 再就是设备接地方法不同,电网环境不同会导致双方的0V电平不一致,这样信号从A传到B,由于A设备的0V电平和B点的0V电平不一样,这样会导致很大的电流从电势高的设备流向电势低的设备。我们如何解决这个问题呢?
这时就出现了Transformer(隔离变压器)这个器件。它把PHY送出来的差分信号用差模耦合的线圈耦合滤波以增强信号,并且通过电磁场的转换耦合到连接网线的另外一端。这样不但使网线和PHY之间没有物理上的连接而换传递了信号,隔断了信号中的直流分量,还可以在不同0V电平的设备中传送数据。 隔离变压器本身就是设计为耐2KV~3KV的电压的。也起到了防雷感应(我个人认为这里用防雷击不合适)保护的作用。有些朋友的网络设备在雷雨天气时容易被烧坏,大都是PCB设计不合理造成的,而且大都烧毁了设备的接口,很少有芯片被烧毁的,就是隔离变压器起到了保护作用。 6.关于传输介质
隔离变压器本身是个被动元件,只是把PHY的信号耦合了到网线上,并没有起到功率放大的作用。那么一网卡信号的传输的最长距离是谁决定的呢?
一网卡的传输最大距离和与对端设备连接的兼容性主要是PHY决定的。但是可以将信号送的超过100米的PHY其输出的功率也比较大,更容易产生EMI的问题。这时候就需要合适的Transformer与之配合。作PHY的老大公司Marvell的PHY,常常可以传送180~200米的距离,远远超过IEEE的100米的标准。 RJ-45的接头实现了网卡和网线的连接。它里面有8个铜片可以和网线中的4对双绞(8根)线对应连接。其中100M的网络中1、2是传送数据的,3、6是接收数据的。1、2之间是一对差分信号,也就是说它们的波形一样,但是相位相差180度,同一时刻的电压幅度互为正负。这样的信号可以传递的更远,抗干扰能力强。同样的,3、6也一样是差分信号。
网线中的8根线,每两根扭在一起成为一对。我们制作网线的时候,一定要注意要让1、2在其中的一对,3、6在一对。否则长距离情况下使用这根网线的时候会导致无法连接或连接很不稳定。 现在新的PHY支持AUTO MDI-X功能(也需要Transformer支持)。它可以实现RJ-45接口的1、2上的传送信号线和3、6上的接收信号线的功能自动互相交换。有的PHY甚至支持一对线中的正信号和负信号的功能自动交换。这样我们就不必为了到底连接某个设备需要使用直通网线还是交叉网线而费心了。这项技术已经被广泛的应用在交换机和SOHO路由器上。
在1000Basd-T网络中,其中最普遍的一种传输方式是使用网线中所有的4对双绞线,其中增加了4、5和7、8来共同传送接收数据。由于1000Based-T网络的规包含了AUTO MDI-X功能,因此不能严格确定它们的传出或接收的关系,要看双方的具体的协商结果。 7.PHY和MAC之间如何进行沟通
下面继续让我们来关心一下PHY和MAC之间是如何传送数据和相互沟通的。通过IEEE定义的标准的MII/GigaMII(Media Independed Interfade,介质独立界面)界面连接MAC和PHY。这个界面是IEEE定义的。MII界面传递了网络的所有数据和数据的控制。
而MAC对PHY的工作状态的确定和对PHY的控制则是使用SMI(Serial Management Interface)界面通过读写PHY的寄存器来完成的。PHY里面的部分寄存器也是IEEE定义的,这样PHY把自己的目前的状态反映到寄存器里面,MAC通过SMI总线不断的读取PHY的状态寄存器以得知目前PHY的状态,例如连接速度,双工的能力等。当然也可以通过SMI设置PHY的寄存器达到控制的目的,例如流控的打开关闭,自协商模式还是强制模式等。
我们看到了,不论是物理连接的MII界面和SMI总线还是PHY的状态寄存器和控制寄存器都是有IEEE的规的,因此不同公司的MAC和PHY一样可以协调工作。当然为了配合不同公司的PHY的自己特有的一些功能,驱动需要做相应的修改。
一片网卡主要功能的实现就基本上是上面这些器件了。
其他的,还有一颗EEPROM芯片,通常是一颗93C46。里面记录了网卡芯片的供应商ID、子系统供应商ID、网卡的MAC地址、网卡的一些配置,如SMI总线上PHY的地址,BOOTROM的容量,是否启用BOOTROM引导系统等东西。
很多网卡上还有BOOTROM这个东西。它是用于无盘工作站引导操作系统的。既然无盘,一些引导用必需用到的程序和协议栈就放到里面了,例如RPL、PXE等。实际上它就是一个标准的PCI ROM。所以才会有一些硬盘写保护卡可以通过烧写网卡的BootRom来实现。其实PCI设备的ROM是可以放到主板BIOS里面的。启动电脑的时候一样可以检测到这个ROM并且正确识别它是什么设备的。AGP在配置上和PCI很多地方一样,所以很多显卡的BIOS也可以放到主板BIOS里面。这就是为什么板载的网卡我们从来没有看到过BOOTROM的原因。 8.网卡的供电
最后就是电源部分了。大多数网卡现在都使用3.3V或更低的电压。有的是双电压的。因此需要电源转换电路。
而且网卡为了实现Wake on line功能,必须保证全部的PHY和MAC的极少一部分始终处于有电的状态,这需要把主板上的5V Standby电压转换为PHY工作电压的电路。在主机开机后,PHY的工作电压应该被从5V转出来的电压替代以节省5V Standby的消耗。(许多劣质网卡没有这么做)。
有Wake on line功能的网卡一般还有一个WOL的接口。那是因为PCI2.1以前没有PCI设备唤醒主机的功能,所以需要着一根线通过主板上的WOL的接口连到南桥里面以实现WOL的功能。
新的主板合网卡一般支持PCI2.2/2.3,扩展了PME#信号功能,不需要那个接口而通过PCI总线就可以实现唤醒功能。 结语
一块以太网卡就是这些部分组成。它们紧密地配合并且相互协调,供给我们一个稳定而告诉的网络接入。网络的普及不但极增加了工作效率,而且使我们可以自由的驰骋在Internet的海洋中! 注解:
网线上的到底是模拟信号还是数字信号呢?
答案是模拟信号。因为它传出和接收是采用的模拟的技术。虽然它传送的信息是数字的,并不是传送的信息是数字的,信号就可以叫做数字信号。
简单的例子:我们知道是模拟信号,但是当我们拨号上网的时候,线里传送的是数字信息,但信号本身依旧是模拟的。然而ADSL同样是通过线传送的,却是数字信号。这取决于它传出和接受采用的技术。