
1. 项目概述与核心价值如果你正在基于德州仪器的TMS320DM646x这类高性能数字媒体处理器开发网络应用比如网络摄像机、视频服务器或者工业网关那么你肯定绕不开它的以太网控制器。这个硬件模块全称叫以太网媒体访问控制器我们通常简称为EMAC。它可不是一个简单的串口或者SPI而是专门为高速、可靠网络数据交换设计的复杂片上外设。简单来说CPU在这里特指ARM926EJ-S核心只需要告诉EMAC“把这块内存的数据发出去”或者“把收到的数据放到那块内存”剩下的打包、寻址、冲突检测、CRC校验等一大堆脏活累活EMAC全替你干了。这能把你从繁重的网络协议栈处理中解放出来让CPU专心处理视频编解码、业务逻辑这些核心任务。与EMAC形影不离的是它的“管家”——MDIO模块。你可以把PHY芯片想象成一个需要配置和监控的“外设”MDIO就是CPU和这个“外设”之间那条专用的、低速的配置总线。通过MDIOCPU可以读取PHY的连接状态是100M还是1000M全双工还是半双工设置工作模式甚至进行故障诊断。没有MDIO的正确配置EMAC就是无源之水根本无法与外部网络通信。官方几百页的用户指南User‘s Guide固然详尽但通篇的寄存器位域描述和时序图对于刚接触的工程师来说就像直接扔给你一本字典去学写小说。我当年调通第一个DM646x的网口驱动也是对着手册和示波器波形琢磨了好一阵子。本文将结合我多年的嵌入式网络开发经验为你拆解TMS320DM646x上EMAC/MDIO模块的核心架构思想、关键工作流程以及那些手册里可能一笔带过但实际调试中至关重要的寄存器细节和配置陷阱。无论你是正在编写底层驱动还是试图优化网络吞吐量和延迟理解这些硬件层面的机制都至关重要。2. EMAC/MDIO整体架构与设计哲学2.1 模块化设计三个核心部件的分工协作从系统角度看DM646x的EMAC/MDIO外围设备不是一个黑盒子而是由三个逻辑上独立又紧密协作的模块构成理解这个分工是高效编程的基础。EMAC控制模块这是整个外设的“大脑”和“调度中心”。它直接挂在处理器的配置总线和DMA总线上是CPU与EMAC/MDIO功能模块交互的唯一门户。它的核心职责包括寄存器映射所有EMAC模块和MDIO模块的控制寄存器、状态寄存器都通过这个模块映射到CPU的统一内存地址空间。你读写0x01C0_0000开始的地址实际上是在和这个控制模块打交道。中断聚合与管理EMAC的8个发送通道、8个接收通道、MDIO操作完成、链路状态变化……这么多可能触发中断的事件如果每个都直接连到ARM中断控制器会让驱动异常复杂。控制模块内置了强大的中断复用逻辑它将这些中断源分类、合并最终只产生有限的几条中断线如接收中断、发送中断、杂项中断上报给CPU极大地简化了中断服务程序的设计。描述符内存管理这是它的“王牌功能”。模块内部集成了2K x 32bit共8KB的专用RAM。这片内存不是用来放网络数据包的而是专门用来存放“描述符”的。描述符你可以理解为一个个“任务单”里面记录了真实数据包在系统内存中的地址、长度、状态等信息。EMAC硬件通过DMA直接读写这片专用RAM中的描述符效率远高于去访问可能被缓存干扰的系统内存。这8KB空间最多能缓存512个数据包的任务信息让EMAC可以在CPU不干预的情况下连续处理大量数据包。EMAC模块这是真正的“引擎”负责执行IEEE 802.3协议相关的所有硬件操作。它通过MII/GMII接口直接驱动外部的PHY芯片。其核心特性包括多通道支持8个独立的发送和接收通道。这不是指有8个物理网口而是为了支持服务质量。你可以将不同优先级或类型的网络流量如视频流、控制信令、普通数据分配到不同的通道硬件会为它们提供不同的缓冲区管理和调度策略。硬件加速CRC校验生成与验证、MAC地址过滤单播、多播、广播、VLAN标签识别、流量控制帧自动响应等全部由硬件完成。灵活的数据路径数据包缓冲区可以位于芯片内部的L2 SRAM也可以位于外部的DDR内存。描述符则可以放在EMAC控制模块的专用RAM或系统内存中这给了驱动开发者根据吞吐量和CPU负载进行权衡的自由。MDIO模块一个相对独立但不可或缺的部件。它实现了IEEE 802.3定义的串行管理接口通过两根线MDC时钟和MDIO数据以“问-答”的形式访问最多32个PHY芯片的内部寄存器。它的设计目标是“透明化”即CPU发起一个读写PHY寄存器的命令后MDIO模块会自动完成帧的组包、发送、等待回应、解包等一系列操作最后通过中断或状态位通知CPU完成CPU无需关心底层时序。2.2 时钟体系速度的基石时钟是数字系统的脉搏EMAC/MDIO的时钟设计体现了其多速率支持的灵活性MII模式10/100Mbps发送时钟和接收时钟完全由外部PHY提供通过MTCLK和MRCLK引脚输入。10Mbps时时钟为2.5MHz100Mbps时为25MHz。EMAC模块内部逻辑则使用芯片的PLL输出时钟例如148.5MHz进行同步。GMII模式1000Mbps千兆模式更为复杂。接收时钟MRCLK仍由PHY提供125MHz。但发送时钟在千兆全双工模式下由EMAC自身产生一个125MHz的源同步时钟GMTCLK输出给PHY同时还需要一个来自PHY的125MHz参考时钟RFTCLK用于内部锁相。这种设计保证了在高速率下数据传输的时序精度。MDIO时钟由模块内部通过对系统时钟分频产生频率可通过CONTROL寄存器的CLKDIV位编程设置。通常设为不超过2.5MHz以满足MDIO协议时序要求。实操心得时钟配置检查网络不通首先用示波器或逻辑分析仪抓一下MTCLK/MRCLK/GMTCLK和MDC引脚是否有时钟信号频率是否正确。很多初期问题都源于PHY的晶振未起振、时钟配置模式不正确如GMII模式配置成了MII或MDIO时钟分频比设置错误导致PHY无响应。3. 核心细节解析描述符机制与DMA工作流这是EMAC驱动效率的核心也是新手最容易困惑的地方。理解了描述符和DMA就理解了EMAC如何与CPU协同工作。3.1 描述符硬件与软件的契约描述符是一个数据结构是CPU告诉EMAC“数据在哪里要做什么”的指令单也是EMAC告诉CPU“事情办得怎么样了”的回执单。DM646x EMAC支持两种基本格式只缓冲区和缓冲区链。基本描述符格式每个描述符在内存中占据4个连续的字16字节。关键字段包括Next Descriptor Pointer指向下一个描述符的物理地址。这就构成了一个“描述符链表”。EMAC硬件会自动沿着这个链表依次处理数据包实现“链式DMA”。Buffer Pointer指向实际数据缓冲区存放以太网帧内容的物理地址。Buffer Offset数据在缓冲区内的起始偏移量。常用于协议栈处理让帧头如MAC头与缓冲区起始地址对齐。Buffer Length缓冲区的长度。Flags包含包的控制和状态信息如OWNER位最重要的一位。1表示描述符由EMAC硬件拥有CPU不能修改0表示由CPU拥有。驱动初始化描述符后将OWNER置1交给EMAC。EMAC处理完成后会将其清0。EOQ位队列结束标志。告诉EMAC这是当前链表的最后一个描述符。SOP/EOP位帧起始和帧结束。一个以太网帧可能跨越多个缓冲区在TCP/IP协议栈中常见SOP和EOP用于标记帧的边界。发送描述符除了基本字段还包含CRC位控制是否由硬件添加CRC、INT位该包发送完成后是否触发中断等。接收描述符包含Packet Length实际接收到的帧长、Protocol位粗略指示协议类型如IPv4以及各种错误状态位如CRC错误、溢出错误等。3.2 DMA工作流程发送与接收的舞蹈发送流程驱动准备CPU在内存中准备好要发送的以太网帧数据。构建描述符链表CPU初始化一个或多个发送描述符Buffer Pointer指向数据设置好SOP/EOP、CRC等标志并将OWNER位置1。将这些描述符链接成一个链表。提交任务CPU将链表头描述符的物理地址写入对应发送通道的TXnHDP寄存器。这个操作就像按下了“启动”按钮。硬件接管EMAC控制模块的DMA引擎读取TXnHDP找到描述符检查OWNER为1便开始工作。它通过DMA将描述符中Buffer Pointer指向的数据按照MII/GMII时序逐字节发送到PHY。状态回写与中断发送完成后EMAC硬件会更新描述符清除OWNER位更新状态位。如果描述符中INT位被设置或满足其他中断条件如发送队列空则会触发发送中断。驱动回收CPU在中断服务程序或轮询中检查描述符的OWNER位变为0便知道该缓冲区已发送完毕可以回收用于下一次发送。接收流程驱动预分配在初始化时CPU需要预先分配一批空的数据缓冲区并为之创建接收描述符链表OWNER位置1表示缓冲区空闲等待硬件填充。将链表头地址写入接收通道的RXnHDP寄存器。硬件监听与填充当PHY收到一个帧通过MII/GMII传给EMAC。EMAC硬件自动选择一个空闲的接收描述符OWNER为1通过DMA将帧数据写入Buffer Pointer指向的缓冲区。描述符更新硬件填充数据后更新描述符写入实际帧长度设置SOP/EOP记录错误状态最后将OWNER位清0。通知CPU硬件更新完成指针RXnCP并可能触发接收中断。驱动处理CPU检查RXnCP之前的描述符发现OWNER为0便读取Packet Length和状态将数据上交协议栈。处理完后驱动必须重新初始化这个描述符清空状态OWNER置1并将其重新链入接收队列的末尾否则接收队列会很快耗尽。避坑指南描述符内存一致性这是嵌入式DMA编程的经典难题。CPU和EMAC硬件都会访问描述符和数据缓冲区。你必须确保它们看到的内存视图是一致的。在带Cache的系统中致命错误是CPU初始化了描述符但数据还留在Cache里没写回内存EMAC的DMA就去读内存读到的是旧数据。解决方法通常是将描述符和数据缓冲区所在的内存区域设置为非缓存。或者在CPU更新完描述符或数据后手动执行Cache写回并无效化操作如使用CP15协处理器指令或CacheWBInv函数。DM646x的EMAC控制模块专用RAM是一个绝佳的解决方案因为它根本不在CPU的Cache体系内天然解决了一致性问题。对于追求极致吞吐量的场景应将描述符放在这片专用RAM中。4. 关键寄存器详解与配置实战寄存器是驱动与硬件对话的语言。手册列出了所有寄存器但驱动开发中常用的、需要深刻理解的只是其中一部分。下面我挑出最关键的几类结合配置流程进行解读。4.1 全局控制与初始化打下坚实基础系统上电或复位后EMAC/MDIO处于禁用状态。一个稳健的初始化序列如下步骤1软件复位在对任何模块进行配置前先进行软件复位是一个好习惯确保从一个已知的干净状态开始。SOFTRESET寄存器向该寄存器的SOFTRESET位写1触发整个EMAC模块的复位。需要等待一段时间查阅数据手册获取确切周期数通常几个时钟周期然后通过轮询该位或等待固定延时确认复位完成。CMSOFTRESET寄存器这是控制模块的软件复位。同样写1复位等待完成。步骤2时钟与基本模式配置MACCONTROL寄存器这是EMAC模块的“总开关”和模式选择器。GMIIEN1使能GMII模式用于千兆0为MII模式。FULLDUPLEX1为全双工0为半双工。注意千兆模式下必须为全双工。TXPAUSE/RXPAUSE流量控制使能。当网络拥堵时允许本机发送或响应暂停帧防止丢包。在交换机环境下建议开启。LOOPBACK回环模式用于自测试。置1时发送的数据会被直接环回给接收端不经过外部PHY。MACCONFIG寄存器配置一些核心参数。FULLDUPLEX位与MACCONTROL中的重复需配置一致。TXCRCEN建议使能让硬件自动添加帧尾的CRC校验码减轻CPU负担。JUMBO_EN是否支持巨帧。普通以太网帧最大1518字节巨帧可达9K甚至更大用于提高大数据传输效率但需要网络所有设备支持。步骤3MAC地址设置每个以太网设备必须有唯一的MAC地址。DM646x允许设置多个MAC地址用于高级过滤但基本地址通常设置到MACADDRLO和MACADDRHI寄存器。MACADDRLO存储MAC地址的低4字节。例如MAC地址00:1A:2B:3C:4D:5E3C:4D:5E部分存入此寄存器。MACADDRHI存储MAC地址的高2字节及控制位。00:1A:2B部分存入低24位同时必须将MACADDRHI的MAC_ADDR_VALID位置1否则地址过滤不生效。4.2 中断系统深度剖析化繁为简的艺术DM646x EMAC的中断系统设计得非常精巧旨在减少对CPU的频繁打扰。中断源分类接收中断由接收通道事件触发如收到一个帧、接收描述符队列空、接收FIFO超过阈值等。发送中断由发送通道事件触发如一个帧发送完成、发送描述符队列空等。杂项中断包括MDIO命令完成、链路状态改变、统计计数器溢出等。阈值中断一种特殊的中断用于在接收/发送FIFO达到一定填充度时提前通知CPU以便进行流控或批量处理。中断聚合与屏蔽 这是理解中断配置的关键。中断信号流经三层“关卡”第一层模块级使能。在EMAC模块内每个中断源都有对应的状态位*INTSTATRAW和掩码位*INTMASKSET/CLEAR。只有未被掩码的中断事件才会向上传递到EMAC控制模块。第二层控制模块分类使能。EMAC控制模块的CMRXINTEN、CMTXINTEN、CMMISCINTEN寄存器分别用于使能或禁用整类的接收、发送、杂项中断向CPU传递。第三层全局中断控制。CMINTCTRL寄存器可以全局使能或禁用所有EMAC/MDIO中断输出。推荐的驱动中断处理策略初始化时在CMINTCTRL中全局使能中断。根据需求在CMRXINTEN等寄存器中使能需要的整类中断。在EMAC模块的RXINTMASKSET等寄存器中精细地使能具体的中断源例如只使能“接收帧完成”和“发送完成”中断而屏蔽“队列空”等可能过于频繁的中断。中断服务程序中读取CMRXINTSTAT、CMTXINTSTAT、CMMISCINTSTAT确定是哪一类中断发生。根据类别再去读取EMAC模块具体的状态寄存器如RXINTSTATMASKED来定位是哪个通道、哪个具体事件。处理完成后必须向MACEOIVECTOR寄存器写入任意值以清除EMAC模块内部的中断脉冲否则会持续触发中断。调试技巧中断风暴与丢失中断风暴如果一进中断就出不来检查是否忘了写MACEOIVECTOR或者没有正确清除中断状态位。状态位是“粘性的”需要软件显式清除通常通过读取或向特定寄存器写值。中断丢失高流量下感觉丢中断检查是否使用了“每包一中断”模式。对于高速数据流这会给CPU带来巨大负担。可以考虑使用“完成指针”轮询替代部分中断或设置阈值中断进行批量处理。CMRXINTMAX和CMTXINTMAX寄存器可以限制每秒中断次数防止中断过于频繁。4.3 接收过滤与多通道流量管理的核心EMAC的接收过滤功能强大是实现网络协议栈卸载和QoS的基础。RXMBPENABLE寄存器这是接收多播/广播/混杂模式使能寄存器功能非常集中。混杂模式这是网络抓包工具如Wireshark的基础。使能后EMAC会接收所有经过网络的帧无论其目标MAC地址是什么。它有多个子模式RX_PASS_ALL接收所有帧包括错误帧。RX_PASS_CRC_ERROR只接收CRC错误的帧用于错误监控。等。生产代码中通常禁用混杂模式以提高性能和安全。广播使能后目标地址为FF:FF:FF:FF:FF:FF的帧会被接收。多播使能后目标地址为多播地址首字节最低位为1的帧会被接收。但以太网有海量多播地址全接收不现实。哈希过滤RXMBPENABLE可以控制是否启用哈希过滤。哈希过滤是一种高效的粗略多播过滤机制。硬件会对目标MAC地址计算一个哈希值驱动将允许接收的多播地址哈希值位图写入MACHASH1和MACHASH2寄存器。只有哈希值匹配的帧才会被接收。单播精确过滤除了广播和多播设备最主要的是接收发给自己的单播帧。这是通过RXUNICASTSET和RXUNICASTCLEAR寄存器管理的。DM646x支持多达16个精确的MAC地址过滤槽。你可以通过MACINDEX寄存器选择一个槽0-15然后在MACADDRLO/HI中设置地址并使其有效。最后通过RXUNICASTSET寄存器对应的位使能该过滤槽。发往该地址的帧就会被对应的接收通道接收。多通道路由这是DM646x EMAC的高级特性。8个接收通道可以配置不同的过滤规则。例如通道0设置为精确匹配设备主MAC地址用于接收普通数据。通道1使能广播和特定的多播哈希如用于某种组播视频流用于接收广播和组播数据。通道2使能混杂模式用于网络诊断。 通过RXMBPENABLE和RXUNICASTSET你可以为每个通道独立配置上述过滤规则。接收到的帧会根据目标地址被硬件自动路由到符合条件的优先级最高的通道。这允许驱动对不同优先级的流量进行分离处理。4.4 MDIO模块配置与PHY的握手MDIO配置相对独立但却是网络物理连接的前提。基本读写操作选择PHY向USERPHYSELn寄存器写入目标PHY的地址0-31。发起操作向USERACCESSn寄存器写入命令。其中包含GO位启动操作。WRITE位0为读1为写。REGADRPHY内部寄存器地址0-31。DATA要写入的数据写操作时。等待完成轮询USERACCESSn的GO位或等待MDIO用户命令完成中断通过USERINTRAW等寄存器管理。获取结果对于读操作完成后DATA字段即为读取的值。关键PHY寄存器配置 驱动通常需要读写以下PHY寄存器以常用MII兼容PHY为例BMCR (0x00)基本控制寄存器。配置重启、环回、速度100/10、双工模式、自动协商使能。BMSR (0x01)基本状态寄存器。读取链路状态、自动协商完成状态等。PHYID1/2 (0x02/0x03)用于识别PHY型号。ANAR/ANLPAR (0x04/0x05)自动协商通告和链路伙伴能力寄存器用于自动协商过程。GBCR/GSTATUS (千兆PHY)用于千兆能力通告和状态读取。自动协商流程向PHY的BMCR寄存器写入值使能自动协商并重启。轮询BMSR寄存器直到“自动协商完成”位置位。读取ANLPAR寄存器获取链路伙伴如交换机支持的能力。根据协商结果速度、双工同步配置EMAC的MACCONTROL寄存器GMIIEN,FULLDUPLEX等。这是很多驱动容易遗漏的一步PHY协商好了但EMAC还工作在错误的模式导致链路不通或性能低下。5. 常见问题排查与调试技巧实录即使理解了所有原理实际调试中依然会遇到各种问题。下面是我在多个项目中总结的典型问题及排查思路。5.1 链路不通无数据收发这是最常见的问题。请按照以下清单逐项排查电源与时钟确认PHY芯片供电正常。用示波器测量PHY晶振是否起振。测量MRCLK接收时钟是否有输入在MII模式下MTCLK发送时钟是否有输入时钟频率是否符合当前速率模式2.5/25/125 MHzMDIO通信测量MDC管理时钟是否有波形频率是否正确通常低于2.5MHz测量MDIO数据线在读写PHY寄存器时是否有数据变化可以尝试读取PHY的ID寄存器0x02, 0x03这是验证MDIO通信是否建立的最直接方法。如果读不到正确的ID检查MDIO引脚上下拉配置、PHY地址是否正确。PHY状态成功读取PHY寄存器后检查BMSR的“链路建立”位。如果为0检查网线是否连接对端设备如交换机是否开机并工作正常。检查自动协商是否完成BMSR相关位。如果未完成检查ANAR寄存器中本机通告的能力是否与PHY和网络环境匹配。EMAC基本配置确认已执行完整的软件复位和初始化流程。核对MACCONTROL寄存器GMIIEN位是否与PHY实际接口匹配FULLDUPLEX位是否与自动协商结果一致LOOPBACK位是否被误开启确认MAC地址已正确写入MACADDRLO/HI且MAC_ADDR_VALID位已置1。描述符与DMA发送数据时用调试器查看提交给TXnHDP的描述符地址是否有效描述符的OWNER位是否已置1Buffer Pointer指向的数据缓冲区内容是否正确例如包含完整的目标MAC、源MAC、类型/长度字段接收数据时是否预先为接收通道建立了有效的描述符链表并写入了RXnHDP描述符的OWNER位是否为1关键检查在使能EMAC接收RXCONTROL寄存器RXEN位之前必须确保接收描述符队列已就绪。否则使能后硬件会立即开始寻找描述符找不到就会出错。5.2 数据收发不稳定丢包或CRC错误当链路通了但性能不佳时问题往往更深层。内存与Cache一致性这是高速数据传输下丢包、数据错乱的首要疑凶。症状能收到包但内容随机错误或者发送的数据对方收到是乱码。排查确保描述符和数据缓冲区所在内存区域已正确配置为非缓存Non-cacheable或可回写Write-Back并正确维护了Cache一致性。一个简单的测试方法是将缓冲区定义在绝对不经过Cache的区域如EMAC控制模块内部RAM或通过mmap映射的未缓存内存。工具使用处理器的Cache操作指令如CP15的clean/invalidate操作在关键位置DMA启动前、处理接收数据前进行显式维护。缓冲区与描述符管理接收缓冲区不足如果驱动回收和重新提交描述符的速度跟不上收包速度接收队列会耗尽。检查接收中断处理是否高效是否在中断中做了太多耗时操作。可以考虑增加接收描述符数量或使用NAPI轮询机制在非中断上下文中批量处理。发送缓冲区竞争高负载下发送完成中断处理慢导致发送队列满新数据无法提交。优化发送完成回调或使用发送完成指针轮询替代中断。EMAC内部FIFO与阈值RXBUFFEROFFSET这个寄存器设置接收数据在缓冲区中的起始偏移。协议栈通常希望以太网帧头与缓冲区起始地址对齐。如果设置不当可能导致协议栈解析错误。RXMAXLEN设置接收帧的最大长度。如果收到巨帧而此值设置过小帧会被截断或丢弃。根据网络环境调整标准帧1518带VLAN 1522巨帧可设更大。RXnFLOWTHRESH接收流控阈值。当接收FIFO中的数据量超过此阈值时EMAC会向外发送流量控制暂停帧。在网络拥塞时合理设置此值可以防止本机缓冲区溢出。时钟与信号完整性在100Mbps尤其是1000Mbps模式下MII/GMII接口的时序要求非常严格。用示波器或逻辑分析仪检查MTXD/MRXD等数据线相对于时钟边沿的建立和保持时间是否满足PHY芯片的要求。检查PCB布线确保时钟和数据线走线等长阻抗匹配远离噪声源。5.3 中断相关问题无中断产生检查CMINTCTRL全局中断是否使能。检查具体中断源在EMAC模块如TXINTMASKSET和控制模块CMTXINTEN是否均被使能。检查ARM中断控制器AINTC的配置对应EMAC中断线是否已映射并开启。中断处理函数被重复调用中断风暴最可能的原因中断服务程序中没有清除中断源。对于EMAC模块产生的中断必须在ISR结束前向MACEOIVECTOR寄存器执行一次写操作写任何值均可作为中断结束标志。检查是否在清除一个中断状态前同一中断条件又被触发。例如发送队列一直是空的那么“发送队列空”中断就会不断产生。需要在ISR中补充发送队列或者暂时屏蔽该中断。5.4 性能优化实践当基本功能调通后下一步就是优化吞吐量和CPU占用率。描述符存放位置对于追求极限吞吐量的应用将描述符放在EMAC控制模块的8KB专用RAM中。这消除了Cache一致性开销让DMA引擎以最快速度访问描述符。数据缓冲区可以放在更大的DDR内存中。中断合并与轮询利用CMRXINTMAX和CMTXINTMAX寄存器限制每秒中断次数。例如设置为1000则每秒最多产生1000次接收或发送中断将中断频率控制在可处理范围内。对于高流量场景可以考虑采用“中断轮询”的混合模式。在中断服务程序中只做最少量的标记工作然后唤醒一个内核线程或任务在非中断上下文中轮询完成指针TXnCP/RXnCP来处理大批量数据包。Linux内核的NAPI机制就是这种思想的体现。使用多通道进行QoS隔离如果你的应用同时有高优先级的实时数据如视频RTP包和低优先级的普通数据如TCP文件传输可以利用8个通道。将高优先级流量绑定到高优先级通道并在驱动中优先处理该通道的中断和描述符确保实时性。统计寄存器监控EMAC提供了丰富的网络统计寄存器在寄存器映射的0x1200偏移后如各种长度的帧计数、CRC错误、对齐错误等。定期监控这些寄存器可以了解网络健康状况和EMAC工作状态为性能分析和故障定位提供数据支持。