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

相关文章

电脑密码怎么设置? 一文读懂电脑密码的详细指南

《电脑密码怎么设置?一文读懂电脑密码的详细指南》为了保护个人隐私和数据安全,设置电脑密码显得尤为重要,那么,如何在电脑上设置密码呢?详细请看下文介绍... 设置电脑密码是保护个人隐私、数据安全以及系统安全的重要措施,下面以Windows 11系统为例,跟大家分享一下设置电脑密码的具体办php法。Windo

Python使用qrcode库实现生成二维码的操作指南

《Python使用qrcode库实现生成二维码的操作指南》二维码是一种广泛使用的二维条码,因其高效的数据存储能力和易于扫描的特点,广泛应用于支付、身份验证、营销推广等领域,Pythonqrcode库是... 目录一、安装 python qrcode 库二、基本使用方法1. 生成简单二维码2. 生成带 Log

高效管理你的Linux系统: Debian操作系统常用命令指南

《高效管理你的Linux系统:Debian操作系统常用命令指南》在Debian操作系统中,了解和掌握常用命令对于提高工作效率和系统管理至关重要,本文将详细介绍Debian的常用命令,帮助读者更好地使... Debian是一个流行的linux发行版,它以其稳定性、强大的软件包管理和丰富的社区资源而闻名。在使用

C++中实现调试日志输出

《C++中实现调试日志输出》在C++编程中,调试日志对于定位问题和优化代码至关重要,本文将介绍几种常用的调试日志输出方法,并教你如何在日志中添加时间戳,希望对大家有所帮助... 目录1. 使用 #ifdef _DEBUG 宏2. 加入时间戳:精确到毫秒3.Windows 和 MFC 中的调试日志方法MFC

macOS怎么轻松更换App图标? Mac电脑图标更换指南

《macOS怎么轻松更换App图标?Mac电脑图标更换指南》想要给你的Mac电脑按照自己的喜好来更换App图标?其实非常简单,只需要两步就能搞定,下面我来详细讲解一下... 虽然 MACOS 的个性化定制选项已经「缩水」,不如早期版本那么丰富,www.chinasem.cn但我们仍然可以按照自己的喜好来更换

Python使用Pandas库将Excel数据叠加生成新DataFrame的操作指南

《Python使用Pandas库将Excel数据叠加生成新DataFrame的操作指南》在日常数据处理工作中,我们经常需要将不同Excel文档中的数据整合到一个新的DataFrame中,以便进行进一步... 目录一、准备工作二、读取Excel文件三、数据叠加四、处理重复数据(可选)五、保存新DataFram

使用JavaScript将PDF页面中的标注扁平化的操作指南

《使用JavaScript将PDF页面中的标注扁平化的操作指南》扁平化(flatten)操作可以将标注作为矢量图形包含在PDF页面的内容中,使其不可编辑,DynamsoftDocumentViewer... 目录使用Dynamsoft Document Viewer打开一个PDF文件并启用标注添加功能扁平化

电脑显示hdmi无信号怎么办? 电脑显示器无信号的终极解决指南

《电脑显示hdmi无信号怎么办?电脑显示器无信号的终极解决指南》HDMI无信号的问题却让人头疼不已,遇到这种情况该怎么办?针对这种情况,我们可以采取一系列步骤来逐一排查并解决问题,以下是详细的方法... 无论你是试图为笔记本电脑设置多个显示器还是使用外部显示器,都可能会弹出“无HDMI信号”错误。此消息可能

如何安装 Ubuntu 24.04 LTS 桌面版或服务器? Ubuntu安装指南

《如何安装Ubuntu24.04LTS桌面版或服务器?Ubuntu安装指南》对于我们程序员来说,有一个好用的操作系统、好的编程环境也是很重要,如何安装Ubuntu24.04LTS桌面... Ubuntu 24.04 LTS,代号 Noble NumBAT,于 2024 年 4 月 25 日正式发布,引入了众