1、背景
1.1通用知识
网口结构简图,其中包括CPU、MAC和PHY三部分组成。DMA控制器通常是CPU的一部分,用虚线表示DMA控制器可能会参与到网口数据传输中。
对于上图中的三部分,并不一定都是独立的芯片,根据组合形式可分为下面几种类型:
<1>CPU中集成MAC与PHY;典型
<2>CPU中集成MAC控制器,PHY采取独立芯片;典型LAN8720A、KSZ8081
<3>CPU不集成MAC和PHY,MAC和PHY采用集成芯片;典型DM9000、3C905/82559等
工业级的CPU采用类型2的较多,以类型2做说明。
MAC控制器集成在CPU中,PHY芯片通过MII接口语CPU上MAC控制器连接。
在软件上对网口的操作通常分为下面几步:
1>为数据收发分配内存;
2>初始化MAC寄存器
3>初始化PHY寄存器(通过MIIM接口)
4>启动收发
1.2 MAC控制器的作用
以集成在CPU中的MAC控制器来说明作用。MAC从总线上收到IP数据包(或者其他网络层协议的数据包)后,将之拆分并重新打包成最大为1518Byte,最小为64Byte的帧。这个帧包括目标MAC地址、源MAC地址和数据包里面的协议类型还有32位CRC码。
1.3 PHY的作用
PHY发送数据:接收MAC控制器并行发送过来的数据,每4bit就增加1bit的检错码,然后把并行数据转化为串行流数据,在按照物理层的编码规则(10Based-T的NRZ编码或100based-T的慢切斯特编码)把数据编码,在变成模拟信号把数据送出去。
PHY接收数据:流程相关。
PHY还有一个重要的功能就是实现CSMA/CD的部分功能,它能检测网路中时候又数据在传送,有则等待,空闲就等待一个随机时间后在把数据发出去。
不同PHY碰撞后计算随机时间的方法设计上不同,因此就存在有些网卡"抢线"能力强。
1.4 参考资料
MII与RMII接口的区别 https://blog.youkuaiyun.com/fun_tion/article/details/70270632
2、MII接口(独立语介质的接口)
MII用于MAC与外接的PHY互联,支持10Mbit和100Mbit数据传输模式。MII的信号线如下图所示
MII用于连接MAC和PHY,包含两种信号接口:
1. 一个数据接口用于MAC和PHY之间接收和发送以太网帧数据。
2. 一个PHY管理接口,即MDIO,用于读写每个PHY的控制寄存器和状态寄存器,以达到控制PHY行为和监控PHY状态的目的。
信号名称 | Direction | 描述 | Belong to |
TxD[3:0] | MAC to PHY | 发送数据,是MAC控制器驱动的,每次传输4bit数据(并行),数据在Tx_EN信号有效时有效。Tx_EN信号无效时,PHY忽略传输的数据,这时候可改信号。 | MAC层到物理层的发送数据接口 |
Tx_EN | MAC to PHY | 发送使能信号,此信号必须与数据前导符的起始位同步出现,并在传输完毕前一直保持。 | |
Tx_CLK | PHY to MAC | 发送时钟信号,由PHY驱动的。对于10Mbit/s的数据传输,需要10/4=2.5MHz;对于100Mbit/s的数据传输,则使用25MHz的时钟 | |
Tx_ER | MAC to PHY | 报错线 | |
RxD[3:0] | PHY to MAC | 接收数据,是PHY驱动的。每次接收4位数据,数据在Rx_DV信号有效时有效。当Rx_EN无效,而Rx_ER有效时,根据RxD[3:0]可判断Error原因。 | 物理层到MAC层的接收数据接口 |
Rx_DV | PHY to MAC | 接收使能信号,由PHY控制。当PHY准备好数据供MAC接收时,使能该信号。此信号必须和帧数据的首位同步出现,并保持有效直到数据数据传输完成。 | |
Rx_CLK | PHY to MAC | 接收时钟信号,由PHY驱动 | |
Rx_ER | PHY to MAC | 接收出错信号,保持一个或多个时钟周期(Rx_CLK)的有效装填,标明MAC在接收过程中检测到错误。 | |
CRS | PHY to MAC | 空闲监听 carrier sense | 物理层到MAC层状态信号 |
COL | PHY to MAC | 冲突监听 collision detected | |
MDC | MAC to PHY | PHY 管理时钟 | MAC和物理层控制和状态信息 |
MDIO | IO | 串行发送管理数据 |

CPU上通过读写两组寄存器