gmac调试指南

2024-04-30 08:32
文章标签 调试 指南 gmac

本文主要是介绍gmac调试指南,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言

笔者使用GMAC的主要场景为SOC
内部内置了GMAC,并通过MDIO+RGMII接口和外部PHY芯片通信,通过MDIO配置PHY的寄存器,通过RGMII和PHY收发数据。故对MII、RMII、GMII不熟悉,不进行过多描述。该文主要是结合网上已有的博文资料和笔者自身的调试经验进行的总结归纳。

该文主要分为三部分,第一部分是介绍MDIO接口及其数据格式和时序规范。该部分内容涵盖大部分日常调试中需要了解的知识,在调试过程中可查阅该部分分析MDIO硬件时序上是否不妥之处。第二部分是介绍RGMII接口及时序规范。第三部分为个人经验总结。

文档链接:
https://download.csdn.net/download/ty1121466568/85932043

MDIO接口

1.1 MDIO接口概述

MDIO(Management Data Input/Output)-管理数据输入输出接口,
也叫串行管理接口-SMI(Serial Management
Interface)、介质无关接口管理接口-MIIM(Media Independent Interface Management
interface), 定义在IEEE802.3以太网标准规范第22章节, 实现网口MAC(Media Access
Control)对网口PHY(Ehternet Physical Layer)芯片的管理与控制,
比如网口速率设置、网口双工模式设置、自协商使能控制等等。简而言之,MDIO用于MAC对PHY寄存器的读写操作。

1.2 MDIO应用框图

图1 MDIO应用框图
图1 MDIO应用框图

图1为MDIO应用框图。STA设备通过MDIO接口与PHY通信。

STA:
STA(StationManagement)为主控设备,比如MCU、MAC、ONU等。PHY为从设备。一个STA最多管理32个PHY。

MDC:
MDIO时钟线。MDC要求由MAC输出,是非周期性的,即不要求提供固定频率的时钟,对于PHY芯片则作为输入,以在上升沿触发MDIO的读写。IEEE标准802.3规定MDC最小的时钟周期为400ns,即最高频率为2.5MHz,实际上,MDC的频率可以超过规定的最高频率2.5MHz,比如Marvell的88E1512最大支持12MHz的MDC。MDC的时钟频率可以是DC-2.5MHz,一般建议1.0MHz-2.5MHz。

MDIO:
MDIO数据线。通常MDIO会通过电阻上拉至接口电源。MDIO是双向的,只支持一个MAC连接最多32个PHY的连接方式,且MAC作为master,PHY作为slave。在写PHY寄存器的时候,由MAC驱动MDIO向PHY写入数据;在读PHY寄存器时,前半段由MAC驱动发送寄存器地址,后半段由PHY驱动回复寄存器的值。

注意,在一个STA对应多个PHY时,不同PHY通过PHY的地址来区分。

1.3 MDIO数据格式

MDIO有两种模式:俗称1G MDIO和XG MDIO。1G MDIO由IEEE 802.3
Clause22定义,主要应用于千兆/百兆的以太PHY,XG MDIO由IEEE 802.3
Clause45定义,主要用于千兆以上的以太PHY。下面以Clause22为例。

MDIO数据格式定义在IEEE 802.3以太网标准中,如下图所示(数据传输顺序为从左至右):
图2 MDIO数据格式
图2 MDIO数据格式

上图中*表示高阻态,这时MDIO的状态由一个外部的1.5KΩ电阻决定。

Preamble+Start:32bits的前导码以及2bit的开始位。

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

PHYAD:5bits的PHY地址,一般PHY地址从0开始顺序编号,例如6口switch中PHY地址为0-5。

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

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

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

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

典型的MDC/MDIO读操作:

请添加图片描述

图3 MDC/MDIO读操作

典型的MDC/MDIO写操作:

请添加图片描述

图4 MDC/MDIO写操作

1.4 MDIO 电气时序图

如果是STA(MAC层设备)驱动MDIO,则MDIO相对于MDC上升沿,至少要有10ns的建立时间(Setup
Time)和10ns的保持时间(Hold Time)。如下图所示:

请添加图片描述

图5 MAC驱动MDIO

如果MDIO是由MMD(PHY层设备)驱动的,则MDIO相对于MDC的Tco(Clock to Output
Delay)的范围是0ns~300ns。如下图所示:

请添加图片描述

图6 PHY驱动MDIO

RGMII

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

信号定义如下:

请添加图片描述

图7 RGMII 信号表

请添加图片描述

图8 RGMII 信号连接图

1000M模式下,TXC/RXC时钟为125Mhz,为了达到1000Mbit的传输速率,TXD/RXD信号线在时钟上升沿发送接收TXD[3:0]/RXD[3:0],在时钟下降沿发送接收TXD[7:4]/RXD[7:4]。10M/100M模式下,在时钟上升沿发送和接收数据。

RGMII时序图

请添加图片描述

图9 RGMII AC Characteristics

请添加图片描述

图10 RGMII Multiplexing and Timing

2.3 添加时钟延时

从上边的时序图分析,数据在时钟的边沿变化。因此如果不做额外处理,接收端无法稳定采样。为了解决这一问题,常见的做法是为时钟信号添加延时,使其边沿对准数据总线的稳定区间,接收端满足TSKEWR的电气要求。可以在控制器端、PCB走线以及PHY芯片内部添加时钟偏移。一般情况下MAC控制器端或PHY芯片内部添加时钟延时。

时钟延时结构图如下:

请添加图片描述

图11 时钟延时结构图

MAC控制器端添加时延:一般该情况下都是SOC内部对MAC发送/接收的时钟信号添加偏移,具体是多少视SOC和其配置而定。

PCB走线添加时延:在过去由于MAC端和PHY端技术所限,添加时延会提高成本,故用PCB走线来控制时延,目前基本上已不再采用改方式。

PHY芯片内部添加时延:目前的PHY基本上都是支持该功能,对TXC/RXC在PHY芯片内部添加时延。

调试指南

确保GMAC正确工作

笔者使用GMAC的主要场景为SOC 内部内置了GMAC,目前主要用Synopsys的DesignWare Cores
Ethernet MAC Universal和DesignWare Cores Ethernet Quality-of-Service这两款。

  1. 使用GMAC前,需要把GMAC模块的相关时钟使能。

  2. 通过GPIO 对PHY进行复位,检查PHY 是否有RX_CLK输出到MAC。笔者使用的这两个GMAC
    IP软件复位需要PHY的RX_CLK输入,否则将1.配置GMAC寄存器进行软件将失败,无法复位;2.若GMAC和PHY已配置双工模式和传输速率,若RX_CLK频率不对,将导致GMAC无法产生收发包中断和无法收发包。

  3. 配置GMAC寄存器。配置GMAC其他寄存器前最好配置软件复位的寄存器,让GMAC复位,再配置其他。此处应注意,一般GMAC都有报文过滤的功能,笔者使用的GMAC默认情况下收到的报文目标MAC地址和配置的该GMAC
    MAC地址一致,或者配置GMAC的报文过滤为通过所有报文,报文才能通过。软件复位依赖上述的RX_CLK。

  4. GMAC收发缓冲区、收发描述符地址要和DMA cache line对齐,GMAC
    收发包依赖DMA,若不对齐,则有可能无法收发包或收发包异常(包括但不限于无法触发收发包中断,收发描述符OWN位状态无变化,收发包数据错误等现象偶现/必现)。

  5. GMAC收发包前,需根据情况做invalidate cache, flush
    cache的操作,若省略这一步,可能有cache一致性问题,导致无法收发包或收发包异常(包括但不限于无法触发收发包中断,收发描述符OWN位状态无变化,收发包数据错误等现象偶现/必现)。

  6. GMAC确保正确工作之后,可手动简单构建一个无意义的包,比如数据为多个0xFF,0X55,0XAA序列的包。然后设置GMAC速率为10M,用逻辑分析仪抓取波形,对比RGMII时序图检查GMAC简单发包时序是否正确。

MDIO调试

MDIO主要用来读写PHY寄存器,达到管理,配置PHY的作用。一般情况下若MDIO读写异常,则建议检查其硬件时序是否正确。

  1. 笔者所用的两个GMAC
    IP文档中建议将MDC时钟通过分频配置为1.0MHz-2.5MHz。其MDC时钟通过对CSR时钟分频得到(仅限于上述IP)。

  2. 使用MDIO读取PHY的ID寄存器,对比结果和PHY的数据手册是否一致。

  3. 使用MDIO读-写-读PHY的控制寄存器,看PHY的寄存器的值是否改变。

  4. 若上述读写操作失败,可使用逻辑分析仪获取MDIO接口的波形,对比MDIO接口时序排查哪一步出现问题。具体对比过程和问题不再详细描述。

PHY(RGMII)时序调整

在确保GMAC本身编码正确,MDIO读写正确的情况下,可对PHY时序的收发时钟延时进行调整。速率越高,MAC和PHY对时钟、时序要求越高,此处建议从简单入手,从10M、100M、1000M的TX/RX依次向上调试。此处需注意MAC和PHY的双工模式(全双工和半双工),速率应保持一致,否则将会收发包错误。此外,调整TXC/RXC时钟延时的最终目的都是为了让接受端时钟边沿对准数据总线的稳定区间,能够准确采样读取数据。即满足TSKEWR的电气要求。实际应用中,有可能SOC内部布线、PCB布线、PHY芯片的内部具体电路和理想情况下有差异,导致不需要配置额外的时钟延时就能正确收发报文的情况存在。故调试过程中主要思想是以接收端满足TSKEWR的电气要求为准,具体时钟延时调试根据具体情况灵活配置。需注意,大多数PHY默认配置都是加了延时的,若自己调试延时最好自己手动关闭再调试。

  1. 调试GMAC的TX,可手动构建一个ARP报文。发送该ARP报文,在Wireshark上抓包看是否能捕获到。Wireshark上可设置过滤器为”arp
    and
    eth.addr==66:34:b0:23:ce:ad”来只看ARP报文,减少干扰项,其中eth.addr后跟自己组的ARP报文的源MAC地址。或直接用其他设备连接该PHY,看是否收到报文。

  2. 若其他设备或PC主机收不到GMAC发出的ARP报文,可进行如下顺序调试,直到发包正常:

    1. 关闭SOC侧TXC时钟延时,关闭PHY侧的TXC时钟延时;

    2. 关闭SOC侧TXC时钟延时,打开PHY侧的TXC时钟延时,若PHY侧时钟延时可配置,则从小到大依次配置;

    3. 打开SOC侧TXC时钟延时,关闭PHY侧的TXC时钟延时,若SOC侧时钟延时可配置,则从小到大依次配置;若SOC和PHY的时钟延时可配置范围接近,该步骤效果和步骤b一致,该步骤可省略;

    4. 打开SOC侧TXC时钟延时,打开PHY侧的TXC时钟延时,若SOC侧和PHY侧时钟延时均可配置,则将PHY侧延时配置到最大,将SOC侧延时从小到大依次配置。直到两个时钟都到最大延时。

    5. 若SOC,PHY加正向延时无效果,则可以考虑是否是整个链路中延时太大,需要加负的延时,若PHY或SOC支持该操作,则可配置为TXC负延时进行调试。部分PHY支持该功能。

    6. 若上述步骤均失败,可尝试使用示波器抓取PHY侧的TX相关信号,看波形的延时是否ok。

  3. 调试GMAC的RX,在PC上组建一个ARP应答包(笔者使用ostinato-0.8来进行组包发包),或直接用其他设备连接该PHY,一直发送固定报文,看GMAC是否收到该报文。具体时钟调试策略和调试TX一致。

其他

  1. 调试过程中强制指定PHY的速率和双工模式

    为了减少干扰,笔者调试过程中一般都是强制指定PHY工作的速率和双工模式,一般可通过配置PHY的advertise寄存器,将其他模式全部失能,连接其他设备自协商时就只会自协商成指定模式。笔者试过强制指定速率和双工模式,然后关闭自协商,但是部分phy一旦关闭自协商,速率总是为默认值,无法修改,笔者学艺不精,选择自协商成指定模式。

  2. PHY的时钟延时配置

    不同PHY时钟延时配置不尽相同,有的时钟延时只能开和关,延时时间是固定的2ns,有的可灵活配置为N*150ps,有的能配置为负延时(-1*150ps),有的既有固定时间配置项又有灵活时间配置项,故具体调试过程中需自己阅读PHY的寄存器。
    ,将其他模式全部失能,连接其他设备自协商时就只会自协商成指定模式。笔者试过强制指定速率和双工模式,然后关闭自协商,但是部分phy一旦关闭自协商,速率总是为默认值,无法修改,笔者学艺不精,选择自协商成指定模式。

  3. PHY的时钟延时配置

    不同PHY时钟延时配置不尽相同,有的时钟延时只能开和关,延时时间是固定的2ns,有的可灵活配置为N*150ps,有的能配置为负延时(-1*150ps),有的既有固定时间配置项又有灵活时间配置项,故具体调试过程中需自己阅读PHY的寄存器。

这篇关于gmac调试指南的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/948378

相关文章

从入门到进阶讲解Python自动化Playwright实战指南

《从入门到进阶讲解Python自动化Playwright实战指南》Playwright是针对Python语言的纯自动化工具,它可以通过单个API自动执行Chromium,Firefox和WebKit... 目录Playwright 简介核心优势安装步骤观点与案例结合Playwright 核心功能从零开始学习

Java堆转储文件之1.6G大文件处理完整指南

《Java堆转储文件之1.6G大文件处理完整指南》堆转储文件是优化、分析内存消耗的重要工具,:本文主要介绍Java堆转储文件之1.6G大文件处理的相关资料,文中通过代码介绍的非常详细,需要的朋友可... 目录前言文件为什么这么大?如何处理这个文件?分析文件内容(推荐)删除文件(如果不需要)查看错误来源如何避

Java docx4j高效处理Word文档的实战指南

《Javadocx4j高效处理Word文档的实战指南》对于需要在Java应用程序中生成、修改或处理Word文档的开发者来说,docx4j是一个强大而专业的选择,下面我们就来看看docx4j的具体使用... 目录引言一、环境准备与基础配置1.1 Maven依赖配置1.2 初始化测试类二、增强版文档操作示例2.

PostgreSQL中rank()窗口函数实用指南与示例

《PostgreSQL中rank()窗口函数实用指南与示例》在数据分析和数据库管理中,经常需要对数据进行排名操作,PostgreSQL提供了强大的窗口函数rank(),可以方便地对结果集中的行进行排名... 目录一、rank()函数简介二、基础示例:部门内员工薪资排名示例数据排名查询三、高级应用示例1. 每

SpringBoot结合Docker进行容器化处理指南

《SpringBoot结合Docker进行容器化处理指南》在当今快速发展的软件工程领域,SpringBoot和Docker已经成为现代Java开发者的必备工具,本文将深入讲解如何将一个SpringBo... 目录前言一、为什么选择 Spring Bootjavascript + docker1. 快速部署与

创建Java keystore文件的完整指南及详细步骤

《创建Javakeystore文件的完整指南及详细步骤》本文详解Java中keystore的创建与配置,涵盖私钥管理、自签名与CA证书生成、SSL/TLS应用,强调安全存储及验证机制,确保通信加密和... 目录1. 秘密键(私钥)的理解与管理私钥的定义与重要性私钥的管理策略私钥的生成与存储2. 证书的创建与

Python包管理工具pip的升级指南

《Python包管理工具pip的升级指南》本文全面探讨Python包管理工具pip的升级策略,从基础升级方法到高级技巧,涵盖不同操作系统环境下的最佳实践,我们将深入分析pip的工作原理,介绍多种升级方... 目录1. 背景介绍1.1 目的和范围1.2 预期读者1.3 文档结构概述1.4 术语表1.4.1 核

PowerShell中15个提升运维效率关键命令实战指南

《PowerShell中15个提升运维效率关键命令实战指南》作为网络安全专业人员的必备技能,PowerShell在系统管理、日志分析、威胁检测和自动化响应方面展现出强大能力,下面我们就来看看15个提升... 目录一、PowerShell在网络安全中的战略价值二、网络安全关键场景命令实战1. 系统安全基线核查

Java操作Word文档的全面指南

《Java操作Word文档的全面指南》在Java开发中,操作Word文档是常见的业务需求,广泛应用于合同生成、报表输出、通知发布、法律文书生成、病历模板填写等场景,本文将全面介绍Java操作Word文... 目录简介段落页头与页脚页码表格图片批注文本框目录图表简介Word编程最重要的类是org.apach

Python设置Cookie永不超时的详细指南

《Python设置Cookie永不超时的详细指南》Cookie是一种存储在用户浏览器中的小型数据片段,用于记录用户的登录状态、偏好设置等信息,下面小编就来和大家详细讲讲Python如何设置Cookie... 目录一、Cookie的作用与重要性二、Cookie过期的原因三、实现Cookie永不超时的方法(一)