PHY芯片快速深度理解(持续更新中……)

article/2025/9/27 22:22:55

目录

什么是phy

为什么要熟悉RJ45网口

网络七层协议

两个模块进行通信

什么是MDIO协议

MDIO的作用 

MDIO没那么重要

MDIO读写时序

为什么说读取的phy最多32个

个人感谢:

看完后建议再看一下,会有更深入的理解

深度理解 RGMII (包含Linux和realtek)_daisy.skye的博客-CSDN博客


什么是phy

物理层芯片称为PHY、数据链路层芯片称为MAC。

可以看到PHY的数据是RJ45网络接口(网线口)穿过了的差分信号,而PHY作用就是将差分信号转为数字信号,这块内容不用深究,制造商都设计好了。

那我们干什么呢?(主要是对phy芯片进行模式选择,比如工作速率,工作模式)

为什么要熟悉RJ45网口

上面说到针对phy芯片我们只要进行模式选择(下文会介绍使用mdio接口,通过寄存器控制)

那模式选择后,如何查看是否有效呢?最简单直接的就是通过RJ45网口的指示灯查看

RJ45 座子上一般有两个灯,一个黄色(橙色),一个绿色,绿色亮的话表示网络连接正常,黄色闪烁的话说明当前正在进行网络通信黄灯闪动频率快表示网速好,这两个灯由 PHY 芯片控制。

如果不懂物理层和数据链路层可以看一下网络七层协议。

网络七层协议

两个模块进行通信

下图是两个主控直接的通信,比如我们的电脑 和 路由器 ,但是如果没有中间的介质还能连接网络吗?答案是可以的

如果phy芯片没有,那么可以直接通过两个mac连接进行通信,之所以需要mac 、phy、变压器的目的是为了转换数据类型适配所以的网线,但是在一些电路上,没必要加这么多东西

比如搭载 Linux系统的arm芯片想要网络,可以直接通过mac和网卡芯片连接获取,这时候就需要通过RGMII接口或者MII接口 和 MDIO 连接网卡芯片。

(网卡芯片内置也是mac+phy,有的只有mac 层这个要看具体的手册)

什么是MDIO协议

mido协议即SMI协议

SMI协议也是一种通信协议类似与I2C协议但是通信方式不一样

SMI包含两根信号线,一个MDC时钟线,一个MDIO双向传输的数据线,

如图为SMI应用框图。STA设备通过MDIO接口与PHY通信。STA(StaTIon Management)为主控设备,比如MCU、MAC、ONU等。PHY为从设备。一个STA最多管理32个PHY。MDC信号由STA控制,MDIO信号根据通信方式的不同可以由STA或者PHY接管控制。如图通常MDIO会接一个电阻上拉至接口电源。

MDIO的作用 

从上面的连接图可以看到MDIO是用来连接主设备和多个PHY设备,并且通过MDIO来传输数据

那么传输的是数据是哪些呢?主要是传输链接状态、传输速度与选择、断电、低功率休眠状态、TX/RX模式选择、自动协商控制、环回模式控制等。

MDIO没那么重要

MDIO在上面说到的两个模块通信,我提到了 arm芯片和网卡芯片直接需要,那么这个真的有必要吗?其实没必要连接!!!

换个话说 不连接也可以使得网络畅通,因为网络的数据传输时靠RGMII不是靠MDIO,MDIO的作用仅仅只是用来查看一些状态和功能,还有简单的控制,而这些简单的控制是完全可以有网卡芯片内置去写死,arm层只要和网卡的写的一直就可以通讯。

但是为什么很多时候需要通过mdio来进行读写控制,这个只是在网络通讯正常后的升级优化,用来方便查看状态,就像写了个前端网页来看后台数据。

如果mido没有读通,或者读取的数据是0xfffff,那么不一定是mdio的问题,很多时候是网卡本身没有启动!

MDIO读写时序

Preamble:32bits的前导码

Start2bit的开始位。

OP Code:2bits的操作码,10表示读,01表示写。

PHYAD:5bits的PHY地址。

REGAD:5bits的寄存器地址,即要读或写的寄存器。

Turn Around:2bits的TA,在读命令中,MDIO在此时由MAC驱动改为PHY驱动,并等待一个时钟周期准备发送数据。在写命令中,不需要MDIO方向发生变化,则只是等待两个时钟周期准备写入数据。

Data:16bits数据,在读命令中,PHY芯片将读到的对应PHYAD的REGAD寄存器的数据写到Data中,在写命令中,MAC将要写入对应PHYAD的REGAD寄存器的值写入Data中。

Idle:空闲状态,此时MDIO无源驱动,处高阻状态,但一般用上拉电阻使其处在高电平,上拉电阻一般为1.5K。

为什么说读取的phy最多32个

因为mdio中读取的phy只提供5bit的字节即最高11111 转成十进制就是31即0-31就是32个,但这是从读取的方式判断的,而mdio读取是依照phy芯片本身地址空间就5为

为什么说reg地址最多32个

同样mdio中读取的reg只提供5bit的字节即最高11111 转成十进制就是31即0-31就是32个

 PHY 芯片寄存器地址空间为 5 位,地址 0-31 共 32 个寄存器, IEEE 定义了 0-15 这 16 个寄存器的功能, 16~31 这 16 个寄存器由厂商自行实现。 也就是说不管你用的哪个厂家的 PHY 芯片,其中 0~15 这 16 个寄存器是一模一样的。 仅靠这 16 个寄存器是完全可以驱动起 PHY 芯片的,至少能保证基本的网络数据通信。

 看完后建议再看一下,会有更深入的理解

深度理解 RGMII (包含Linux和realtek)_daisy.skye的博客-CSDN博客

个人感谢:

这个也是我看了大量的参考文献和一步步的实践总结的经验,中间花了几百块问过知乎的博主和一些领域内的人,都没有讲解的很细致,最后还是通过实践,把每一层都走一遍,把变压器去掉,把phy去掉,linux系统的网卡函数看了一遍,phy芯片的手册有看了很多。

本篇文章也没有设置vip或者花钱观看,因为想帮助很多像我一样的有些刚入行的打工人(我是个女生,内向腼腆但是又较真,学的嵌入式,入了这行,不甘心做不出来,就自己花钱各种找资源,找人咨询,前期因为不懂的被人忽悠了钱,还是坚持继续深入探讨)

如果对你有帮助也可以进行适当的打赏,我会很开心 


http://chatgpt.dhexx.cn/article/7R1Abpyq.shtml

相关文章

【PHY】关于学习以太网PHY的这件事情

概述: 由于近期要使用以太网PHY芯片,于是在网上查找各种资料,学习这部分的知识,这篇文章是对当前的学习做一个汇总。因为这部分的知识很多,所以只是做一个整体的概要总结,具体的知识点无法详细展开&#x…

NAL Unit解析

NAL Unit结构解析 NAL Unit包含NAL Header 和 NAL Body NAL Header: 一个字节,包括: forbidden_zero_bit: 0禁止位,1bit;nal_ref_idc:参考索引,代表当前NAL Unit重要性,2bit;nal_unit_type: N…

模组使用之常见认证,CCC认证,SRRC认证,ROHS认证,NAL认证

部分内容来自《http://onemo10086.com/#/knowledge》 CCC认证 3C认证的全称为“中国强制性产品认证”,英文名称China Compulsory Certification,目的是国家为保护消费者人身安全和国家安全、加强产品质量管理、依照法律法规实施的一种产品合格评定制度。…

h264编码笔记(nal_ref_idc)

一、nal_ref_idc定义 X264关于nal_ref_idc的枚举定义: nal_ref_idc不等于0时,规定NAL单元的内容包含一个序列参数集,或一个图像参数集,或一个参考图像条带,或一个参考图像的条带数据分割。 如果一个包含一个条带或条带…

H264裸码流 I/P/B帧对应NAL类型

1.NAL类型检测 nal类型检测非常容易,对照下表即可容易判断类型。 较常用nal类型包括:SPS(7)、PPS(8)、IDR(5)、SLICE(1)。 而nal_type嵌在码流数据的nal_header(size1Byte)中,占据据该字节的后五位bits。 nal_header…

H.264/H265的NAL解析

1、H.264的NAL解析 在有序字节流格式的H.264码流中,我们可以根据前缀起始码0x 00 00 01或0x 00 00 01获取到一个完整的NAL Unit所包含的的字节数据。H.264码流中的每一个NAL Unit的作用并不是相同的,而是根据不同的类型起不同的作用。因此将H.264的码流解…

查看264NAL信息工具

用easyice只可以查看TS包的帧类型。 google了一下,发现了这个工具HEVCBSAnalyzer https://github.com/latelee/HEVCBSAnalyzer 从git上下载下来,直接使用release文件夹下的工具,查看MP4 NAL信息,正常。

JDK1.9-final关键字

1.1 概述 学习了继承后,我们知道,子类可以在父类的基础上改写父类内容,比如,方法重写。那么我们能不能随意的继承API中提供的类,改写其内容呢?显然这是不合适的。为了避免这种随意改写的情况,J…

H264 NAL 单元解析

1、NAL全称Network Abstract Layer, 即网络抽象层。 在H.264/AVC视频编码标准中,整个系统框架被分为了两个层面:视频编码层面(VCL)和网络抽象层面(NAL)。其中,前者负责有效表示视频数据…

NAL分析

1.NAL头 2.NAL类型 5 IDR图像的片 7 序列参数集 ----- 8 图像参数集 NAL类型介绍 单一NALU的RTP包类型 组合的NALU的RTP包 分片NALU的RTP包 (1) (2)FU Header ---通过FU Header将分片的数据组合

H264 NAL单元简介

目录 一、H264 NAL头部 二、H264参数集 2.1 H264 SPS 2.2 H264 PPS 三、H264 Slice 五、H264参考帧管理方法 Elecard StreamEye​​​​​​​工具​​​​​​​ 编码时,一帧图片分为若干slice,编码以slice为单位进行,即slice之间编码…

H264(NAL简介与I帧判断) 扩展H265

原帖地址 1、NAL全称Network Abstract Layer, 即网络抽象层。 在H.264/AVC视频编码标准中,整个系统框架被分为了两个层面:视频编码层面(VCL)和网络抽象层面(NAL)。其中,前者负责有效表…

H.264——NAL Unit结构分析

目录 NAL Unit格式NAL Headernal_unit_type NAL BodyExtended Byte String Payload RBSP和SODB**问:RBSP是不是等同于原始语法元素值本身?**SODB:String Of Data Bits 结构关系 NAL Unit格式 这一部分在h.264标准文档的7.3节。 解释部分在h264标准文档的…

h264码流及h265码流结构分析,NAL头类型分析

视频编码标准规定了编码后码流的语法语义,也就阐明了从比特流提取语法元素并进行解释的方法,也就是视频的解码过程。 1.h264码流结构解析: H.264/AVC(Advanced Video Coding) 的功能分为两层:视频编码…

H264/AVC NAL单元和解码

在264中,NAL是以NALU(NAL unit)为单元来支持编码数据在基于包交换技术网络中的传输的;它定义了符合传输层或存储介质需求的数据格式,同时提供头信息,从而提供了视频编码与外部世界的接口。网络层和传输层的…

获取NAL_UNIT的RBSP数据

从NAL UNIT中对rbsp获取的原理如图所示&#xff0c;此为NAL UNIT解析的架构图 头文件 #ifndef __NAL_UNIT_H__ #define __NAL_UNIT_H__#include <stdio.h>typedef struct Nal_Unit_Fops {int (*find_nal_unit_data)(FILE *file);int (*find_nal_unit_head)(char (*Q…

H.264——解析NAL Unit数据

目录 原理分析代码实现.c.h 效果 原理 视频编解码——NAL Unit结构分析 分析 1、首先去掉起始码得到NALU实际数据2、分离出NALU中一个字节的header 1bit禁止位、2bitNRI、5bitTYPE 3、解析剩余NALU的body部分 EBSP去除03->RBSP 代码实现 .c #include "LUX_TEST_…

H265/HEVC编码NAL的单元的介绍

一、引言 与H.264/AVC 类似&#xff0c;H265/HEVC也采用视频编码层&#xff08;Video Coding Layer&#xff0c;VCL&#xff09;和网络适配层&#xff08;Network Abstract Layer, NAL&#xff09;的双层结构&#xff0c;以适应不同网络环境和视频应用。网络适配层的主要任务是…

六、NAL Unit解析

参考标准文档&#xff1a;7.3和7.4节 一、NAL Unit结构 NAL Unit: NAL Unit NAL Header NAL Body NAL Header&#xff1a;一个字节&#xff0c;包括&#xff1a; forbidden_zero_bit&#xff1a;规定必须为0禁止位&#xff0c;1 bit;nal_ref_idc&#xff1a;第2和3位&#…

VCL和NAL

VCL和NAL 1.VCL只关心编码部分,重点在于编码算法以及特定硬件平台的实现,VCL输出的是编码后的纯视频流信息,没有任何冗余头信息。 NAL关心是是VCL的输出纯视频流如何被表达和封包以利于网络传输。 封包目的别人知道怎么传输和解码 (1)SODB:string of Data Bits (2)RBSP…