以太网(Ethernet)是一种计算机局域网组网技术,基于IEEE 802.3标准,它规定了包括物理层的连线、电信号和介质访问层协议。

Ethernet接口的实质是MAC通过MII总线控制PHY的过程。

硬件原理分析

Ethernet网口通常由CPU、MAC和PHY三部分组成,通常用DMA控制器参与网口数据传输,以减轻CPU的负担。有的CPU内部集成MAC控制器,有的则采用外置的MAC芯片。

MII(Media Independent Interface 媒体独立接口)是IEEE 802.3标准定义的以太网行业标准。它包括一个数据接口,以及一个MAC和PHY之间的管理接口。MII数据接口包括分别用于发送器和接收器的两条独立信道,每条信道拥有数据、时钟和控制信号,共16条信号线。MII管理接口即MDIO接口包含一个时钟信号(MDC)和一个数据信号(MDIO),通过管理接口,上层能监视和控制PHY。根据IEEE802.3标准定义,MII管理接口最多支持同时管理32个PHY。

CPU/MAC通过MDIO接口(类似于I2C接口,因此PHY拥有PHY ADDR)管理PHY芯片。

MAC和PHY之间的数据传输接口类型有MII/RMII(Reduced MII)/SMII(Stream MII)/GMII几种,根据传输速率(10M/100M/1000M)又有不同细分,比如千兆GMII/RGMII/SGMII。

MDIO

MDIO接口类似于I2C,但是时序上有些区别,它的数据帧格式如下:

每个数据帧64位,LSB先发。

PRE_32: 帧前缀(连续的32个bit,均为1)

ST: 起始信号(2个bit,'01')

OP: 操作码(2个bit,'10' - read,'01'-write)

PA5: PHY Addr(5个bit的PHY地址域,因此MDIO最多可以管理32个PHY)

RA5: Reg Addr(5个bit的PHY内部寄存器地址,同理,PHY寄存器最多包含32个寄存器)

TA: Turn-around(状态转换域,2个bit,写操作时,输出'10';读操作时,释放MDIO数据线)

D16: 数据域(16个bit数据域)

MII数据接口

以太网媒体接口类型有MII/RMII/SMII/GMII几种,所有的这些接口都从MII而来,MII(Medium Independent Interface)指不用考虑传输介质类型(铜轴、光纤、电缆等),因为这些传输介质处理的相关工作都由PHY或者MAC芯片实现。MII接口可分为MAC模式和PHY模式,一般说来MAC和PHY对接,但是MAC和MAC也是可以对接的。

MII接口MAC模式

MII接口PHY模式

MII支持10兆和100兆的操作,一个接口由14根线组成(?),它的支持还是比较灵活的,但是有一个缺点是因为它一个端口用的信号线太多,如果一个8端口的交换机要用到112根线,16端口就要用到224根线,到32端口的话就要用到448根线,一般按照这个接口做交换机,是不太现实的,所以现代的交换机的制作都会用到其它的一些从MII简化出来的标准,比如RMII、SMII、GMII等。

RMII是简化的MII接口,在数据的收发上它比MII接口少了一倍的信号线,所以它一般要求是50兆的总线时钟。RMII一般用在多端口的交换机,它不是每个端口安排收、发两个时钟,而是所有的数据端口公用一个时钟用于所有端口的收发,这里就节省了不少的端口数目。RMII的一个端口要求7个数据线,比MII少了一倍,所以交换机能够接入多一倍数据的端口。和MII一样,RMII支持10兆和100兆的总线接口速度。

SMII是由思科提出的一种媒体接口,它有比RMII更少的信号线数目,S表示串行的意思。因为它只用一根信号线传送发送数据,一根信号线传输接受数据,所以在时钟上为了满足100的需求,它的时钟频率很高,达到了125兆,为什么用125兆,是因为数据线里面会传送一些控制信息。SMII一个端口仅用4根信号线完成100信号的传输,比起RMII差不多又少了一倍的信号线。SMII在工业界的支持力度是很高的。同理,所有端口的数据收发都公用同一个外部的125M时钟。

GMII是千兆网的MII接口,这个也有相应的RGMII接口,表示简化了的GMII接口。

SMII用1根线来传输数据,RMII用2根线来传输数据,MII用4根线来传输数据,GMII用8根线来传输数据,GMII和RMII都是并行传输且需要随路时钟。

特别介绍一下SGMII(Serial Gigabit Media Independent Interface),它通常用于GEMAC(Gigabit Ethernet Media Access Controller)即千兆以太网MAC控制器,它是基于GMII实现的,原理是GMII+Serdes,即引入Serdes技术实现串并转换,从而减少数据线的个数。

 

软件架构和驱动代码分析

按照OSI七层协议,MAC工作在数据链路层,PHY工作在物理层。在Linux网络子系统中,IP层、TCP/UDP层及其上的应用层均为软件实现,由内核协议栈和用户态socket代码实现。

网卡驱动的初始化流程可以归纳为:

1)为网络数据收发分配内存(或者更进一步配置DMA直接内存存取)

2)初始化MDIO控制器和MAC控制器

3)通过MDIO接口初始化PHY控制器

4)注册内核网络协议栈接口

5)启动收发

Linux网卡驱动分析的更多相关文章

  1. Linux网卡驱动移植--Dm9000网卡驱动分析

    1. Linux网络体系结构由以下5部分组成 ① 系统调用接口: 位于Linux网络子系统的顶部,为应用程序提供访问内核网络子系统的方法,主要指socket系统调用. ② 协议无关接口: 实现一组基于 ...

  2. linux串口驱动分析

    linux串口驱动分析 硬件资源及描写叙述 s3c2440A 通用异步接收器和发送器(UART)提供了三个独立的异步串行 I/O(SIO)port,每一个port都能够在中断模式或 DMA 模式下操作 ...

  3. Xilinx Uboot网卡驱动分析

    1.MAC控制器.网卡.PHY.MDIO.mii.gmii.rgmii概念扫盲 网卡在功能上包含OSI模型的两个层,数据链路层和物理层.物理层定义了数据传送与接收所需要的电与光信号.线路状态.时钟基准 ...

  4. Linux spi驱动分析(二)----SPI核心(bus、device_driver和device)

    一.spi总线注册 这里所说的SPI核心,就是指/drivers/spi/目录下spi.c文件中提供给其他文件的函数,首先看下spi核心的初始化函数spi_init(void).程序如下: 点击(此处 ...

  5. Linux I2C驱动分析(三)----i2c_dev驱动和应用层分析 【转】

    本文转载自:http://blog.chinaunix.net/uid-21558711-id-3959287.html 分类: LINUX 原文地址:Linux I2C驱动分析(三)----i2c_ ...

  6. 基于335X的Linux网口驱动分析

    基于335X的linux网口驱动分析 一. 系统构成 1.  硬件平台 AM335X 2.  LINUX内核版本 4.4.12 二. 网口驱动构架(mdio部分) mdio网口驱动部分 使用 总线.设 ...

  7. Linux网卡驱动架构分析

    一.网卡驱动架构 由上到下层次依次为:应用程序→系统调用接口→协议无关接口→网络协议栈→设备无关接口→设备驱动. 二.重要数据结构 1.Linux内核中每一个网卡由一个net_device结构来描述. ...

  8. Linux 网卡驱动学习(一)(分析一个虚拟硬件的网络驱动样例)

    在Linux,网络分为两个层,各自是网络堆栈协议支持层,以及接收和发送网络协议的设备驱动程序层. 网络堆栈是硬件中独立出来的部分.主要用来支持TCP/IP等多种协议,网络设备驱动层是连接网络堆栈协议层 ...

  9. linux网卡驱动移植

    这里重要的是物理层PHY receiver,MAC(media access control)层,这里与软件中的协议栈不同,在硬件上MAC是PHY的下一层.DM9000A将MAC和PHY做到一起,也可 ...

随机推荐

  1. windows上利用dhcpsrv搭建DHCP服务器

    起因是一个很奇葩的需求:乙方要远程升级仪器,用TeamViewer远程控制并ssh到仪器,但仪器内部IP地址没有写死,靠DHCP服务器获取.那么就要在PC建立DHCP服务器,用网线连接仪器,然后才能看 ...

  2. Neo4j源代码分析

    1.下载neo4j源码 https://github.com/neo4j/neo4j/ 参考文章 原文地址:https://blog.csdn.net/e15273/article/details/7 ...

  3. FTP连接不上的解决方法

    1.注意内网IP和外网IP 2.检查ftp服务是否启动 (面板首页即可看到) 3.检查防火墙20端口 ftp 21端口及被动端口39000 - 40000是否放行 (如是腾讯云/阿里云等还需检查安全组 ...

  4. 【学习总结】快速上手Linux玩转典型应用-第6章-linux常用命令讲解

    课程目录链接 快速上手Linux玩转典型应用-目录 目录 1. 软件操作命令 2. 服务器硬件资源信息 3. 文件操作命令 4. Linux文本编辑神器vim与其他常用命令 5. 系统用户操作命令 6 ...

  5. 将Medium中的博客导出成markdown

    Medium(https://medium.com)(需要翻墙访问)是国外非常知名的一个博客平台.上面经常有很多知名的技术大牛在上面发布博客,现在一般国内的搬运的技术文章大多数都是来自于这个平台. M ...

  6. React中配置Sass引入.scss文件无效

    React中配置Sass引入.scss文件无效 在react中使用sass时,引入.scss文件失效尝试很多方法没法解决,最终找到解决方法,希望能帮助正在坑里挣扎的筒子~ 在node_modules文 ...

  7. CentOS7 安装 Mysql5.6.40

    CentOS7.5二进制安装MySQL-5.6.40 安装之后登陆不上,mysql.user 表是空的时: Mysql User表为空 mysql创建用户报错ERROR 1364 (HY000): F ...

  8. 【转】UBOOT——启动内核

    转自:https://www.cnblogs.com/biaohc/p/6403863.html 1:什么是UBOOT,为什么要有UBOOT? UBOOT的主要作用是用来启动linux内核,因为CPU ...

  9. PAT Basic 1027 打印沙漏 (20 分)

    本题要求你写个程序把给定的符号打印成沙漏的形状.例如给定17个“*”,要求按下列格式打印 ***** *** * *** ***** 所谓“沙漏形状”,是指每行输出奇数个符号:各行符号中心对齐:相邻两 ...

  10. 工作中常用到的linux命令总结

    linux系统ubantu debian系统下载文件:wget https://github.com/buger/goreplay/releases/download/v1.0.0/gor_1.0.0 ...