1.mac控制器,phy芯片,rgmii协议
2.寄存器介绍
3.驱动源码解析
4.nanopi t2 移植rtl8211e网卡驱动(首发)

硬件构成部分

以太网卡或者是ARM开发板的网络部分通常由MAC控制器和PHY构成,当然也有做到一个芯片上的,这个比价少见。MAC控制器主要完成数据链路层的IP数据报打包成网络帧并将数据发送给PHY,PHY主要完成速度协商,数字信号到模拟信号的转换最后吧信号输出到网线上。

mac控制器

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

以太网数据链路层其实包含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接口链接的.

PHY

其他地方复制一段比较官方详细解读
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的部分功能.它可以检测到网络上是否有数据在传送,如果有数据在传送中就等待,一旦检测到网络空闲,再等待一个随机时间后将送数据出去.如果两个碰巧同时送出了数据,那样必将造成冲突,这时候,冲突检测机构可以检测到冲突,然后各等待一个随机的时间重新发送数据.这个随机时间很有讲究的,并不是一个常数,在不同的时刻计算出来的随机时间都是不同的,而且有多重算法来应付出现概率很低的同两台主机之间的第二次冲突.

许多网友在接入Internt宽带时,喜欢使用”抢线”强的网卡,就是因为不同的PHY碰撞后计算随机时间的方法设计上不同,使得有些网卡比较”占便宜”.不过,抢线只对广播域的网络而言的,对于交换网络和ADSL这样点到点连接到局端设备的接入方式没什么意义.而且”抢线”也只是相对而言的,不会有质的变化.

现在交换机的普及使得交换网络的普及,使得冲突域网络少了很多,极大地提高了网络的带宽.但是如果用HUB,或者共享带宽接入Internet的时候还是属于冲突域网络,有冲突碰撞的.交换机和HUB最大的区别就是:一个是构建点到点网络的局域网交换设备,一个是构建冲突域网络的局域网互连设备.

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

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

gmac

gmac就是mac控制器,ARM芯片一般都是集成在芯片内部。不同的gmac控制方式不一样,一般需要查阅芯片手册。

PHY和MAC之间如何进行沟通

MAC控制器和PHY之间由两条数据通道,一个数据接口,一个管理接口。数据接口根据协议的不同而不同,一般常见的协议有MII、GMII和RGMII。其中管理接口有点类似I2C协议的通信方式,PHY有自己的寄存器,通过管理接口访问的时候需要先发送地址和寄存器编号。PHY寄存器的地址空间为5位,从0到31最多可以定义32个寄存器(随着芯片功能不断增加,很多PHY芯片采用分页技术来扩展地址空间以定义更多的寄存器),IEEE802.3定义了地址为0-15这16个寄存器的功能,地址16-31的寄存器留给芯片制造商自由定义,如下表所示:

MII

MII数据接口包含16个信号和2个管理接口信号,如下图所示:

信号名称 描述 方向
TX_CLK 发送时钟 PHY → MAC
TX_ER 发送数据错误 MAC → PHY
TX_EN 发送使能 MAC → PHY
TXD0 发送数据位0(最先传输) MAC → PHY
TXD1 发送数据位1 MAC → PHY
TXD2 发送数据位2 MAC → PHY
TXD3 发送数据位3 MAC → PHY
RX_CLK 接收时钟 PHY → MAC
RX_DV 接收数据有效 PHY → MAC
RX_ER 接收数据错误 PHY → MAC
RXD0 接收数据位0 (最先传输) PHY → MAC
RXD1 接收数据位1 PHY → MAC
RXD2 接收数据位2 PHY → MAC
RXD3 接收数据位3 PHY → MAC
CRS 载波监测 PHY → MAC
COL 冲突碰撞监测 PHY → MAC
MDIO 管理数据 双向
MDC 管理数据时钟 MAC → PHY

RMII

RMII(Reduced Media Independant Interface),精简MII接口,节省了一半的数据线。RMII收发使用2位数据进行传输,收发时钟均采用50MHz时钟源。信号定义如下:

信号名称 描述 方向
REF_CLK 参考时钟 MAC→PHY或由外部时钟源提供
TX_EN 发送数据使能 MAC → PHY
TXD0 发送数据位0(最先传输) MAC → PHY
TXD1 发送数据位1 MAC → PHY
RX_ER 接收错误 PHY → MAC
RXD0 接收数据位0(最先传输) PHY → MAC
RXD1 接收数据1 PHY → MAC
CRS_DV 载波和接收数据有效 PHY → MAC
MDIO 管理数据 双向
MDC 管理数据时钟 MAC → PHY

其中CRS_DV是MII中RX_DV和CRS两个信号的合并,当物理层接收到载波信号后CRS_DV变得有效,将数据发送给RXD。当载波信号消失后,CRS_DV会变为无效。在100M以太网速率中,MAC层每个时钟采样一次RXD[1:0]上的数据,在10M以太网速率中,MAC层每10个时钟采样一次RXD[1:0]上的数据,此时物理层接收的每个数据会在RXD[1:0]保留10个时钟。

SMII

SMII(Serial Media Independant Interface),串行MII接口。它包括TXD,RXD,SYNC三个信号线,共用一个时钟信号,此时钟信号是125MHz,信号线与此时钟同步。信号定义如下:

信号名称 描述 方向
REF_CLK 参考时钟 外部时钟源提供125MHz
TXD 发送数据 MAC → PHY
RXD 接收数据 PHY → MAC
SYNC 同步信号 -
MDIO 管理数据 双向
MDC 管理数据时钟 MAC → PHY

SYNC是数据收发的同步信号,每10个时钟同步置高一次电平,表示同步。TXD和RXD上的数据和控制信息,以10bit为一组。发送部分波形如下:

从波形可以看出,SYNC变高后的10个时钟周期内,TXD依次输出一组10bit的数据即TX_ER,TX_EN,TXD[0:7],这些控制信息和MII接口含义相同。在100M速率中,每一组的内容都是变换的,在10M速率中,每一组数据需要重复10次,采样任一一组都可以。

GMII

GMII(Gigabit Media Independant Interface),千兆MII接口。GMII采用8位接口数据,工作时钟125MHz,因此传输速率可达1000Mbps。同时兼容MII所规定的10/100 Mbps工作方式。GMII接口数据结构符合IEEE以太网标准,该接口定义见IEEE 802.3-2000。信号定义如下:

信号名称 描述 方向
GTX_CLK 1000M发送时钟 MAC → PHY
TX_CLK 100/10M发送时钟 MAC → PHY
TX_ER 发送数据错误 MAC → PHY
TX_EN 发送使能 MAC → PHY
TX_[7:0] 发送数据8bit MAC → PHY
RX_CLK 接收时钟 PHY → MAC
RX_DV 接收数据有效 PHY → MAC
RX_ER 接收数据错误 PHY → MAC
RX_[7:0] 接收数据8bit PHY → MAC
CRS 载波监测 PHY → MAC
COL 冲突碰撞监测 PHY → MAC
MDIO 管理数据 双向
MDC 管理数据时钟 MAC → PHY

RGMII

RGMII(Reduced Gigabit Media Independant Interface),精简GMII接口。相对于GMII相比,RGMII具有如下特征:

发送/接收数据线由8条改为4条

  • TX_ER和TX_EN复用,通过TX_CTL传送
  • RX_ER与RX_DV复用,通过RX_CTL传送
  • 1 Gbit/s速率下,时钟频率为125MHz
  • 100 Mbit/s速率下,时钟频率为25MHz
  • 10 Mbit/s速率下,时钟频率为2.5MHz

信号定义如下:

信号名称 描述 方向
TXC 发送时钟 MAC→PHY
TX_CTL 发送数据控制 MAC → PHY
TXD[3:0] 发送数据4bit MAC → PHY
RXC 接收时钟 PHY → MAC
RX_CTL 接收数据控制 PHY → MAC
RXD[3:0] 接收数据4bit PHY → MAC
MDIO 管理数据 双向
MDC 管理数据时钟 MAC → PHY

虽然RGMII信号线减半,但TXC/RXC时钟仍为125Mhz,为了达到1000Mbit的传输速率,TXD/RXD信号线在时钟上升沿发送接收GMII接口中的TXD[3:0]/RXD[3:0],在时钟下降沿发送接收TXD[7:4]/RXD[7:4],并且信号TX_CTL反应了TX_EN和TX_ER状态,即在TXC上升沿发送TX_EN,下降沿发送TX_ER,同样的道理试用于RX_CTL,下图为发送接收的时序:

【NanoPi T2】 5.uboot gmac网卡驱动(1) - mac控制器,phy芯片,rgmii协议相关推荐

  1. 【NanoPi T2】 7.uboot gmac网卡驱动(3) - 驱动源码解析

    1.mac控制器,phy芯片,rgmii协议 2.寄存器介绍 3.驱动源码解析 4.nanopi t2 移植rtl8211e网卡驱动(首发) 驱动注册入口 驱动的注册分两个部分,一个部分是静态编译的时 ...

  2. 【NanoPi T2】 6.uboot gmac网卡驱动(2) - 寄存器介绍

    1.mac控制器,phy芯片,rgmii协议 2.寄存器介绍 3.驱动源码解析 4.nanopi t2 移植rtl8211e网卡驱动(首发) s5p4418 gmac概述 支持千兆速度,协议为RGMI ...

  3. UEFI 中的Gmac网卡驱动实现

    UEFI 中的Gmac网卡驱动实现 最近在龙芯平台完成了Gmac网卡驱动的迁移,目前已经在UEFI上跑起来了,经过大量的测试,gmac搭配Rtl或者intel的网卡进行pxe启动都是没有问题的.也算是 ...

  4. 网卡构造:MAC与PHY的关系,GMAC介绍

    GMAC:千兆网媒体访问控制 GMAC接口(1)--GMAC简介_daikaimiao的博客-CSDN博客_gmac GMAC接口(2)--协议_daikaimiao的博客-CSDN博客_gmac协议 ...

  5. 在rk3328上从零构建ubuntu16.04系统系列(1):sdk的环境配置和编译与uboot的网卡驱动配置

    如果有问题,请加QQ群 891339868 进行交流 当前的项目是基于RK3328的硬件方案,安装ubuntu16.04系统,现在基本上告一段落,现在将这个过程记录下来,以备以后查阅,今天先描述一下怎 ...

  6. Dm9000aep在u-boot下网卡驱动调试笔记

    作者:杨硕,华清远见嵌入式培训中心讲师. 最近在将u-boot1.3.4移植到三星s5pc100 SOC平台发现u-boot启动之后无法ping通主机,也不能用tftp下载内核.硬件平台用的网卡芯片是 ...

  7. gmac网卡驱动1-------mac与phy基础知识

    GMAC简介 网卡 用于报文控制,一般有mac和phy组成. mac: 一般用于数据的过滤 phy: 操作数据实际的收发 mac 分类: mac按最大传输速率可以分为emac,gmac组成: 帧发送( ...

  8. Linux系统网卡驱动phy工作原理解析

    Linux网卡驱动架构 MAC控制器驱动是芯片厂商集成在SDK中 比如三星控制器.ATMEL控制器,这部分驱动厂商已经写好了, linux下自带通用phy驱动phy_device.c(phy层协议是通 ...

  9. 2015版uboot的启动过程及网卡驱动结构分析

    启动流程和上篇博文介绍的rtems类似 首先是start.s: 在这里选择arm的arm7作为例子分析,代码:/arch/arm/cpu/armv7/start.s /** armboot - Sta ...

最新文章

  1. 难忘的一天——装操作系统(二)
  2. 在pymongo中使用distinct
  3. 自定义myeclipse中的servlet模板文件
  4. mysql8 安装_MySQL8.x安装使用
  5. 【渝粤教育】 广东开放大学 21秋期末考试互联网营销概论10092k2
  6. 玩转DB里的数据—阿里云DMS任务编排之简介和实操
  7. LeetCode: Sort List 解题报告
  8. 计算机数码频道策划方案,艺人策划方案电脑基础知识IT计算机专业资料-艺人策划方案.pdf...
  9. Web后端学习笔记 Flask(7)数据库
  10. i.MX31主要开发资源(转贴)
  11. 基于ffmpeg的kxmovie的使用
  12. springboot 腾讯云短信平台SDK
  13. maxon电机驱动简介
  14. 2020年专业408的算法题
  15. Java基础面试 --序列化,反射,拷贝
  16. 安全L2-1.4-安全术语介绍
  17. 送几个非常nice的软件
  18. Turtle 画方形 画圆 画三角形
  19. 远程工具之一---rsync用法介绍
  20. 主力资金是股价的风向标

热门文章

  1. 关于centOS无法识别1920*1080分辨率的解决方法
  2. Java日常实习 京东/爱奇艺面经
  3. 第1关:ZooKeeper初体验
  4. 机器学习入门系列05,Classification: Probabilistic Generative Model(分类:概率生成模型)
  5. 国外问卷调查这个项目可以做吗?
  6. 编写一个触发器:当修改一个学生专业的时候(转专业),则自动将本学期新专业同学全都选修的课程给该同学选修
  7. 喜欢你,三个星期了!
  8. DoEvents的用法
  9. 分布式基础-谁来当老大(二)
  10. 高德地图WEB端,在所画的圆(Circle)内显示在圆(Marker)内的点