功能描述
RMII/ RGMII 接口选择
GMAC 模块可以择配置成 RMII 接口或 RGMII 接口。RMII 接口对应连接百兆网口 PHY,支持 100M/10M Link 速度。RGMII 接口对应连接千兆网口 PHY,支持 1000M/100M/10M Link 速度。
GMAC 连接 RMII PHY (采用内部时钟)
MAC 提供参考时钟
MAC 提供 50 MHz 时钟源至外部 PHY,如下图所示,其中 CLK_OUT 可以输出 25 MHz 替代 PHY 的外部晶振,取决于用户使用。
GMAC 连接 RMII PHY (采用外部时钟)
PHY 提供参考时钟
MAC 接收 PHY 提供的 RMII 50 MHz 参考时钟源,如下图所示,其中 CLK_OUT 可以输出 25 MHz 替代 PHY 的外部晶振,取决于用户使用。
GMAC 连接 RGMII PHY (采用外部时钟)
MAC 采用外部 125 MHz 时钟
RMII 接口时钟选择
RMII 支持内部参考时钟和外部参考时钟:
-
支持内部参考时钟,即 MAC 提供 50 MHz 时钟源至外部 PHY:
-
MAC 内部选通 PLL_EMAC_50M 作为 RMII 50 MHz 参考时钟源,通过 SYSCFG 的寄存器配置。
-
RMII_TX_CK 输出时钟,提供给外部 PHY 使用。
-
-
支持外部参考时钟,即 MAC 接收 PHY 提供的 RMII 50 MHz 参考时钟源:
-
REF_CLK 时钟使能,并且选通作为 RMII 50 MHz 参考时钟源,通过 SYSCFG 的寄存器配置。
-
RMII_TX_CK 不使能,无需提供时钟信号。
-
MDIO
通过 Management Data In/Out (MDIO) 接口,GMAC 可以对 PHY 的寄存器进行读写操作,进而控制 PHY 的工作模式以及获取 PHY 的工作状态。操作寄存器 MDIO_CTL 和 MDIO_DAT 可实现操作 MDIO 接口。
-
MDC:时钟输出信号,提供给 PHY。根据 AHB 总线的时钟来配置时钟分频系数获得,具体配置见寄存器 0x090 MDIO_CTL 描述。
-
MDIO:数据输入输出信号。
MDIO 的帧的格式:Idle + Preamble + Start + Opcode + Phy Addr + Reg Addr + TA + Data。
MDIO 帧域 描述 IDLE IDLE 域 PREAMBLE 32 个连续的 bit 1 START 标志帧的起始位置,2'b10 OPCODE 操作标识域,2'b10 表示读,2'b01 表示写 PHY ADDR 5-bit 的 PHY 地址域 REG ADDR PHY 寄存器地址 TA Turnaround 域,读操作为 2'bZ0,写操作为 2'b10 DATA 16 bit 数据,读操作 MAC 为接收数据,写操作 MAC 为发送数据。
MAC 发送功能
-
SA 源地址自动插入或替换功能
-
配置0x01C MAC_TX_FUNC 寄存器[14:12],MAC TX 支持自动插入或替换发送帧的源地址,源地址可通过寄存器 MAC_ADDR0 或 MAC_ADDR1 配置。
-
-
TX Jabber Timer:MAC TX 支持 Jabber Timer,用于检测发送的帧长度。
-
若关闭 Jabber Timer,发送帧的长度可以达到 16383 bytes。
-
若未关闭 Jabber Timer 功能,最多只能发送 2048 bytes。使能 Frame 后,最大发送的长度为 10240 bytes),并且会在 TDES0 的 BIT14 置 1,指示发送的数据过长,发生 Jabber Timeout。
-
-
CRC 插入/替换
-
配置 TX DMA 描述符 TDES0 [27],可以对发送帧进行 CRC 的插入。
-
配置 TX DMA 描述符 TDES0 [24],可以对发送帧进行 CRC 的替换。此时需要设置 TDES0[27] = 1,关闭 CRC 的插入功能。
-
-
自动补 0
-
配置 TX DMA 描述符 TDES0 [27],可以对长度低于 64 bytes 的发送帧进行自动补 0,并且此时会强制产生 4 bytes 的 CRC,即 short frame + 0 pad + CRC = 64 bytes。
-
若不需要进行自动补 0,可以设置 TDES0[27] = 1。
-
-
TX IP 校验和插入:MAC 支持对发送帧的 IP 校验和进行计算和插入。
-
配置 MAC_CFG[7] = 1,打开 IP Offload 功能。
-
通过 TDES0[23:22] 选择 IP 检验和的计算类型。MAC 支持 IP header 校验和、IP Payload 校验和以及伪 header 校验的硬件加速计算。
-
打开 IP Offload 功能后,TDES0[16] 可以指示发送帧的 IP 校验和是否正确,置 1 表示发送帧存在 IP 校验和错误。
-
MAC 接收功能
-
地址过滤。对于接收帧,MAC 可以进行地址过滤,包括:
-
单播地址过滤
-
源地址过滤
-
反向源地址过滤
-
目的地址过滤
-
反向目的地址过滤
-
-
广播地址过滤
-
多播帧过滤
-
控制帧过滤
RDES0[30]、[13] 分别指示接收帧的目的地址、源地址过滤是否成功。
-
-
RX Watchdog:MAC RX 支持 RX Watchdog,用于检测接收的帧长度
-
若关闭 RX Watchdog,发送帧的长度可以达到 16383 bytes
-
若未关闭 RX Watchdog,最多只能接收 2048 bytes。使能 Jumbo Frame 后,最大接收的长度为 10240 bytes,并且会在 RDES0 [4] 置 1,指示接收的数据过长,发生 Watchdog Timeout。
-
-
CRC/ PAD 剥离:MAC 支持对接收帧进行 CRC/ PAD 剥离。
-
配置 EN_STRIP_FCS = 1,可以对长度 ≥ 1536 bytes 的接收帧进行 CRC 剥离。
-
配置 EN_STRIP_NML = 1,可以对长度 < 1536 bytes 的接收帧进行 CRC 以及 PAD 剥离。
-
-
RX IP 校验和计算:MAC 支持对接收帧的 IP 校验和进行计算。
-
配置 MAC_CFG[7] = 1,打开 IP Offload 功能。此时需要设置 ALT_DES_SIZ = 0x1,激活 RDES4 的状态,软件通过 RDES4 可以获取接收帧 IP 检验和的校验结果,从而得知接收的 IP 帧的校验和结果。
-
流控
流控功能可通过寄存器 0x034 FLOW_CTL 控制,包括:
-
TX 流控
-
在全双工模式下,支持 Pause 帧的发送。
-
在半双工模式下,支持背压操作。
-
-
RX 流控
-
支持 Pause 帧的解析,以及停止发送约定的 Pause 时间。
-
-
单播 Pause 帧
-
MAC 模块支持单播的 Pause 帧。
-
DMA 结构
-
环型结构 (Ring) 的描述符,可以通过 DES_SKIP_LEN 来配置设定两两描述符之间的跳跃长度。
通过描述符的 START_DES 和 END_DES 来决定环形结构的第一个描述符和最后一个描述符,从而形成环路。
-
链型结构 (Chain) 的描述符,则通过描述符的 Next Descriptor Address 来进行指向连接。
在最后一个描述符的 Next Descriptor Address 域上设置为第一个描述符地址,可以形成环路。
DMA 发送描述符
发送描述符 TDES4~7 的应用,需要设置寄存器 0x004 DMA0_CONF 的 ALT_DES_SIZ = 1。其中,TDES4~5 Reserved,TDES6~7 时钟戳信息。Bit | 域描述 |
---|---|
31 | TX_PRC,Transmit in Process,发送进行中。
|
30 | EN_TX_COMP_INT,Enable Transmit Complete
Interrupt,使能发送完成中断,此位只有在 BIT29 有效时才有效。
|
29 | END_DES,End Descriptor,最后一个描述符。
|
28 | START_DES,Start Descriptor,第一个描述符。
|
27 | DIS_CRC,Disable CRC,禁止 CRC 功能时生效,只需在第一个描述符设置此位即可。
|
26 | DIS_PAD,Disable Padding,禁止补 0 功能时生效,只需在第一个描述符设置此位即可。
|
25 | EN_TX_TMSTMP,Enable Transmit
Timestamp,使能发送添加时间戳功能,只需在第一个描述符设置此位即可。
|
24 | EN_CRC_REP,Enable CRC Replacement,使能 CRC
替代功能。 必须保证软件发送帧的内容包含了 CRC,使能 CRC 替代功能后,会进行 CRC 重新计算并替代。另外为了避免 CRC 重复,需要 DIS_CRC =1 禁止 CRC 插入。在第一个描述符设置此位即可。
|
23:22 | EN_CIC,Enable Checksum Insertion
Control,使能校验和插入功能,只需在第一个描述符设置此位即可。
|
21 | TX_END_RNG,Transmit End of Ring,DMA 发送环的末端,表示此描述符为 DMA
发送环的最后一个描述符,结束后跳回起始描述符。
|
20 | EN_DMA_CHN_MOD,Enable DMA Chain Mode,使能 Chain 模式。
|
19:18 | VLAN_TAG_CTL,VLAN Tag Control,VLAN 标签控制,只需在第一个描述符设置此位即可。
|
17 | TX_TMSTMP_STS,Transmit Timestamp
Status,发送时间戳状态,此域只有在最后一个描述符有效。
|
16 | IP_HD_ERR,IP Header Error 此位置 1 表示 MAC 检测发送的 IP 报文的 Header 存在错误,此域只有在最后一个描述符有效。 |
15 | TXERR_STS,Transmit Error Status,发送错误状态指示位。
|
14 | JAB_TO_ERR,Jabber Timout Error,发送 Jabber 超时错误,此位只有在 Jabber
检测功能未禁止的情况下有效。
|
13 | TXFIFO_FLSH_ERR,TXFIFO Flush Error,清除错误,出现软件清除 TXFIFO
的帧数据的操作导致的错误。
|
12 | IP_PL_ERR,IP Payload Error,此位置 1 指示 MAC 检测到发送的 TCP、UDP、ICMP IP 数据包 payload 存在错误。 |
11 | LOS_CR,Loss Carrier,此位置 1 指示在帧发送发生了载波丢失,此位只有在半双工模式下有效。 |
10 | NO_CR,No Carrier,此位置 1 指示在发送的过程中,PHY 的载波侦听 CS 信号并没有生效,即没有检测到载波。 |
9 | LT_COL,Late Collision,此位置 1 指示由于碰撞导致发送终止,此碰撞发生在碰撞窗口之后。此位在 TXFIFO_UF_ERR = 1 时无效。 |
8 | EXS_COL,Excessive Collision,此位置 1 指示当前帧尝试发送的过程中,由于连续的 16 次碰撞的产生终止发送帧。如果取消重传(DIS_RETRY = 1),只要出现 1 次的碰撞,此位则立即置 1。 |
7 | VLAN_STS,VLAN Status,VLAN 帧状态。
|
6:3 | COL_CNT,Collision Count,此域指示在发送前发生多少次碰撞。此域在 TDES0. Bit8 =1 的时候无效。 |
2 | EX_DEF_ERR,Excessive Deferral Error,发送终止由于回退时间过长,此位只有在
EN_DEF_CHECK = 1 的情况下有效。
|
1 | TXFIFO_UF_ERR,TXFIFO Underflow Error,TXFIFO 下溢出错误,DMA 从
Buffer 地址读取帧数据错误。
|
0 | DEF_STS,Defer Status,回退状态,在发送前检测到载波而引起的回退,此位只对于半双工模式有效。
|
Bit | 域描述 |
---|---|
31:29 | TX_SA_CTL,Transmit Source Address Control,发送源地址控制。BIT31 =
1,表示采用 Address1 进行插入或替代。BIT31 = 0,表示采用 Address0
进行插入或替代。 Bit30:29
|
28:16 | TX_BUF2_SIZ,Transmit Buffer2 Size,发送缓存 2 的空间大小。 |
15:13 | Reserved |
12:0 | TX_BUF1_SIZ,Transmit Buffer1 Size,接收缓存 1 的空间大小。 |
Bit | 域描述 |
---|---|
31:0 | BUF1_ADDR,Buffer1 Address,Buffer1 地址指针,Buffer1 的物理地址。 |
Bit | 域描述 |
---|---|
31:0 | BUF2_ADDR/NXT_DES_ADDR
|
Bit | 域描述 |
---|---|
31:0 | TX_STMP_LO,Transmit Timestamp Low 32bit,发送时间戳的低 32 位,此域由 DMA 自动填写,与 TDES7 的高 32bit 组成完整的时间戳。 |
Bit | 域描述 |
---|---|
31:0 | TX_STMP_HI,Transmit Timestamp High 32bit,发送时间戳的高 32 位,此域由 DMA 自动填写,与 TDES6 的低 32bit 组成完整的时间戳。 |
发送描述符 RDES4~7(RDES4 状态信息,RDES5 Reserved,RDES6~7 时钟戳信息)的应用,需要设置寄存器 DMA0/1_CONF 的 ALT_DES_SIZ = 1。
DMA 接收描述符
接收描述符 RDES4~7(RDES4 状态信息,RDES5 Reserved,RDES6~7 时钟戳信息)的应用,需要设置寄存器 DMA0/1_CONF 的 ALT_DES_SIZ = 1。
Bit | 域描述 |
---|---|
31 | RX_PRC,Receive in Process,接收进行中。
|
30 | DA_FLT,Destination Address Filter Fail,目的地址过滤失败。
|
29:16 | RX_FRM_LEN,Receive Frame Length,接收到的帧的长度,此域在最后一个描述符有效,并且无异常发生。 |
15 | RXERR_STS,Receive Error Status,接收错误状态指示位。
|
14 | RX_DES_ERR,Receive Descriptor Error,接收描述符错误,此域在最后一个描述符有效。
|
13 | SA_FLT,Source Address Filter Fail,源地址过滤失败。
|
12 | RX_LEN_ERR,Receive Length Error,接收长度错误。
|
11 | RXFIFO_OF_ERR,RXFIFO Overflow Error,接收溢出错误。
|
10 | VLAN_TAG,VLAN Tag,此位置 1 表示接收的帧位 VLAN 帧。 |
9 | START_DES,Start Descriptor,第一个描述符。
|
8 | END_DES,End Descriptor,最后一个描述符。
|
7 | TMSTMP_AVL/ IP_CHSM_ERR/ GNT_FRM 此位可指示三种状态:
|
6 | LT_COL_ERR,Late Collision Error,Late Collision 错误。
|
5 | RX_FRM_TYP,Receive Frame Type,接收帧的类型。
|
4 | RX_WD_TO_ERR,Receive Watchdog Timeout Error,接收看门狗的超时错误。
|
3 | RX_ERR,Receive Error,接收过程出现 ERR 信号。
|
2 | Reserved |
1 | RX_CRC_ER,RReceive CRC Error,接收 CRC 错误,此域只有在最后一个描述符有效。
|
0 | EXT_STS_AVA/ RX_MAC_ADDR
|
Bit | 域描述 |
---|---|
31 | DIS_COMP_INT,Disable Complete Interrupt,禁止接收完成中断的产生。
|
30:29 | Reserved |
28:16 | RX_BUF2_SIZ,Receive Buffer2 Size,接收缓存 2 的空间大小。 |
15 | RX_END_RNG,Receive End of Ring,指示在 DMA 的 Ring 模式下,此描述为最后的描述符,完成后跳转回起始描述符。 |
14 | RX_DMA_MOD,Receive DMA Mode,接收 DMA 的模式。
|
13 | Reserved |
12:0 | RX_BUF1_SIZ,Receive Buffer1 Size,接收缓存 1 的空间大小。 |
Bit | 域描述 |
---|---|
31:0 | BUF1_ADDR,Buffer1 Address,Buffer1 地址指针,Buffer1 的物理地址。 |
Bit | 域描述 |
---|---|
31:0 | BUF2_ADDR/NXT_DES_ADDR
|
Bit | 域描述 |
---|---|
31:21 | Reserved |
20:18 | VLAN_TAG_PRI_V,VLAN Tag Priority Value,此域内容填入接收到的包的 TAG 用户值域。 |
17 | AV_TAG_PKT_RCD,AV Tagged Packet Received,此位置 1 表示接收到带 AV 标签的数据包。 |
16 | AV_PKT_RCD,AV Packet Received,此位置 1 表示接收到 AV 包。 |
15 | Reserved |
14 | TMSTMP_DRP,Timestamp Dropped,时钟戳丢失,由于 RXFIFO 溢出,导致时钟戳丢失。
|
13 | PTP_VER,PTP Version,PTP 版本。
|
12 | RX_PTP_FRM,Received PTP Frame Type,接收到 PTP 帧的类型。
|
11:8 | PTP_RX_MSG_TYP,Received PTP Message Type,接收到的 PTP 消息报文类型。
|
7 | RX_IPV6_PKT,Received IPV6 Packet,接收到 IPV6 包。
|
6 | RX_IPV4_PKT,Received IPV4 Packet,接收到 IPV4 包。
|
5 | DIS_IP_CHSUM,Disable IP Checksum Function,关闭 IP 校验和功能。
|
4 | IP_PL_ERR,IP Payload Error,IP 包校验错误,接收到的 IP 包的 TCP/UDP/ICMP
的校验和错误,或长度错误。
|
3 | IP_HD_ERR,IP Header Error,接收到的 IP 包的首部校验和与计算的校验和不一致,或者 IP 版本与
Ethernet Type 域值不一致。
|
2:0 | IP_PKT_TYP,IP Packet Type,IP 包类型,此域只有在 BIT6/7 生效时才有效。
|
Bit | 域描述 |
---|---|
31:0 | RX_STMP_LO,Receive Timestamp Low 32bit,接收时间戳的低 32 位,此域由 DMA 自动填写,与 TDES7 的高 32bit 组成完整的时间戳。 |
Bit | 域描述 |
---|---|
31:0 | RX_STMP_HI,Receive Timestamp High 32bit,发送时间戳的高 32 位,此域由 DMA 自动填写,与 TDES7 的低 32bit 组成完整的时间戳。 |