精华内容
下载资源
问答
  • 以太网网卡的结构和工作原理

    千次阅读 2017-05-06 16:00:06
    以太网网卡的结构和工作原理,按照老师的要求写的一个小论文。

    以太网网卡的结构和工作原理

     

    论文摘要:以太网(Ethernet)是一种由美国Xerox公司,DEC公司和Intel公司共同开发的基带局域数据通信网,目的是建立分布式处理和办公室自动化应用方面的工业标准,目前已经成为使用最多的一种局域网。以太网的拓扑结构是总线结构,所以也称为总线局域网。计算机与外界局域网的连接是通过主机箱内插入一块网络接口板,又称为网络适配器(Adapter)或网络接口卡(NetWork Interface CardNIC),或“网卡”。

     

    第一部分:以太网网卡的结构

    以太网卡是最常见的网络接口卡,采用的CSMA/CD(载波侦听多路访问/冲突检测)控制技术,主要定义物理层和数据链路层的工作方式。数据链路层和物理层实现各自的功能,相互之间不关心对方如何操作。二者之间由标准接口(例如MII,GMII等)来传递数据和控制。

    以太网卡的物理层根据连接的传输介质分为RJ-45,光纤,无线等,它们的区别在于传送信号的物理介质和媒介不同。这些都在IEEE的802协议族中有详细的定义。

    下面以符合IEEE 802.3和IEEE 802.3u规范的网卡为例说明网卡的基本结构和工作原理。

     

    1.以太网网卡的基本结构

         网络接口卡(NetWork Interface CardNIC),简称网卡,又叫做网络适配器(如下图所示),是连接计算机和网络硬件的设备,它一般插在计算机的主板扩展槽中。它的标准是由IEEE来定义的。网卡工作于OSI的最底层,也就是物理层。网卡的类型不同,与之对应的网线或者其他网络设备也不同,不能盲目混合使用。

     

    一块以太网卡包括OSI(开放系统互联)模型的两个层———物理层和数据链路层。物理层定义了数据传送与接收所需要的电与光信号,线路状态,时钟基准,数据编码和电路等,并向数据链路层设备提供标准接口。数据链路层则提供寻址机构,数据帧的构建,数据差错检查,传送控制,向网络层提供标准的数据接口等功能。

    以太网卡中数据链路层的芯片一般简称为MAC控制器,物理层的芯片简称为PHY。许多网卡把MACPHY的功能做到了一颗芯片中,比如Intel 82559网卡和3COM 3C905网卡。(如图一)但是MACPHY的机制还是单独存在的,只是外观的表现形式是一颗单芯片。当然也有很多网卡的MACPHY是分开做的,比如D-LINKDFE-530TX等(如图二)。

    图一   MACPHY集成在一颗芯片上

     

     

    图二    MAC和PHY分开的以太网卡

         RJ-45网卡通常包含一下10个部件:RJ-45接口,隔离变压器(Transformer),PHY芯片,MAC芯片,EEPROMBOOTROM插槽,WOL接头,晶振,电压转换芯片和LED指示灯。

     

    2.以太网网卡的芯片---MAC芯片

    主板网卡芯片是指整合了网络功能的主板所集成的网卡芯片,与之相对应,在主板的背板上也有相应的网卡接口(RJ-45),该接口一般位于音频接口或USB接口附近。

    以太网数据链路层包含MAC(介质访问控制)子层LLC(逻辑链路控制)子层。一块以太网卡MAC的芯片不但要实现MAC子层和LLC子层的功能,还要提供符合规范的PCI界面以实现和主机的交换。

    以太网MAC芯片的一端接计算机PCI总线,另外一端就接到PHY芯片上。以太网的物理层又包括MII/GMII(介质独立接口)子层,PCS(物理编码子层),PMA(物理介质附加)子层,PMD(物理介质相关)子层,MDI子层。而PHY芯片是实现物理层的重要功能器件之一,实现了前面物理层的所有的子层的功能。

     

    3.以太网网卡信号的处理

    MAC芯片从PCI总线接收到IP数据包(包括其它网络层协议的数据包)后,将包拆分并重新打包成最大1518B,最小64B的帧。这个帧里面包括了目标MAC地址,自己的源MAC地址和数据包里面的协议类型(比如IP数据包的类型用80表示)。最后还有一个DWORD4B)的CRC码。

    目标MAC地址通过ARP协议来获得。第一次传送某个目的IP地址的数据的时候,先发出一个ARP包,其MAC帧的目标地址是广播地址,询问:“谁的IP地址是xxx.xxx.xxx.xxx(IP地址)?”因为是广播包,所以局域网所有的主机都收到了这个ARP请求。收到请求的主机将这个IP地址和自己的相比较,如果不相同就丢弃,如果相同就发出ARP响应包,并把自己的MAC地址封装在相应数据包中,这样,发给这个IP地址的帧的目标MAC地址就被确定了(其他的协议如IPX/SPX也有相应的协议完成这些操作)。

    第二部分:以太网网卡的工作原理

    · 网卡充当计算机和网络缆线之间的物理接口或连线,负责将计算机中的数字信号转换成电或光信号。

    · 网卡要承担串行数据或并行数据间的转换,数据在计算机总线中并行传输,而在网络的物理缆线中以串行的比特流传输。

         以太网卡中数据链路层的芯片一般简称之为 MAC 控制器,物理层的芯片我们简称之为PHY。许多网卡的芯片把MAC 和PHY 的功能做到了一颗芯片中,比如Intel 82559 网卡的和3COM 3C905 网卡。但是MAC 和PHY 的机制还是单独存在的,只是外观的表现形式是一颗单芯片。当然也有很多网卡的MAC 和PHY 是分开做的,比如D-LINK 的DFE-530TX等。

         PHY在发送数据的时候,收到MAC过来的数据(对PHY来说,没有帧的概念,对他来说,都是数据而不管什么地址,数据还是CRC),每4bit就增加1bit的检错码,然后把并行数据转化为串行流数据,再按照物理层的编码规则(10Based-T的NRZ编码或100based-T的曼彻斯特编码)把数据编码,再变为模拟信号把数据送出去。收数据时的流程反之。目前来了解PHY的输出后面部分。一颗CMOS制程的芯片工作的时候产生的信号电平总是大于0V的(这取决于芯片的制程和设计需求),不过这样的信号送到100米甚至更长的地方会有非常大的直流分量的损失。而且如果外部网现直接和芯片相连的话,电磁感应(打雷)和静电,非常容易造成芯片的损坏。

    以太网工作原理图

     

     

    以太网网卡的远程唤醒

    远程唤醒技术(WOL,Wake-on-LAN) 是由网卡配合其他软硬件,可以通过局域网实现远程开机的一种技术,无论被访问的计算机离我们有多远、处于什么位置,只要处于同一局域网内,就都能够被随时启动。这种技术非常适合具有远程网络管理要求的环境,如果有这种要求在选购网卡时应注意是否具有此功能。

     

    可被远程唤醒的计算机对硬件有一定的要求,主要表现在网卡、主板和电源上。

    A: 网卡 能否实现远程唤醒,其中最主要的一个部件就是支持WOL的网卡。远端被唤醒计算 

    机的网卡必须支持WOL,而用于唤醒其他计算机的网卡则不必支持WOL。另外,当一台计算机中安装有多块网卡时,只将其中的一块设置为可远程唤醒。

     

    B: 主板 主板也必需支持远程唤醒,可通过查看CMOS的"Power Management Setup"菜单中是否拥有"Wake on LAN"项而确认。另外,支持远程唤醒的主板上通常都拥有一个专门的3芯插座,以给网卡供电(PCI2.1标准)。 由于现在的主板通常支持PCI 2.2标准,可以直接通过PCI插槽向网卡提供+3.3V Standby电源,即使不连接WOL电源线也一样能够实现远程唤醒,因此,可能不再提供3芯插座。主板是否支持PCI2.2标准,可通过查看CMOS的"Power Management Setup"菜单中是否拥有"Wake on PCI Card"项来确认。

     

    C: 电源 若欲实现远程唤醒,计算机安装的必须是符合ATX 2.01标准的ATX电源,+5V Standby电流至少应在600mA以上。计算机拥有远程唤醒功能并不等于能够实现远程唤醒,在实现之前,还必须对硬件作必要的连接和设置。 以及需要借助相应的软件才能实现。例如使用AMD公司的Magic Packet来作为远程唤醒软件等。

     

     

     

    第三部分:低端网卡和高端网卡的比较

    8139D网卡芯片高端网卡

    RTL8139D网卡是高性能的10M/100M自适应快速以太网卡。该网卡支持PCI总线,是为了满足网上高速传输而设计的。采用的三合一技术,单片集成PHY,MAC和PCI接口芯片。具备自动协商功能,能自动识别所连接的交换机,集线器等网络设备的速率的工作方式,并自动将网卡的速率和工作方式调整到正确的模式以之相适应(10M/100M,全双工/半双工)。另外还支持全双工流控等功能及远程启动。
    主要性能
     * 方便的自适应功能:自动在10BASE-T和100BASE-TX之间进行切换,自动识别并调整传输方式和传输速度。10M的用户在任何时间无需改变驱动程序,即可升级到100M。
     * 强大而稳定的性能:工作在32位的PCI总线上,与PC之间的传输速率为32M,能有效减轻CPU的负荷。网卡可以不通过CPU直接访问内存,进一步减轻CPU的负荷。
     * 丰富的驱动程序:提供Windows系列,NT系列,Netware系列,Linux等操作系统的驱动程序,适用于多种操作系统。
     * 支持流控功能:支持IEEE802.3X的全双工流控在全双工模式下,采用发送PAUSE帧的方式来进行流量控制。
     * 远程启动:可以安装自启动引导芯片,安装的自启动芯片的网卡可以制作各种无盘工作站,从WindowsNetware服务器上远程引导,确保网络安全。

     

     

    Intel网卡低端网卡

    品牌:Intel 型号:8559 适用网络类型: 以太网 传输速率:10/100 总线类型及宽度: PCI 32位  网络标准: IEEE 802.21 网线接口类型: RJ-45 传输介质: 普通双绞线 远程唤醒: 支持 全双工:支持

     

     

     

    高端网卡与低端网卡的对比:

    高端网卡优势在于 PING会稍微低,掉包率更少,速度更稳定高端网卡有方便的自适应功能强大而稳定,丰富的驱动程序以及可以远程启动,而低端网卡可能具备的功能就没有那么全面。高端网卡价格更高,低端网卡比好便宜。(上面的主要性能中有所介绍)

     

    参考文献:

    1】沈红,李爱华主编.   《计算机网络》(第二版),2010年2月第一版,2015年7

         月第二版。

    2】王卫亚,孙大跃主编。《计算机网络--原理,应用和实现》,2007年2月第一版。



    注:第一次写了个小论文,有很多网卡的图片的,好像传不上去,难过ing

     

    展开全文
  • 选 AEA、实现计算机与局域网传输介质之间的物理连接和信号匹配E、具有数据缓存能力陈冬的回答:选 AEA、实现计算机与局域网传输介质之间的物理连接和信号匹配E、具有数据缓存能力蘰踄繧鍴的回答:网卡功能简述网卡是...

    岳波的回答:

    选 AE

    A、实现计算机与局域网传输介质之间的物理连接和信号匹配

    E、具有数据缓存能力

    陈冬的回答:

    选 AE

    A、实现计算机与局域网传输介质之间的物理连接和信号匹配

    E、具有数据缓存能力

    蘰踄繧鍴的回答:

    网卡功能简述

    网卡是工作在数据链路层的网路组件,是局域网中连接计算机和传输介质的接口,不仅能实现与局域网传输介质之间的物理连接和电信号匹配,还涉及帧的发送与接收、帧的封装与拆封、介质访问控制、数据的编码与解码以及数据缓存的功能等。

    网卡功能详解

    网卡上面装有处理器和存储器(包括ram合rom)。网卡和局域网之间的通信是通过电缆或双绞线以串行传输方式进行的。而网卡和计算机之间的通信则是通过计算机主板上的i/o总线以并行传输方式进行。因此,网卡的一个重要功能就是要进行串行/并行转换。由于网络上的数据率合计算机总线上的数据率并不相同,因此在网卡中必须装有堆数据进行缓存的存储芯片。

    在安装网卡时必须将管理网卡的设备驱动程序安装在计算机的操作系统中。这个驱动程序以后就会告诉网卡,应当从存储器的什么位置上将局域网传送过来的数据块存储下来。网卡还要能够实现以太网协议。

    网卡并不是独立的自治单元,因为网卡本身不带电源而是必须使用所插入的计算机的电源,并受该计算机的控制。因此网卡可看成为一个半自治的单元。当网卡收到一个有差错的帧时,它就将这个帧丢弃而不必通知它所插入的计算机。当网卡收到一个正确的帧时,它就使用中断来通知该计算机并交付给协议栈中的网络层。当计算机要发送一个ip数据报时,它就由协议栈向下交给网卡组装成帧后发送到局域网。

    随着集成度的不断提高,网卡上的芯片的个数不断的减少,虽然现在个厂家生产的网卡种类繁多,但其功能大同小异。网卡的主要功能有以下三个:

    1.数据的封装与解封:发送时将上一层交下来的数据加上首部和尾部,成为以太网的帧。接收时将以太网的帧剥去首部和尾部,然后送交上一层;

    2.链路管理:主要是csma/cd协议的实现;

    3.编码与译码:即曼彻斯特编码与译码。

    选购网卡时考虑的因素

    在组网时是否能正确选用、连接和设置网卡,往往是能否正确连通网络的前提和必要条件。一般来说,在选购网卡时要考虑以下因素:

    网络类型:现在比较流行的有以太网,令牌环网,fddi网等,选择时应根据网络的类型来选择相对应的网卡。

    传输速率:应根据服务器或工作站的带宽需求并结合物理传输介质所能提供的最大传输速率来选择网卡的传输速率。以以太网为例,可选择的速率就有10mbps,10/100mbps,1000mbps,甚至10gbps等多种,但不是速率越高就越合适。例如,为连接在只具备100m传输速度的双绞线上的计算机配置1000m的网卡就是一种浪费,因为其至多也只能实现100m的传输速率。

    总线类型:计算机中常见的总线插槽类型有:isa、eisa、vesa、pci 和 pcmcia等。在服务器上通常使用pci或eisa总线的智能型网卡,工作站则采用可用pci或isa总线的普通网卡,在笔记本电脑则用pcmcia总线的网卡或采用并行接口的便携式网卡。目前pc机基本上已不再支持isa连接,所以当为自己的pc机购买网卡时,千万不要选购已经过时的isa网卡,而应当选购pci网卡。

    网卡支持的电缆接口:网卡最终是要与网络进行连接,所以也就必须有一个接口使网线通过它与其它计算机网络设备连接起来。不同的网络接口适用于不同的网络类型,目前常见的接口主要有以太网的rj-45接口、细同轴电缆的bnc接口和粗同轴电aui接口、fddi接口、atm接口等。而且有的网卡为了适用于更广泛的应用环境,提供了两种或多种类型的接口,如有的网卡会同时提供rj-45、bnc接口或aui接口。

    (a)rj-45接口:这是最为常见的一种网卡,也是应用最广的一种接口类型网卡,这主要得益于双绞线以太网应用的普及。因为这种rj-45接口类型的网卡就是应用于以双绞线为传输介质的以太网中,它的接口类似于常见的电话接口rj-11,但rj-45是8芯线,而电话线的接口是4芯的,通常只接2芯线(isdn的电话线接4芯线)。在网卡上还自带两个状态批示灯,通过这两个指示灯颜色可初步判断网卡的工作状态。

    (b)bnc接口:这种接口网卡对应用于用细同轴电缆为传输介质的以太网或令牌网中,目前这种接口类型的网卡较少见,主要因为用细同轴电缆作为传输介质的网络就比较少。

    (c)aui接口:这种接口类型的网卡对应用于以粗同轴电缆为传输介质的以太网或令牌网中,这种接口类型的网卡目前更是很少见。

    (d)fddi接口:这种接口的网卡是适应于fddi(光纤分布数据接口)网络中,这种网络具有100mbps的带宽,但它所使用的传输介质是光纤,所以这种fddi接口网卡的接口也是光纤接口的。随着快速以太网的出现,它的速度优越性已不复存在,但它须采用昂贵的光纤作为传输介质的缺点并没有改变,所以目前也非常少见。

    (e)atm接口:这种接口类型的网卡是应用于atm(异步传输模式)光纤(或双绞线)网络中。它能提供物理的传输速度达155mbps

    价格与品牌:不同速率、不同品牌的网卡价格差别较大

    展开全文
  • 以太网网卡历史-3com,intel及其它

    千次阅读 2013-05-10 09:15:45
    Gz不存在了,但是我觉得探索真知的精神还是在每一个GZer的心中,这正是GZ不同于国内其它论坛的地方。我新开一帖,集中解决一些Intel百兆网卡使用上的... 要用好Intel的网卡,还必须大致了解以太网的发展,
    转载于:http://we.pcinlife.com/forum.php?mod=viewthread&tid=568940

    Gz不存在了,但是我觉得探索真知的精神还是在每一个GZer的心中,这正是GZ不同于国内其它论坛的地方。我新开一帖,集中解决一些Intel百兆网卡使用上的问题,还有谈谈自己的看法,欢迎拍砖。

        要用好Intel的网卡,还必须大致了解以太网的发展,因为Intel公司和以太网的发展息息相关。

        罗伯特•麦卡夫博士(Dr.Robert Metcalfe,国内媒体习惯写作Bob Metcalfe)1979年以前工作于施乐公司,他在Palo Alto的Xerox Palo Research Center(PARC)发明了以太网,这里有他的最初的原理图。由他领队的开发小组制造了一个包含大约40台计算机的以太网系统,这个系统运行在大约2.9Mbps的以太网速,最初麦卡夫博士开发以太网就是为了充分利用打印机资源(所以我们一般买到的打印机都是支持网络打印的)。

        1979年,Xerox,Digital Equipment Corporation和Intel组成XID联盟,研发10兆以太网,随后发表以太网“蓝皮书”。IEEE随即接受“蓝皮书”,用作802.3标准的基础。

        同样是在1979年,罗伯特•麦卡夫博士离开施乐公司,组件了3com公司,他被后人尊为“以太网之父”,他在计算机发展的历史上留下了浓墨重彩的一笔。罗伯特•麦卡夫博士于1990年离开3com公司。

        Intel贵为以太网标准的缔造者,起初并不重视网络产品的研发,或者说当时还没有发现网络设备市场的巨大潜力,Intel网络事业部成立时,还只是一个试验小组,可谁会想到二十多年后,Intel网络事业部会成为Intel的骨干部门?

        ISA网卡时代,3com的产品是独步天下,它的ISA网卡,市场占有率最高时可以达到70%以上。Intel当时主打产品是EtherExpress Pro/10,我自己在十年前,成都的海森电脑城有幸购得一块。Intel研发奔腾芯片以后有这样一个习惯,就是不让别人抓住自己的软肋,比如芯片组,显卡,还有就是网卡。

        进入百兆网络时代后,3com通过技术授权,让Lucent,Broadcom,Marvell,Agere,St为其生产网络芯片,正是这种做法,为其以后发展埋下隐患。

        一方面是3com百兆网卡的高昂价格,另一方面是奔腾芯片的横空出世,高性能cpu必须有用武之地,网络应用就是其一,让Intel下定决心,加大网络产品的研发力度,反正HX芯片组都捣鼓出来了,制造百兆网卡芯片有何不可?正是在1995年,Intel开发出自己的百兆网卡芯片,主芯片核心的代号定为D100,物理层芯片代号为Phy-Tx。相应的制造出的网卡,主芯片为82557,物理层芯片为82555,其中D100核心是3K+3K的fifo,因为百兆以太网的一个数据包是1.5k,所以D100核心在极端的状态下,一个工作周期可以同时操作4个数据包,比2k+2K的组合效率高一些。Intel在马耳他,韩国和菲律宾的工厂都生产82557芯片组,然后运往波多黎各组装,82557网卡就这样被大量生产出来了。

        起初82557网卡的推广,比起同门兄弟奔腾芯片,相当不顺利(当时Intel还是典型的工程师思维,也没有想到搞如今的“欢跃”,“迅驰”一类的平台,当时也没有现在这样的市场基础),单是卖孤零零的网卡芯片,结果谁都不重视,不过Intel的芯片价格实惠,兼容性又比较好,HP,IBM,Compaq还是采购了一些OEM的557网卡。

        Intel出师不利,但是此后一直在寻找机会,苦练内功,于97年11月推出82558,三个月后推出82558B以太网卡控制芯片,将物理层芯片和主控制芯片整合到一起,也就是Phy-TX + D100的架构 ,这样做在当时还是比较超前的,其实Intel已经看到板载网卡的技术趋势,双芯片结构肯定不利于板载设计(所以后来业界公认的LAN on motherboard的领导者是Intel,既不是Broadcom,也不是Realtek)。82558网卡比82557网卡的发热量更小,制造工艺更加先进,这次终于获得各大计算机制造商的重视。很多公司,例如IBM,HP,Dell和gateway购买了为数不少的82558成品卡,就连NEC和富士通都要购买82558芯片。要知道,日系的厂商,除了以上两家,还有日本网友口中的网络“御三家”(即Buffalo,Corega和Planex)都在定购82558芯片,它们以前一般都是定购Davidcom和Realtek的芯片为主。尽管82558网卡卖得好,但是Intel还是无法撼动3com的市场,因为3com同期推出了3c905b,3c905c网卡,兼容性和cpu占用率较905TX有了很大的提高,更何况3com是金字招牌。

        Intel还是抓住了属于自己的机会。1998年,Digital Equipment Corporation宣布破产,主体被康柏收购,康柏就采用DEC的设计,开发出自己的Presario m系列超薄笔记本,还有就是ev6总线(没这个,AMD肯定活不到现在)。Intel则收购了DEC的网络产品研发部门,DEC在高端网络产品,尤其是服务器产品和Unix领域颇有建树(所以后来的Intel网卡在Linux下的兼容性较好),Intel正是看中了DEC在服务器网络产品方面的实力。完成收购后,Intel网络事业部和DEC的新鲜血液还有一段磨合期,正是这段时期,打上Intel的logo的21143网卡出世了。21143网卡不属于Intel网络体系,这应该算是DEC的绝响了。联想到最近SGI的破产,人们总是感叹巨人一个个倒下,小丑一个个粉墨登场。

        半年以后,Intel推出了82559芯片,82559采用bga封装(利用了PII的一点产能),支持pci2.2,支持高级电源管理标准,在Intel的规划中pro/100+网卡其实是为即将到来的PIII系统准备的(PIII内置的tcp/ip效验和单元就是对559网络芯片的补充,尽管实际效果不好),82559芯片还可和一颗加密芯片搭配,制造可进行3des加密的网卡。Intel在发布82559后,立即着手自己的第二代千兆网络产品的研发,网络事业部于1999年8月收购了物理层芯片公司Level-One更进一步加强了自身实力,后来又先收购了Ambient,2001年又收购了Xirom。这段时间3com的脚步还跟得上,2000年之前就完成了对美国机器人的收购,先后推出3c970,3xp,3c980,3c990(这些产品还是采用带引脚的集成块封装,3com的代工厂ic制造工艺毕竟敌不过Intel)一系列产品还击,但是它的的领袖地位已经岌岌可危,思科和Realtek从高端和低端研发网络产品,不断打压3com的市场。

        2001年,Intel发布82550系列百兆以太网芯片,82550EY还是采用D100核心,但是功能是今非昔比了。82550GY作为此次发布的最高端的产品,在IPsec加密状态下的性能比起未加密时,衰减不到5%,将3com的3xp网卡在使用IPsec加密功能后的性能甩开,采用82550GY芯片的网卡的确是“最接近千兆网卡的百兆网卡”。82550,82540系列芯片的发布,in business(生意通),Netstructure品牌的推出,让Intel从幕后走到前台,让世界知道,网络产品不仅是3com和思科在研发,Intel有能力向任何一个网络设备厂商叫板。

        2002年,Intel发布82551系列以太网芯片,推出82551系列芯片就是为了取代已经停产的82559芯片,82551系列芯片的特点是支持智能判断交叉连线和分载tcp/ip效验和。其中82551qm符合Rohs环保标准,采用lead free技术。

        D100核心从95年到现在,走过了11个年头,可以说D100见证了Intel网络事业部由弱变强的一段历史,使用Intel网卡,就是在品味以太网发展的进程。

    要优化Intel网卡,首先安装Proset网卡驱动,Proset驱动经历了两次变革,从win98时代低版本Proset到win2000时代的Proset2,再到现在用的高版本Proset,功能越来越强。

        用我的Netserver网卡为例(HP向Intel定购的服务器网卡,安装82559公版驱动)在设备管理面板中双击要配置的Intel网卡,出现Proset面板。

        Boot agent标签下有选项可以关闭开机时网卡启动画面,如果要一劳永逸地解决这个问题,其实只要按照下图中的最后两排字符(就是这块卡的eep),升级559网卡的eep,应该就可以了。

        在Identify adapter的选项卡里面,可以查到网卡的Part Number,这个号码必须和网卡上的印刷条码严格一致,否则就是刷机卡或者是深圳寨卡。

        寨卡还是比较好分辨,首先寨卡的条码明显和原装卡不同,而且号码只有一个,其次是82559和3c905cx的寨卡至少要卖120元以上(至少成都是这样),否则无利可图。

        进入Advanced adapter setting中,pci总线效率应该禁用,就是让网卡自动控制coalescing packets的大小(其实这是adaptive技术的一项),只有在网络带宽极小时(和小猫拨号差不多时,校园网会出这种情况),才设置enable。

       进入performance options,其中传输描述符和接合缓冲区都是设定网卡的发送数据能力,家用可以不管,而且82559芯片不能很好地使用较大的系统缓存进行发送,如果有需要调整,这两项最大调成极限值的50%。

        接收描述符要调成512-1024之间的值,其中一个描述符使用2k内存,在大流量下载时,这一项参数比较重要。

        如果其它网络设备不支持流程控制,那么应该关闭流程控制。

        适应性技术应该开,因为适应性技术是一整套算法,定义网卡在不同工作条件下的工作模式,手工定义肯定不如打开适应性技术。


        适应性传输阀值可以设定为190或者10(实验取值),一般设成200,这项参数最好不要动。

        适应性性能调整,就是控制网卡产生中断的多少,这项在千兆网卡上特别重要,应该调整到“网络性能”一边。划杆在最左边,表示在网卡接收一帧之前,网卡都会产生一个中断,如果网卡产生的中断不够,就由cpu来产生,系统资源占用率就上去了。不是所有的Intel网卡原设定都是以网络性能优先。

        适应性帧间距离调整,定义网卡抢线能力,要设定为1,表示“该功能打开,而且帧间距小于802.3的规定间隙”,如果将此项用在带宽不足的局域网的P2P上,就是其他用户的噩梦。

        重新传输帧间距离调整,定义网卡抢线能力,可以设定为1,表示“如果遇到网络上的数据包冲突,不使用802.3规定的算法求解重传时间,以最快的速度再次重传,如果局域网中一群人都这么设定,当网络带宽变小时,那可能就会适得其反,使大家都上不好网(好在不会有一群人都在局域网上使用Intel卡的情况发生)。所以Intel建议只能加大此值,好让有可能到来的网络拥塞尽早消散。

        如果高级电源管理有问题,可以调整Power Saver Options。

        Wake on Lan Options 中的选项都选为“控制操作系统”,有日本网友指出PME选项应设定为启用,提高STR的兼容性,我倒是没有遇到这方面问题,但是PME是应该打开。

        “低资源时的连接性”在任何情况下都要打开,表示无论系统资源如何紧张,系统都不会剥夺划分给网卡的资源。这也是adaptive技术的一部分。

        “记录连接状态”可以关掉,毕竟只有在网络有故障时,用户才会查看系统日志中的网络信息。

        如果交换机或者路由器支持Qos,那么就可以调整优先性级别调整,这个值根据不同的应用,要自己摸索,也不是越大或者越小越好,我就不给定值了。

        人多力量大,打开Receive Load Balance选项。

    悲喜不同路,3com的故事。

        有很多人都有这样的疑问,3c905,920网卡的xp下的驱动程序为什么更新得那么慢?3com怎么不推出pcie网卡和10 Gbps网卡?这些其实和3com近年的境遇有很大关系。

        前面提到过,3com授权其它厂商制造网络芯片,然后由自己的工厂组装网卡。这在百兆以太网络设备刚刚开始流行时,对3com的发展,的确大有裨益,自己的产能不够,拿其它厂商的来补。可是这种作法到了98年以后,弊病就出来了,就是3com找代工厂生产芯片,直接扶植了Marvell和Broadcom,同时3com没有培育出网络芯片的自有体系(如Marvell的800X,805X,Broadcom的570X,Intel坚持不懈搞了整整5代的千兆网络设备,就是这样一种体系),这种情况加大了3com新产品研发的难度。

        说句老实话,网卡不像显卡,cpu那样,可以轻易分出三六九等,各个厂商只要遵照802.3协议的规定,就能设计出性能相近的网络芯片,但是3com妄自尊大,以为自己的技术优势是无可比拟的,在激烈的市场竞争中,还是生产高价位的网卡产品,但是性能的确不比其它厂商的产品高出很多(这一点和当时的帝盟相似)。在网卡芯片性能都差不多的情况下,消费者更看重产品的功能多少,以便让产品适用在不同领域,然后就是产品的价格,这个最实在。结果是Intel抓住了头一条,Realtek,Pctel,Adm就抓住了后一条。同时思科对所有的网络设备厂商的强力打压,3com也还要默默忍受。这些都还没完,更糟糕的还在后面。

        2000年后,Palm脱离3com,引发了一系列连锁反应。首先Palm的脱离,一方面固然和handheld设备在全球销量的不景气有关,另一方面,Palm团队觉得3com暮气已深,留在3com还不如出来打拼。3com当时也觉得Palm是包袱,踢开Palm,还能获得为数不小的分手费,于是痛快地和Palm一刀两断。这样一来,无疑断送了3com多元化发展的道路,而且在公司内部,负面影响相当严重。当时至少还有两个3com的子公司以自身经营不善为由,跳槽到其它公司门户之下,接踵而来的就是2001年到2004年,3com连续的巨额亏损,这段时间,3com的核心竞争力已经丧失殆尽。此时的思科已是蒸蒸日上,收购亚特兰大科技后,思科根本没把3com放在眼里,当然它也不会去收购问题多多的3com。

        进入2005年,3com终于多多少少找回了一些感觉,找准了自己的定位,在中低端网络设备市场频频出手,而且在更早的时候,3com先后和Nvidia,Via达成交叉授权(所以Nvidia的集成网卡上的选项是for cpu和for throughout,而Via的Velocity系列网卡也大有起色),值得一提的是新制程的3c990系列网卡还卖得不错,甚至华硕的p4p800还采用了3c940芯片。但是,现在人们如果想购买高端网络设备,首先会想到Cisco和北方电讯,其次是西门子,再次是Intel,很少有人会首先想到3com。

        在这些年,3com的损失不仅是美元,还有标准制订者的地位。比如说97年制定802.11协议,那时3com还勉强出了一份力,但是最近一阵子打得火热的802.11n协议的制定,3com就是看客,WWiSE组织的成员有德州仪器、Broadcom、 Conexant、 Stmicro、 Airgo和Bermai,TGn Sync组织的成员包括Intel、Atheros(这是网络产品新贵,实力不容小觑)、Agere、英飞凌、思科、高通、北电、三菱、索尼、松下、飞利浦、三星、三洋和东芝(我倒是看好这一派,真是群星荟萃),幕后黑手是Intel。看这两派的激斗,3com心里肯定别有一番滋味。

        转回前面的话题,3com使用代工厂生产的芯片生产的网卡,大部分是批量卖给计算机整机厂商,所以3c905系列网卡的售后服务是由Hp,Dell等厂商在做,这也是为什么我们下的驱动都是品牌机厂商发布的win2000驱动,但是归根到底驱动是3com负责开发。Palm出事以后,3com进入了一种不正常的发展路线,公司内部人心惶惶,因为3c905,3c905b,3c905c,3c990网卡的内部结构互不相同,3com要为这些网卡分别编写新平台下的驱动,的确有心无力,又或者委托代工厂编写驱动,的确得不偿失。试想2001年时3com的高层对公司的前途感到迷茫,那里还顾得上什么名家大厂的风范,命令研发人员为过时的网卡更新驱动呢?

        3com的老式网卡没有驱动更新不要紧,在winxp还在制作时,3com就向微软提交了基本驱动,而且后来3com还是通过Hp,发布了winxp下的老网卡驱动(是由win2000下的驱动改造而来的,那个从win98时代起就让人费解的3com网络诊断程序的安装方法,到现在还是没有改过来),winxp下使用任何3com的网卡,还是没有任何问题的。我推测Vista正是发布以后,3com的老式网卡,应该还是可以在该系统下正常使用,但是玩家想安稳地使用3com的百兆网卡,还是推荐购买3com网站介绍的上的采用新制程的990系列零售产品,这样驱动才有保障。

        还有一个悬而未决的问题,就是Broadcom5904芯片到底有多大的fifo缓存?我这里有一份资料,是加拿大Laurentian大学计算机与数学学院为了教学目的,开发3c905c网卡在Minix-vmd系统下的驱动时,向Broadcom索要的3c905c的基本信息。这份材料明白无误地指出3c905c网卡的fifo值。事实上一般的民用级ic,内置512k的缓存,是由northwood p4开始大规模流行,事实上任何一张百兆网卡,都不可能芯片内置512k的缓存。试想如果Broadcom在97年就生产出了内置512k高速缓存的廉价的强劲芯片,那么AMD,西林,高通,ti和Intel都应该关门大吉。

        韬光养晦的Marvell。

        Marvell在95年以前还是小规模的网络设备供应商,但是通过自身的努力,在千兆网络时代,终于打拼出属于自己的天空,旗下的网络产品均是以千兆为起点,但是好景不长,高端千兆网络设备的竞争实在太激烈,这里有两副图,是Marvell通过Syskonnect发布的网卡控制面板,从这里面可以看出端倪。

        Marvell的网卡控制面板只开发到win2000版本下就停止了。在winxp下使用这个control panel,就显示乱码。

        其实Marvell在2000年左右,还是很想持续发力,和Broadcom拼一拼高端市场份额,所以那时Marvell的网卡驱动作得相当出色,绑定,冗余,线路测试,流量统计,一个都不少。但是Broadcom的全线网络产品的性能,均压倒Marvell的同类产品。Marvell这个公司相当务实,东边不亮西边亮,转而主攻中低端,去和Realtek抢市场(Marvell的产品再怎么着,也比Realtek的产品质量好吧),结果大获成功。

        现在,Marvell在千兆网络处理芯片市场上,做到了“三分天下有其一”,它的低端网卡芯片被国内的厂商广泛采用,在中端服务器主板上,一般采用一颗Intel芯片或者一颗Broadcom芯片,搭配另一颗Marvell的芯片组成双千兆的解决方案,由Intel或者Broadcom的驱动来组织Marvell网卡来协同工作。

        我相信Marvell不会总是做配角。

        王侯将相宁有种乎。Intel的荆棘之路。

        正当3com日渐势微,Cisco疯狂扩张时,Intel一刻也没有停止前进的脚步,Intel网络事业部研发的第一代和第二代千兆网络产品,市面上很难买得到,但是第三代的Intel pro/1000t网卡,第四代的82540em芯片,第五代的82572ei和一系列无线网卡,在市场上是遍地开花,同时Intel网络事业部联合Broadcom,重创了AMD网络事业部,算是出了一口恶气。

        AMD本是制造通讯设备出生,它的百兆网络设备芯片比起其它的同类产品性能不错,价格也不算高,日本的原装机厂商在96年左右,装机时采用了大量的使用pcnet am97c971芯片的独立pci网卡,至今还有AMD的爱好者为拥有一款使用AMD芯片的网卡而津津乐道。AMD网络事业部在AMD集团中不是太受重视,98年以前它的地位比开发主板芯片组的团队还低。04年的时候我还买过一块am772无线网卡(金浪出品)。大浪淘沙,现在市场上就找不到多少采用AMD解决方案的零售产品,但是AMD的网络研发还没有停止,配合AMD移动芯片的geode产品,一刻也没有停止研发,AMD网络产品在工控机领域还是有些份额,不过AMD网络事业部已经没有以前那么风光,正所谓物竞天择,适者生存,网络产品市场之中的竞争之激烈,可见一斑。

        Intel网络事业部以后的道路,就是冲击高端,和思科展开正面交锋,这绝非痴人说梦,早在2000年左右,Intel就开始试探性地开始在官方报告中将自己的网络解决方案与思科的同类解决方案进行比较,同时提升全线Netstructure产品的性能和价格,04年更是发布完整的10 Gbps解决方案,努力塑造高端形象。不过思科收购Linksys以后,努力开拓中端和家庭市场,这是Intel没有预计到的。但是Intel在今年已经回过神来,找到了开拓中低端市场的秘方。

       Intel计划从今年起,所有网络产品,都分步,分批引入SSE,SSE2和SSE3技术,配合“欢跃”平台,以高姿态把自己的网络产品切入家用pc领域,这实在是一招妙棋。网络产品引入SSE技术,拉开了与竞争对手的档次,同时这些产品也贴近了家庭用户,一举两得。

        我分析Intel在中高端网络产品市场上,和其它厂商,特别是思科,达成了一定的默契。因为思科不好惹,一旦同思科展开全面交手,Intel网络事业部就可能变成第二个AMD网络事业部,所以Intel在2005年以后,网络设备的研发和销售方面,显得既谨慎,又暗藏锋芒。

        不知道有生之年能不能看到Intel实现对微处理器领域和网络设备领域的统一,我倒是认为如果Intel做不成,还是会有其它厂商来实现。衷心祝愿Intel Networking一路走好。

        本文部分材料来源于Intel,Broadcom,eTesting Labs和Department of Mathematics & Computer Science of Laurentian University。本文如要转载,请注明出处。

    ===================================
    适应性传输阀值可以设定为190或者10(实验取值),一般设成200,这项参数最好不要动。

    这里的设置中文帮助推荐设置为12,经长期使用未见异常,仅供参考。

    这里是原文:
    制定适配器在发送数据包之前在传输缓冲区中储存的字节数。例如,如果“适应性传输阈值”是 100,适配器在其缓冲区中储存 100 字节的数据,然后再发送。

    适配器仅将“适应性传输阈”值用作一个起点。如果适配器能使用较低的值获得更好的性能,它自动调整至该值。

    建议值 如果计算机有多块总线主控卡或高反应时间,将此值设为 200。
    如果计算机有一块总线主控卡,将此值设为 12。
    要将适配器配置成先传输满载的以太网帧,然后再调整到最佳性能,将此值设为 190。如果此值为 190 时传输性能显著下降,将阈值设
    为 16,然后再逐步增大。
    所谓的什么抢线,我觉得没什么的,修改一下定时器,改变报文频率一样可以抢线。我改的比你能改的还高,你不就傻了
    还有那个什么缓存的,并非什么越大越好
    越大,延迟越大
    64k足以
    这些外在的什么rcv什么的,无非是把驱动参数定义在外面
    我觉得一般人根本没必要修改
    还有什么secruity offload我觉得个人用处不大 
    真正的快速网络offload用dma enginee

    原来是这么回事。
    借人气带问:一般的板载网卡中高端都以Marvell和Broadcom
    他们究竟谁占优?按文中的说法应该是Broadcom在中高端略占优势,但是Marvell在中低端更好。
    具体说来比如8053(8055)和Broadcom5751(5789)哪个更好?
    我忽然发现大厂的旗舰主板很多都是Broadcom的,唯ASUS好像都是Marvell,而且几乎都是8053
    Broadcom5751  $8
    Intel82573L      $7
    Marvell88E8053 $2.5
    Realtek8111B    $2.3
    纯属猜测

    Broadcom的绝对没这么贵。一般只有Intel才敢超出别人一倍以上。所以很少见到主板采用的。就算采用,也是搭配芯片组一起卖的那种。
    PCI-E网卡芯片,对一线系统厂的售价,应该比这个还低。

    即使以现在的IC生产工艺,在芯片内集成512K缓存,也是不现实的----因为成本会高的离谱。而网络芯片不可能卖出CPU那种几百美元的价格,顶多三四个美元。
    若干年前的话,则技术上完全行不通。

    另外弱弱问一声能买到比较强的100M网卡是什么?
    INTEL的550GY
    3COM的990

    作为服务器尤其是托管的服务器来说,如果用linux,以我的经验,千兆Marvell卡非常差,包括驱动和硬件,随机性
    问题很多。经常出现各种随机断线问题,跑去机房,发现机器运行十分正常,就是网络不通了。

    展开全文
  • 在需要使用lwip以太网功能时,可以选择ST支持以太网互联型芯片,如107或105; 当然也可以选择103 + 网卡驱动芯片(如:ENC28J60、DM9000等); 该文章只介绍107芯片中以太网ETH模块的配置过程; ETH框图 STM32F107...

    前言

    在需要使用lwip以太网功能时,可以选择ST支持以太网互联型芯片,如107或105;
    当然也可以选择103 + 网卡驱动芯片(如:ENC28J60、DM9000等);

    该文章只介绍107芯片中以太网ETH模块的配置过程;
    ETH框图
    在这里插入图片描述
    STM32F107xx支持以太网模块的面纱就是这样,那么我们该如何配置里面的PHY、MAC和以太网专用的DMA以实现底层的配置呢?容许我慢慢道来。

    1、网卡结构

      网卡是一块被设计用来允许计算机在计算机网络上进行通讯的计算机硬件。由于其拥有MAC地址,因此属于OSI模型的第2层。它使得用户可以通过电缆或无线相互连接。每一个网卡都有一个被称为MAC地址的独一无二的48位串行号,它被写在卡上的一块ROM中。在网络上的每一个计算机都必须拥有一个独一无二的MAC地址。没有任何两块被生产出来的网卡拥有同样的地址。这是因为电气电子工程师协会(IEEE)负责为网络接口控制器(网卡)销售商分配唯一的MAC地址。
    以太网卡中数据链路层的芯片一般简称之为MAC控制器,物理层的芯片我们简称之为PHY。
    在这里插入图片描述

    1.1、MAC 802.3

      该部分不是两言三语就可以说明白的,《STM32中文参考手册》中有详细的介绍;如果还不够喂饱您,那就自己找吃的;反正网卡没它不行;

    1.2、PHY

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

      100BaseTX采用4B/5B编码。PHY在发送数据的时候,收到MAC过来的数据(对PHY来说,没有帧的概念,对它来说,都是数据而不管什么地址,数据还是CRC),每4bit就增加1bit的检错码,然后把并行数据转化为串行流数据,再按照物理层的编码规则把数据编码,再变为模拟信号把数据送出去。收数据时的流程反之。

      PHY还有个重要的功能就是实现CSMA/CD的部分功能。它可以检测到网络上是否有数据在传送,如果有数据在传送中就等待,一旦检测到网络空闲,再等待一个随机时间后将送数据出去。如果两个碰巧同时送出了数据,那样必将造成冲突,这时候,冲突检测机构可以检测到冲突,然后各等待一个随机的时间重新发送数据。这个随机时间很有讲究的,并不是一个常数,在不同的时刻计算出来的随机时间都是不同的,而且有多重算法来应付出现概率很低的同两台主机之间的第二次冲突。
      这里说怎么多可能您看不懂,没关系会配就行;

    2、配置ETH

    void initEthernet()
    {	
        setEthPowerOnOff(ENABLE);//打开ETH的时钟
    	ethGpioConfiguration();//配置以太网模块引脚
    	ethMacRegConfiguration();//配置PHY、MAC、DMA(重头戏)
    }
    

    ①打开或关闭ETH的时钟

    //打开或关闭ETH的时钟
    void setEthPowerOnOff(FunctionalState state)
    {
    	ethPowerState = state;
    	RCC_AHBPeriphClockCmd(RCC_AHBPeriph_ETH_MAC | RCC_AHBPeriph_ETH_MAC_Tx |
    	RCC_AHBPeriph_ETH_MAC_Rx, state);              
    }
    

    ②配置以太网模块引脚

    /*
    *以太网RMII引脚定义
    */
    #ifdef RMII_MODE
    
    #define RMII_MDIO			PA2
    #define RMII_MDC          	PC1
    #define RMII_TX_EN        	PB11
    #define RMII_TXD0         	PB12
    #define RMII_TXD1         	PB13
    #define RMII_REF_CLK      	PA1
    #define RMII_CRSDV        	PD8
    #define RMII_RXD0         	PD9
    #define RMII_RXD1         	PD10
    #define RMII_MDINTR       	PC5
    
    #endif
    
    
    //配置以太网模块引脚
    void ethGpioConfiguration(void)
    {
    	//GPIO_InitTypeDef GPIO_InitStructure;
    #ifdef MII_MODE
    
    #elif defined RMII_MODE//使用RMII接口时
    	GPIO_Initialize(GpioType(RMII_MDIO), GpioIndex(RMII_MDIO), GPIO_Mode_AF_PP);
    	GPIO_Initialize(GpioType(RMII_MDC), GpioIndex(RMII_MDC), GPIO_Mode_AF_PP);
    	GPIO_Initialize(GpioType(RMII_TX_EN), GpioIndex(RMII_TX_EN), GPIO_Mode_AF_PP);
    	GPIO_Initialize(GpioType(RMII_TXD0), GpioIndex(RMII_TXD0), GPIO_Mode_AF_PP);
    	GPIO_Initialize(GpioType(RMII_TXD1), GpioIndex(RMII_TXD1), GPIO_Mode_AF_PP);
    	GPIO_Initialize(GpioType(RMII_REF_CLK), GpioIndex(RMII_REF_CLK), GPIO_Mode_IN_FLOATING);
    	GPIO_Initialize(GpioType(RMII_MDINTR), GpioIndex(RMII_MDINTR), GPIO_Mode_IPU);
    	//GPIO_Initialize(GpioType(MCO), GpioIndex(MCO), GPIO_Mode_AF_PP);
    	GPIO_PinRemapConfig(GPIO_Remap_ETH, ENABLE);
    	GPIO_Initialize(GpioType(RMII_CRSDV), GpioIndex(RMII_CRSDV), GPIO_Mode_IN_FLOATING);
    	GPIO_Initialize(GpioType(RMII_RXD0), GpioIndex(RMII_RXD0),GPIO_Mode_IN_FLOATING);
    	GPIO_Initialize(GpioType(RMII_RXD1), GpioIndex(RMII_RXD1),GPIO_Mode_IN_FLOATING);
    #endif
    }
    

    ③配置PHY、MAC、DMA(重头戏)

    //配置PHY、MAC、DMA(重头戏)
    void ethMacRegConfiguration(void)
    {   
    	ETH_InitTypeDef ETH_InitStructure;
    	u32_t delayTime=0;
        	RCC_AHBPeriphClockCmd(RCC_AHBPeriph_ETH_MAC | RCC_AHBPeriph_ETH_MAC_Tx |RCC_AHBPeriph_ETH_MAC_Rx, ENABLE);
    	ethPowerState=ENABLE;
    #ifdef MII_MODE 
    	GPIO_ETH_MediaInterfaceConfig(GPIO_ETH_MediaInterface_MII);
    	RCC_MCOConfig(RCC_MCO_HSE);
    #elif defined RMII_MODE  
        GPIO_ETH_MediaInterfaceConfig(GPIO_ETH_MediaInterface_RMII);//选择精简的独立于介质的接口(RMII)
    #if 0
    	RCC_PLL3Config(RCC_PLL3Mul_10);
    	RCC_PLL3Cmd(ENABLE);
    	while ((RCC_GetFlagStatus(RCC_FLAG_PLL3RDY) == RESET)&&(delayTime<0x4ffff))
        {
    		delayTime++;
    	}
    	if(delayTime==0x4ffff)
    		return ;
    	RCC_MCOConfig(RCC_MCO_PLL3CLK);
    #endif
    #endif
    	ETH_DeInit();
        ETH_SoftwareReset(); 
    	while ((ETH_GetSoftwareResetStatus() == SET)&&(delayTime<0xffff))
    	{
    		delayTime++;
    	}
    	if(delayTime==0xffff)
    		return ;
    	ETH_StructInit(&ETH_InitStructure);
    	
    	 /*------------------------ ETH_MACCCR-----------------------------------*/
    	ETH_InitStructure.ETH_AutoNegotiation = ETH_AutoNegotiation_Enable  ; //(不一样)参数是否自动配置,选择disable时需要自动配置默认参数	
    	ETH_InitStructure.ETH_RetryTransmission = ETH_RetryTransmission_Disable;//(不一样)
    	ETH_InitStructure.ETH_AutomaticPadCRCStrip = ETH_AutomaticPadCRCStrip_Disable; /*自动填充/CRC剥离处理不执行,转发所有帧*/
    	ETH_InitStructure.ETH_LoopbackMode = ETH_LoopbackMode_Disable;						//不启用自循环模式
    	
    	 /*------------------------ ETH_MACFFR----------------------------------*/
    	ETH_InitStructure.ETH_BroadcastFramesReception = ETH_BroadcastFramesReception_Enable;//(不一样)接收广播帧
    	ETH_InitStructure.ETH_ReceiveAll = ETH_ReceiveAll_Disable;//MAC过滤只接受通过源目的地址的数据
    	ETH_InitStructure.ETH_PromiscuousMode = ETH_PromiscuousMode_Disable;//混杂模式,启用帧过滤                 
    	ETH_InitStructure.ETH_MulticastFramesFilter = ETH_MulticastFramesFilter_Perfect; //过滤器正常工作,不传送控制帧    
    	ETH_InitStructure.ETH_UnicastFramesFilter = ETH_UnicastFramesFilter_Perfect;//单播帧目的地址完美过滤
    #ifdef CHECKSUM_BY_HARDWARE
    	ETH_InitStructure.ETH_ChecksumOffload = ETH_ChecksumOffload_Enable;//IPV4头文件硬件校验
    #endif
    	/*------------------------   DMA   -----------------------------------*/  
    	ETH_InitStructure.ETH_DropTCPIPChecksumErrorFrame = ETH_DropTCPIPChecksumErrorFrame_Enable; /*(不一样)丢弃校验错误帧不执行(因为未进行硬件校验)*/
    	ETH_InitStructure.ETH_ReceiveStoreForward = ETH_ReceiveStoreForward_Enable;	 //接收数据超过阈值转发	 
    	ETH_InitStructure.ETH_TransmitStoreForward = ETH_TransmitStoreForward_Enable;	//发送数据完整帧转发  
    	ETH_InitStructure.ETH_ForwardErrorFrames = ETH_ForwardErrorFrames_Disable;  //接收FIFO丢弃所有错误帧	  
    	ETH_InitStructure.ETH_ForwardUndersizedGoodFrames = ETH_ForwardUndersizedGoodFrames_Disable;	 /*接收FIFO上传长度不够的好帧*/
    	ETH_InitStructure.ETH_SecondFrameOperate = ETH_SecondFrameOperate_Enable;//(不一样)DMA直接发送第二个帧,不需要之前帧回复	
    	
    	ETH_InitStructure.ETH_AddressAlignedBeats = ETH_AddressAlignedBeats_Enable;	     //传输地址对齐
    	ETH_InitStructure.ETH_FixedBurst = ETH_FixedBurst_Enable;	 					//(不一样)固定的突发			  
    	ETH_InitStructure.ETH_RxDMABurstLength = ETH_RxDMABurstLength_32Beat;			
    	ETH_InitStructure.ETH_TxDMABurstLength = ETH_TxDMABurstLength_32Beat;																   
    	ETH_InitStructure.ETH_DMAArbitration = ETH_DMAArbitration_RoundRobin_RxTx_2_1;//(不一样)接收和发送比例 2:1
    	assert_param(IS_ETH_AUTONEGOTIATION(ETH_InitStructure->ETH_AutoNegotiation));
    	
    	if(ETH_InitStructure.ETH_AutoNegotiation != ETH_AutoNegotiation_Disable)
    	{
    		AutoNetgotiation_flags=1;//参数是自动配置
    	}
    	else
    	{
    	   	AutoNetgotiation_flags=0;
    	}
    	
    	phyRegConfiguration(PHY_ADDRESS);
        if((ModeSpeed & ETH_Mode_FullDuplex)!= RESET)
    	{
          		ETH_InitStructure.ETH_Mode=ETH_Mode_FullDuplex;
      	}
      	else
      	{
          		ETH_InitStructure.ETH_Mode=ETH_Mode_HalfDuplex;
      	}
      	
      	if((ModeSpeed & ETH_Speed_100M)!= RESET)
      	{   
          		ETH_InitStructure.ETH_Speed=ETH_Speed_100M;
      	}
      	else
      	{
          		ETH_InitStructure.ETH_Speed=ETH_Speed_10M;
      	}
      	
    	ETH_Init(&ETH_InitStructure,PHY_ADDRESS);
        ETH_DMAITConfig(ETH_DMA_IT_NIS | ETH_DMA_IT_R, ENABLE);
    }
    #endif
    

    对于PHY的配置:

    static u32_t phyRegConfiguration(u16_t PHYAddress)
    {
    	__IO u32_t timeout = 0;
      	u8_t temp;
      /* Put the PHY in reset mode */
      	Ethernet_MDIO_Config();
      	//1、重启PHY,并延时一段时间
      	if(!(ETH_WritePHYRegister(PHYAddress, PHY_BCR, PHY_Reset)))
      	{
        		return 0;
      	}
      	
    	do
    	{
    		timeout++;
    	}while(timeout<PHY_ResetDelay);
    	
    	timeout=0;
    
    	//2、重启后,判断是否建立有效连接;
    	do
       	 {
          		timeout++;
    	  	temp=getPhyStatus(PHYAddress);
        	}while ((!temp) && (timeout < PHY_READ_TO));
        	
    	if(timeout == PHY_READ_TO)
       	{												
          		return 0;//不会从这里返回
        	}
    
        	//3、配置PHY_REG_21寄存器,
    	if(!(ETH_WritePHYRegister(PHYAddress,PHY_REG_21,0x0c00)))
    	{
        		return 0;
    	}
    
    	//4、重启后,继续配置PHY自适应模式,并读取自适应模式后PHY的模式(半双or全双)和速度(10M or 100M);
      	if(phyGetModeSpeed(PHY_ADDRESS))
        	return 1;
    	else
    		return 0;
    }
    
    

    “重头戏”就是这样了,里面有一些函数是stm32_eth.c中本来就有的,如ETH_StructInit(); ETH_Init(); ETH_DMAITConfig();等,这里就不给出他们函数体了,自己根据原文件慢慢看;并且库函数中还有对PHY寄存器读写的API函数,如ETH_ReadPHYRegister(); ETH_WritePHYRegister();等进行配置;

    • 暂时写到这里,自己琢磨后如有不是很清楚的请留言大家一起共同探讨,又或者您有更好的说明配置也希望可以拿出来大家一起分享;后面如有更新说明的,会持续更新。

    更新V1.0
    内容:获取PHY(物理层)对网口的连接状态。

    typedef enum 
    {
       PHY_UNLINK=1,
       PHY_LINKED,
       PHY_BUSY,
    }PhyLinkState;//定义一个连接状态枚举类型
    
    PhyLinkState getPhyLinkStatusByPin(PhyLinkState lastState)
    {
    	u8_t PinValue=0xff;
    	u16_t value=0;
    	PhyLinkState Status=lastState;
      	if(ethPowerState)
      	{
        		PinValue = GPIO_ReadInputDataBit(GpioType(RMII_MDINTR), GpioIndex(RMII_MDINTR));
    	     	if(!PinValue)
    	    	{ 
    				Status = getPhyStatusQuick(PHY_ADDRESS);//先获取PHY连接状态;
    	        	value = ETH_ReadPHYRegister(PHY_ADDRESS,PHY_REG_21);//
    			if(value & (0x0005))//判断这个是?????
    			{
    				Status = getPhyStatusQuick(PHY_ADDRESS);//再次获取PHY连接状态;’
    				if(Status == PHY_LINKED)//连接后,
    				{
    					phyGetModeSpeed(PHY_ADDRESS);//获取PHY自适应的速度和模式;
    					ethSetModeSpeed(ModeSpeed);//把获取到的PHY速度和模式,配置给MAC
    				}
    			}
    			else
    			{
    				//如不满足,返回之前的连接状态;
    				Status = lastState;	
    			}	
    	    	}
      	}
      	return Status;
    }
    

    里面有一函数getPhyStatusQuick()该函数主要是对寄存器ETH->MACMIIAR和ETH->MACMIIDR操作(因为获取连接状态是通过判断MII不忙的情况下,读取MACMIIDR寄存的值来获取的),手册有对相应寄存器有描述。函数体如下:

    static PhyLinkState getPhyStatusQuick(u16_t PHYAddr)
    {
    	PhyLinkState ret=PHY_UNLINK;
       	uint32_t timeout=0;
       	uint32_t temp=0;
       	assert_param(IS_ETH_PHY_ADDRESS(PHYAddr));
       	
       	temp=ETH->MACMIIAR;//
       	temp &= ~MACMIIAR_CR_MASK;
       	temp |=(((uint32_t)PHYAddr << 11) & ETH_MACMIIAR_PA);//表示了32个可能的PHY地址中, MII想要访问的PHY地址
       	temp |=(((uint32_t)0x1 << 6) & ETH_MACMIIAR_MR);//选择了要访问PHY的第6个MII寄存器
       	temp &= ~ETH_MACMIIAR_MW;//表示对PHY进行读操作,数据在MII的数据寄存器中。
       	temp |= ETH_MACMIIAR_MB;//先给MII定为"忙"
       	ETH->MACMIIAR=temp;
    
       	//在一定时间内,等待MII不忙;
       	do{
        	timeout++;
    		temp =ETH->MACMIIAR;
       	}while((temp & ETH_MACMIIAR_MB) && (timeout < (uint32_t)0xff));
    
       	if(timeout == 0xff)
       	{
        	ret = PHY_BUSY;
    	 	return ret;
       	}
       	
       	//不忙时,再获取PHY的连接状态;
       	ret = (((uint16_t)(ETH->MACMIIDR)) & PHY_Linked_Status)? PHY_LINKED : PHY_UNLINK;
    
       	return ret;  
    }
    
    
    展开全文
  • intel万兆以太网网卡吞吐量测试

    万次阅读 2013-05-30 11:47:11
    ,一个经过了3跳数(hops)的10GbE网络,以及另一台拥有万兆以太网网卡的服务器。应用通过TCP使用NFS协议出书数据,TCP设置为默认:  带宽 = 10Gbps  TCP Windows Size = 64K(65,536)  ...
  • 网卡作用网卡通过实现与数据链路层标准例如以太网或Wi-Fi)进行通信所必需的物理层电路,为计算机提供了专用的,专职的网络连接。每个卡代表一个设备,并且可以准备,传输和控制网络上的数据流。NI...
  • android开发的SDK中,没有提供3G网卡以太网的操作方法,但是有些设备(包括平板和手机)可以在设置中开启“以太网功能,就可以利用usb接口转网线,或者3G网卡连接上网。也就是说系统中提供了Ethernet(以太网)...
  • android4系统实现以太网来分享设备的internet网络(4G/wifi),framework层强制修改eth0以太网类型,实现以太网路由功能主要修改EthernetDateTracker.java
  • 以太网知识1:网卡初步认识

    千次阅读 2015-11-25 17:33:04
    网络适配器又称网卡或网络接口卡(NIC),英文名Network Interface Card.它是使计算机联网的设备.平常所说的网卡就是将PC机和LAN连接的网络适配器.网卡(NIC) 插在计算机主板插槽中,负责将用户要传递的数据转换为网络上...
  • 宽带传输二、由于核心层转发速率不够导致的数据堆积三、解决技术1.Cisco设备的以太网通道原理实现以太网通道2.华为设备的链路聚合:3.linux服务器的网卡绑定:4.windows系统的网卡桥接: 一、网线的传输 1.基带传输 ...
  • 网卡实现网络共享

    2017-11-28 10:15:00
    可以实现网卡共享上网。 需要在每个需要共享的机器上都需要安装。 这个是绿色版。 宽带共享(HomeShare) HomeShare是一款功能强大,易于使用的宽带共享软件。使用它,你可以完全抛弃宽带路由器。使用单网卡共享...
  • NUCLEO-F767ZI以太网功能实现笔记本电脑不开盖开机 不想打开笔记本盖子按开机按钮开机?可以使用Wake-on-LAN远程唤醒。这里展示怎么用NUCELO-F767ZI以太网功能发送MagicPacket唤醒笔记本电脑。 ...
  • 1:以太网实现LAN的一种技术,它允许嵌入式系统连接到一个LAN中,并可通过使用网关经Internet连接到外部世界,以太网主要目的是向LAN发送和从LAN接收以太网帧,在TCP/IP协议族中,不包括以太网协议,可以理解它...
  • 摘要:用8位单片机8031和ISA总线网卡实现RS485串行设备与以太网的连接,以传送控制信令和数据文件。程序设计采用C51语言,便于移植和调试。 单片机或微控制器(MCU)(也称为嵌入式系统)已经在各个领域得到了...
  • 问:如何实现单片以太网微控制器? 答:诀窍是将微控制器、以太网媒体接入控制器(MAC)和物理接口收发器(PHY)整合进同一芯片,这样能去掉许多外接元器件.这种方案可使MAC和PHY实现很好的匹配,同时还可减小引脚数、缩小...
  • 要:本文介绍了基于FPGA、功能经过扩展的以太网MII接口的硬件实现方法。硬件结构上由控制信号模块、分频器、异步FIFO缓冲和4b/5b编解码器4个部分组成。  关键词:100M以太网MII;FPGA;奇偶分频器;4b/5b编解码...
  • 我做的简单以太网交换机实现

    千次阅读 2007-04-12 18:10:00
    由于目的是,用Fifo实现单向隔离,所以第一步是想实现以太网交换机的双向转发功能。 用NIOS核,外接了两块网卡,连接后测试,发现不通。检查代码发现是一个if判断出了问题。又匆忙修改了设计,再试验,ping包能通了...
  •  : AFT(Adapter Fault Tolerance)技术是一种在服务器和交换机之间建立冗余连接的技术,亦即在服务器上安装两块网卡,一块为主网卡,另一块作为备用网卡,然后用两根网线将两块网卡都连到交换机上。  : AFT技术...
  • FPGA学习之以太网接收发送功能实现(OSI网络分层)(一) 1. ISO提出的OSI 在学习FPGA的以太网功能实现之前,首先必须了解究竟什么是网络? 目前有一种网络模型被国际上广泛接受,并且能够以抽象的方式来描述现在和...
  • 以太网交换机的工作原理 以太网交换机是数据链路层的机器,以太网使用物理地址(MAC地址),48位,6字节。其工作原理为:当接受到一个广播帧时,他会向除接受端口之外的所有端口转发。当接受到一个单播帧时,检查其...
  • Linux-千兆网卡驱动实现机制浅析

    千次阅读 2016-09-21 17:36:51
    网卡作为一个PCI设备,其必须遵守相应的PCI规范,即必须为网卡定义相应的标识号,每个PCI外设由一个总线编号、一个设备编号及一...本文的目的不是为了讲述如何编写驱动程序,主要是分析网卡驱动内部的实现机制。通过此
  • 以太网

    千次阅读 2018-03-17 11:20:34
    3.0以太网发展过程与内容简介以太网是当今最广泛的局域网。... 最初以太网是总线式以太网(共享式以太网以太网交换机诞生,共享式以太网转变为交换式以太网交换导致大量MAC帧广播导致危害,VLAN出现三层交...
  • 小兵以太网测试仪件是一款基于PC机网卡实现的测试仪工具。 主要功能:构造编辑报文、发包、抓包。小兵以太网测试仪 v3.2.8版本更新:o 增加了从多种类型的文件导入报文的功能
  • rtems网络移植-实现网卡驱动

    千次阅读 2016-11-26 00:21:41
    经过两周的调试,终于初步实现网卡的发送功能。 在这里参考了uboot的beaglebone网卡驱动和《tcp/ip详解卷二》 1、在前几篇博文中,讲解了网卡的mdio初始化过程,那么网卡lan8710a是如何与am335x处理器通信的呢? ...
  • 什么是以太网

    千次阅读 2020-03-26 23:12:30
    正如现在在IEEE 802.3标准中指出的,以太网原来由Xerox开发,后来由Xerox, DEC和Intel共同开发的。以太网一般使用同轴电缆和特种双绞线。最通常的以太网系统是10BASE-T,它的传输速率可达10 Mbps。...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 30,194
精华内容 12,077
关键字:

以太网网卡实现的主要功能是