了解网口通信基本原理
实现网络通信实质上是PHY与MAC及RJ45接口实现信号传输。MAC 就是以太网控制器,MAC属于数据链路层,主要负责把数据封装成帧,对帧进行界定实现帧同步。对MAC地址和源MAC地址及逆行相应的处理并对错误帧进行处理。PHY属于物理层,在以太网控制器中负责物理层功能的芯片叫PHY芯片,因为网线上传输的是模拟信号而MAC发出或接收的信号为数字信号所以PHY主要负责对网络数据的编解码处理以及一些网络状态的控制。RJ45就是我们常用的网口座子。
在嵌入式领域通常MAC是被集成在CPU里面的,这种方案是目前的主流方案,PHY层(物理层)一般是使用专用的PHY芯片。如果要PHY芯片在一个特定的模式下工作就需要对PHY芯片进行控制,在这里用到的是MDIO总线。通过MDIO总线对PHY芯片的寄存器进行相应配置实现一些模式以及功能的控制。而数据信息,是由另外的网络协议接口进行传输,例如ELF 1上的PHY和MAC之间是用的RMII接口实现的数据传输,整体架构如图2.4所示:
图2.4 三者关系图
了解MDIO总线
MDC是开漏(OD)输出,只能输出低电平,因此需要上拉处理,为MDIO提供时钟信号;根据KSZ8081RNB芯片手册(数据手册中查找),MDIO管理接口数据传输格式及含义如下表所示:
需要注意的是,TA在读操作和写操作两种状态下数据位不同,TA是介于寄存器地址和寄存器数据之间的2个bit位,用来转换数据传输方向。读操作时,地址传输和数据传输控制方不同,设置2bit TA的目的就是为了防止MDIO总线上产生竞争。TA的第1位z,PHY和MAC均释放总线控制输出高阻,且后面MAC一直保持高阻态状态,第2位0由PHY提供。第2位相当于一个应答信号,如果第2位为高电平,PHY无应答。除此之外,Idle为空闲状态,此时MDIO无源驱动,处高阻状态,但一般用上拉电阻使其处在高电平。
表2.1
名称 |
注释 |
Preamble |
前导位32bit,建立MAC和PHY芯片之间的同步 |
Start |
起始位2bit,固定发送01表示数据传输开始 |
OP |
读写位2bit,10为读操作,01为写操作 |
PHY Address |
PHY芯片MDIO接口地址5bit |
REG Address |
MDIO寄存器地址5bit |
TA |
地址传输和数据传输转换时的空闲时间2bit |
DATA |
数据位16bit |
Idle |
空闲状态 |
关于网络信号模式
常见网络信号模式包含:MII、RMII、GMII、RGMII、SGMII。每种模式包含的信号线数量和控制线数量各不相同,通讯速度也不相同:MII、RMII为百兆网络,GMII、RGMII、SGMII为千兆网络。区别和关系可以参考表2.2和图2.5。各模式工作原理可根据我们的视频进行详细了解。
表2.2 常见网络模式区别
类型 |
收发****信号数 |
时钟数 |
使能数 |
错误提示****信号 |
检测****信号数 |
合计 |
速度 |
MII |
TXD 4根RXD 4根 |
TX_CLK 1根RX_CLK 1根 |
TX_EN 1根RX_DV 1根 |
TX_ER 1根RX_ER 1根 |
CRS 1根COL 1根 |
16 |
百兆 |
RMII |
TXD 2根RXD 2根 |
CLK_REF 1根 |
TX_EN 1根 |
RX_ER 1根 |
CRS与RX_DV共用 1根 |
8 |
|
GMII |
TXD 8根RXD 8根 |
GTX_CLK1根RX_CLK 1根 |
TX_EN 1根RX_DV 1根 |
TX_ER 1根RX_ER 1根 |
CRS 1根COL 1根 |
24 |
千兆 |
RGMII |
TXD 4根RXD 4根 |
TX_CLK 1根RX_CLK 1根 |
TX_EN与TX_ER共用 1根 |
RX_DV与RX_ER共用 1根 |
CRS 1根COL 1根 |
14 |
|
SGMII |
TXD RXD各1对差分对 |
由PYH提供的参考时钟1根 |
5 |
|
|
|
|
网络变压器
ELF 1使用的RJ45内部集成了网络变压器,其4、5脚位中心抽头引脚,该引脚有两种接法:电流型,中心抽头直接接电源;电压型,中心抽头通过100nF电容接地(ELF 1的接法,引脚4、5接100nF电容C87和C88)。
实际使用中需要如何处理中心抽头需要根据PHY芯片的驱动类型确定。
PHY芯片电路原理说明
ELF 1开发板最多支持两路百兆网口,底板(图2.5)和扩展板(图2.6)上各一路。ELF 1使用两个型号为KSZ8081RNB的PHY芯片实现网络通信,通过对前几段内容的了解可以分析出,KSZ8081RNB是通过MDIO总线挂载到ELF 1上的,MDIO总线对应芯片的11、12引脚主要负责通过配置PHY芯片KSZ8081RNB的寄存器控制PHY芯片的网口速率、网口双工模式、自协商使能等功能。KSZ8081RNB的数据接口是通过RMII和ELF 1连接,并传输网络数据的。
ENET_PHYAD0、ENET_PHYAD1和ENET_RXD1在芯片上电复位时会锁存一个电平状态作为芯片的PHY地址,在芯片上电后,其数据被锁存到相应寄存器中,而后恢复芯片的默认功能,不会影响通信。由于该款芯片有三条地址线,因此理论上同一块板子最多可以挂载7颗(001—111。000作为广播地址,是不可以被使用的);
ENET_CRS_DV、ENET_CFG1、ENET_CFG0是芯片接口模式选择, ELF 1设置为100;
图2.5 底板网口原理图
图2.6 扩展板网口原理图
网口电路设计指南
(1)ELF 1可支持两路百兆网。
(2)设计网口电路时8081的10号引脚必须连接6.49K_%1精度的电阻,否则可能会影响网口正常工作出现芯片无法挂载、网口不Link等问题。
(3)MDIO以及RMII接口的引脚要注意电平匹配,核心板为3.3V电平。
(4)MDIO总线上需要加上拉电阻阻值可以根据实际情况调整。
网口PCB设计指南
(1)MDIO总线上挂载多个PHY芯片时,使用串联方式,不要分叉布线
(2)RGMII接口分为发送信号,接收信号和控制信号,各组阻抗控制在50Ω±10%
(3)发送信号和接收信号,布线长度不超过100mm,组内信号长度误差不超过2.54mm
(4)时钟预留对地电容,方便后期调试
(5)MDI接口采用差分布线,阻抗100Ω±10%
(6)MDI组内差分误差不超过0.12mm
(7)芯片内部DCDC连接的功率电感要靠近芯片保证回路最短,并且保证地回路的完整;
(8)数据线上预留的串联电阻需要靠近源端放置;
(9)保护器件建议放置在变压器内侧,在变压器和PHY之间,靠近变压器;
(10)供电部分要考虑电流的大小,线宽尽量宽一点。要有足够的载流能力,滤波电容的位置尽量靠近芯片。
(11)网口 RJ45 在布线时要注意进行隔离地。
网口问题排查思路
在遇到网口问题时排查网口问题首先要明确问题点,网口不通的情况下首先要看 PHY 有没有成功挂载上,可通过是否可以启动网卡来判断,如果根本看不到设备节点或者在输入启动网卡的命令后报错,找不到 PHY 芯片说明 PHY 芯片没有成功挂载。如果可以正常启动网卡说明 PHY 可以成功挂载。
如果 PHY 没挂载上排查思路如下:
(1)首先看是否有缺件、少件,原件焊接错误的情况,PHY 芯片焊接是否过关等。
(2)检查各路供电是否正常,电源是否稳定,是否有明显压降、跌坑现象。滤波电容容量是否达标。
(3)检查复位电路是否有复位动作,复位后是否可以正常抬起复位信号,复位信号低电平的维持时间是否满足 PHY 的要求。
(4) 检查芯片的时钟频率、幅值、以及信号质量是否满足手册要求。不同类型的时钟输入方式原理是否正确。
(5)检查 PHY 芯片的地址、模式、电平配置等参数设置的上下拉电阻是否正常。
(6)检查 MDIO 总线的波形幅值、斜率、是否正常,振铃是否严重,是否有下降沿压降不到 0 的现象,在 MDC 的上升沿来临时 MDIO 的电平维持时间是否满足手册要求等问题。
先将芯片成功挂载后再看网口通不通。如果经过以上检测排查成功将 PHY 芯片挂载但是网口还是不通,那就需要继续检查数据接口部分。根据不同接口的规定来对数据接口的总线进行检查。
(1)按照具体的接口形式检查数据线连接是否正确,尤其是在使用MII,RMII,GMII,RGMII时的线序。检查参考时钟波形是否正常。
(2)检查网络变压器的中心抽头的接法是否与PHY 规定的网络变压器的驱动类型相对应。
总结上文我们对网口部分中几处重要的知识点进行了逐一的讲解,然而“纸上得来终觉浅”,还是希望大家可以在学习的过程中亲自动手去测,去排查,去熟悉我们的网口模块,这样才能学习的更加透彻。如果大家在学习的过程中有任何的问题,也欢迎大家和我们的技术支持进行进一步沟通和交流,我们期待和您共同进步。