网卡驱动之01硬件及协议介绍

来源:互联网 发布:出租外汇交易软件 编辑:程序博客网 时间:2024/05/22 03:04

在此之前,本人对网卡的理解局限于平台上的PHY芯片或者MAC芯片,甚至认为是相同的东西以至于在在开发驱动程序追踪内核代码时,总是傻傻分不清。本文旨在通过介绍硬件常识以达到更好的理解驱动代码。

0 PHY 与 MAC

TCP/IP协议栈分为五层,其中自顶向下的前三层(应用层、传输层和网络层)都是软件实现的概念(集成在操作系统软件中)。而后两层,则有相应的硬件控制器实现,通常链路层的芯片集成在处理器内部,即MAC Controller芯片。而物理层,则是有独立于处理器之外的PHY芯片实现。

MAC芯片实现的是数据链路层的功能,如寻址、数据帧构建、数据差错检查等。

PHY芯片则是定义了数据传送与接收所需要的电与光信号、线路状态、数据编码等,并向数据链中层提供标准的接口。

从功能划分考虑,PHY分为协调子层(Reconciliation sublayer)用于实现指令转换;PCS;PMA和PMD则分别表示实现物理层协议的各子层。在实际应用系统中,这些子层的操作细节将全部由PHY芯片实现,如下图所示。


互联方式

以最常见的以太网PHY与以太网MAC为例,IEEE802.3中定义了之间的互联接口,常见的有MII/GMII/RGMII接口。即PHY与MAC中都会实现至少一种接口方式,以达到互联通讯的目的。

1 MII、GMII、RGMII

       从英文缩写中就不难发现,关键需要理解MII,而后两者都是基于MII所衍生而出的。

       MII(Medium Independent Interface)即媒体独立接口,它是由IEEE802.3定义的以太网标准。包括一个数据接口,以及一个MAC和PHY之间的管理接口。

       数据接口包括分别用于发送器与接收器的两条独立信道,每条信道都有自己的数据、时钟和控制信号,共计16个信号。

       管理接口是个双信号接口:一个时钟信号,另一个是数据信号,通过管理接口,MAC芯片能够控制PHY芯片。

       区别:RMII(Reduced MII)、GMII(Gigabit MII)、RGMII(Reduced GMII)

       MII支持10M和100M的操作,一个接口由14根线组成,缺点是使用信号线太多了,如果一个8端口的交换机就需要使用到112根线,16端口就要用到224根线,到32端口的话需要用到448根,因此交换机如果使用这种方式制作难度太大。

       RMII,出于上述目的,衍生出RMII接口,数据收发上它比MII接口少了一倍的信号线,因此需要更高的时钟频率维持相同的收发速率。RMII要求7个数据线,比MII少了一倍,所以交换机能够接入多一倍的端口。但是速率发面与MII同样只能支持10M和100M的速率。

       GMII,则是从提高速率的角度出发定义的接口,支持1000M的速率,同样也有RGMII接口,表示简化了的GMII接口。

       SMII,这个则是由思科提出的,换言之接入思科的网络设备,都可以考虑是否需要使用该种协议,它的优势在于使用了更少的信号线,S表示串行,只使用一根信号线发送数据,一根信号线接收数据,但同样需要更高的时钟来满足相同的传输速度,达到了125M。

吉比特以太网协议与10/100Mb/s以太网协议的差别仅仅在于物理层,即PHY芯片的不同,PHY

2 MDIO

       除了上述介绍的数据接口以外,无论何种协议都还包含了一个管理接口。管理接口的作用就是控制PHY芯片的目的,例如读取PHY芯片的ID参数。管理接口又分为用于配置时钟的管理配置时钟接口(MDC)、管理配置IO接口(MDIO)。

       MDIO是一种简单的双线串行接口,由IEEE802.3定义,该接口有32个寄存器,但是地址却由16bit组成(详细缘由可追述MDIO协议)。IEEE规定了前16个寄存器的含义,后16个由芯片厂商自由定义。注意这些寄存器都是针对PHY芯片,而不是MAC芯片,但是剩余的16个通常并不够使用,所以有的PHY芯片厂商提出page概念,扩充寄存器容量,详细可参见相应的芯片数据手册。

       使用的场景:在一个 PHY 管理接口中,使用 MDIO接口组件读取和写入 PHY 控制和状态寄存器。它在运行之前对每个 PHY 进行配置,并在运行期间监控链接的状态。

MDIO的工作流程为: MDIO接口在没有传输数据的空闲状态(IDLE)数据线MDIO处于高阻态。 MDIO出现一个2bit的开始标识码(01)一个读/写操作开始。 MDIO出现一个2bit数据来标识是读操作(10)还是写操作(01)。 MDIO出现一个5bit数据标识PHY的地址。 MDIO出现一个5bitPHY寄存器地址。 MDIO需要2个时钟的访问时间。 MDIO串行读出/写入16bit的寄存器数据。 MDIO恢复成IDLE状态,同时MDIO进入高阻状态。

MDIO举例:


       上图是某厂商做的MDIO模块的框图,实际上一般会集成在PHY芯片中,主要关键接口说明如下。

       1)mdc是由MDIO主机提供的总线时钟,它直接连接到物理MDC输入引脚;

       2)phy_addr:物理地址,注意这个是指phy芯片的物理地址,而非内部寄存器的地址,但是范围也是介于0x00-0x1f之间;

MDIO地址

       MDIO涉及到两个地址,一个是PHY ADDR即芯片自身的地址,如果熟悉MDIO时序可以知道,在每次PHY芯片与MAC Controller交互时都需要使用到PHY ADDR。而另外一个是REGADDR,IEEE定义了前16个。注意两者都是5比特地址宽度。

关于PHY ADDR,是由硬件电路设计决定的,类似于大多数EEPROM的I2C高比特地址是由pin的高低电平指定。以Marvell的phy芯片为例,PHY ADDR是由Config[3:0]决定的,关于映射关系如下图所示,可见每一比特可以决定两种信息。即Config[0]决定了PHYAD[1]和PHYAD[0]。


       至于具体的映射关系是由硬件上Config的电气特性决定,如下图所示。


       例如假设config[0]上接了VDDO即高电平,那么bit1,bit0都是1,再根据映射关系可知config[0]的bit[1]是PHYAD[1],而bit[0]是PHYAD[0]。所以PHYAD[1:0] = 2’b11。


3 网卡

PHY和MAC是网卡的主要组成部分,网卡一般用RJ-45插口,10M网卡的RJ-45插口也只用了1、2、3、6四根针,而100M或1000M网卡的则是八根针都是全的。除此以外,还需要其它元件,因为虽然PHY提供绝大多数模拟支持,但在一个典型实现中,仍需外接6、7只分立元件及一个局域网绝缘模块。绝缘模块一般采用一个1:1的变压器。这些部件的主要功能是为了保护PHY免遭由于电气失误而引起的损坏。

参考文章

http://www.cnblogs.com/zxc2man/p/3769777.html

http://www.cnblogs.com/cornflower/archive/2010/01/19/1651312.html

0 0
原创粉丝点击