当前位置: 首页 > news >正文

【网络 MAC 学习专栏 -- 如何理解 PHY 的 Link Up】


请阅读【嵌入式开发学习必备专栏 Cache | MMU | AMBA BUS | CoreSight | Trace32 | CoreLink | ARM GCC | CSH】


文章目录

  • Overview
    • Clause 22/Clause 45
      • Clause 22
      • Clause 45
    • PHY Link 状态的软件实现

转自: 开心果 Need Car 2022年10月20日 09:50 上海

Overview

PHY 的主要作用是数/模信号转换,功能等同于其他总线的 Transceiver。所以,uC 如果想发送/接收以太网数据,就需要依赖 PHY(确切说是PHY芯片)。如果想让PHY按照预期的状态工作,uC就需要通过接口告诉PHY如何工作,这个接口是指 MAC(Media Access Control)/PHY 接口。

MAC/PHY的接口关系如下所示:
在这里插入图片描述
MAC 通过接口可以访问 PHY的内部寄存器,进而设置 PHY 的工作模式,以此实现 PHY 的 Link UpMAC访问 PHY内部寄存器,主要通过MDC(Management Data Clock)和MDIO(Management Data Input Output)实现。

手册中描述:PHY内部寄存器的访问,通过 SMA(Station Management Agent)。而SMA中的操作信息来自MAC,所以,两种表达,本质是一个意思。

  • MDC 的最大配置时钟频率为 2.5MHz,用于驱动 MDIO。
  • MDIO 是双向控制线,操作MDIO时,需要基于(Clause 22或者Clause 45)。

Clause 22/Clause 45

Clause 22 或者 Clause 45是什么呢?
答: 一种访问PHY内部寄存器的报文协议。既然是协议,就会有格式要求,Clause 22或者Clause 45格式的各个位域如下所示:
在这里插入图片描述
使用 Clause 22 还是 Clause 45,需要配置 MAC_MDIO_ADDRESS 寄存器的C45E位域,默认情况下,使用 Clause 22,如下所示:
在这里插入图片描述

Clause 22

Clause 22 格式 的位域描述如下所示:
在这里插入图片描述
解释:

  • IDLE:空闲状态,此时MDIO没有时钟驱动;
  • PREAMBLE:前导码,由32个连续的"1"构成;
  • START:起始位域,2 Bit = 01B
  • OPCODE:操作码,2 Bit
    • 10B表述读取PHY寄存器操作,
    • 01B表示写PHY寄存器操作;
  • PHY ADDR:要访问的PHY地址,MAC 最多可以访问 32个PHY,编号0~31
  • REG ADDR:PHY 寄存器地址,最多可以访问 32个PHY寄存器,这里表示要访问哪个PHY寄存器;
  • TA:Turn Around,反转位(2 Bit):
    • 当 SMA读PHY寄存器时,在TA第一个Bit之前,由MAC(SMA)控制MDIO,请求目标PHY寄存器的信息;
    • 在TA第一个Bit之后,由PHY控制MDIO,输出对应PHY寄存器中的信息。这也是MDIO双向的原因,操作时序如下所示:
      在这里插入图片描述
  • DATA:PHY寄存器中的数据信息。
    当 MAC 写 PHY 寄存器时,MDIO 完全由 MAC 控制,操作时序如下所示:
    在这里插入图片描述

Clause 45

Clause45与Clause22的格式一样,只是个别位域信息有所不同,如下所示:
在这里插入图片描述
因此,基于Clause 22或者Clause 45协议,完成对PHY内部寄存器的配置,比如:通信速率(100Mbps/1000Mbps)配置、是否全双工、自协商使能与否(auto-negotiation)、指示灯等。PHY配置完成,且配置成功,意味着:Link Up

PHY Link 状态的软件实现

在软件层面,程序初始化或者Reset以后,需要重新初始化PHY,通过读取PHY寄存器的Link位域确定PHY的Link状态。
eg:RTL8211F(I) BMSR (Basic Mode Status Register, Address 0x01)寄存器,Bit2(Link Status)指示 PHY的Link状态。代码实现示意所示:


boolean PHY_link_Status(void)
{boolean linkEstablished = FALSE;uint32 value;do{IfxGeth_phy_Clause22_readMDIORegister(0, PH_BMSR, &value);linkEstablished = ((value & (1 << 2)) != 0) ? TRUE : FALSE;} while (!linkEstablished);return linkEstablished;
}

推荐阅读:
https://mp.weixin.qq.com/s/zGwm9DkUHuuuDBwK7hO6vg
https://mp.weixin.qq.com/s/qP6FJvPl5HOkdQWYCstCxw
https://mp.weixin.qq.com/s/HpomnJom2knRo7YACkslBg
https://mp.weixin.qq.com/s/k2cKPkC39jX7YUc7d6U1sw
https://mp.weixin.qq.com/s/dJtMBI9VgefimRZ0_l8GBA

http://www.lryc.cn/news/523406.html

相关文章:

  • Linux虚拟机安装与FinalShell使用:探索Linux世界的便捷之旅
  • Mixly米思齐1.0 2.0 3.0 软件windows版本MAC苹果电脑系统安装使用常见问题与解决
  • vben5 admin ant design vue如何使用时间范围组件RangePicker
  • Kafka 日志存储 — 文件目录及日志格式
  • 故障诊断 | BWO白鲸算法优化KELM故障诊断(Matlab)
  • 一文读懂AI Agent 智能体
  • 《 C++ 点滴漫谈: 二十二 》操作符炼金术:用C++ operator重塑代码美学
  • 通信协议之多摩川编码器协议
  • 新星杯-ESP32智能硬件开发--ESP32的I/O组成-系统中断矩阵
  • 4329 树的连边II
  • Spring的Bean详解=Bean别名+作用范围+使用场景
  • 聊一聊如何适应AI时代
  • dl学习笔记:(4)简单神经网络
  • 电商项目高级篇08-springCache
  • 4.1 AI 大模型应用最佳实践:如何提升 GPT 模型使用效率与质量
  • Linux top命令cpu使用率计算底层原理
  • vue知识点总结
  • [实现Rpc] 环境搭建 | JsonCpp | Mudou库 | callBack()
  • llamafactory使用8张昇腾910b算力卡lora微调训练qwen2-72b大模型
  • C++,设计模式,【目录篇】
  • 《目标检测数据集下载地址》
  • C 语言的void*到底是什么?
  • Linux中的文件上传和下载
  • DDD - 微服务落地的技术实践
  • fgets、scanf存字符串应用
  • 鸿蒙动态路由实现方案
  • Spring-boot3.4最新版整合swagger和Mybatis-plus
  • 基于Java的高校实习管理平台
  • 全国青少年信息学奥林匹克竞赛(信奥赛)备考实战之一维数组(应用技巧)
  • 【2024年华为OD机试】 (B卷,100分)- 路灯照明问题(Java JS PythonC/C++)