GD32F450以太网(1):ETH MAC外设接口简介


文章目录

  • GD32F450以太网(1):ETH MAC外设接口简介
  • 1. GD选型手册GD32F450部分
  • 2. ETH MAC外设简介
  • 3. ETH引脚接口说明
  • 3.1 MII 和 RMII 接口
  • 3.1.1 MII 接口连接示意图:
  • 3.1.2 RMII 接口连接示意图:
  • 3.1.3 关于MII 和 RMII 接口的注意事项
  • 3.2 SMI站点管理接口
  • 4. ETH对应GD32F450引脚配置



本文归纳总结了ETH外设接口的大概原理和引脚的作用说明,若需要详细资料,请参考用户手册

1. GD选型手册GD32F450部分

Android ETH通信 eth通讯接口_Android ETH通信


Android ETH通信 eth通讯接口_arm_02

通过选型手册可知,GD32F450的全型号都集成了一个以太网外设 ETH MAC,

2. ETH MAC外设简介

GD32F450系列控制器内部集成了一个以太网外设,支持10Mbps或100Mbps数据传输速率 ,它实际是一个通过DMA控制器进行介质访问控制(MAC),它的功能就是实现 MAC 层的任务。借助以太网外设,GD32F450控制器可以通过ETH外设按照IEEE 802.3-2002和IEEE 1588-2008标准发送和接收MAC数据包。

ETH 内部自带专用的DMA控制器用于MAC,ETH支持两个工业标准接口介质独立接口(MII)和简化介质独立接口(RMII)用于与外部 PHY 芯片连接。 通过对SYSCFG_CFG1寄存器的相关位进行设置,可以配置使用 MII 还是 RMII 接口用于MAC 数据包传输,ETH还集成了站管理接口(SMI)接口专门用于与外部 PHY 通信,用于访问 PHY 芯片寄存器。

物理层定义了以太网使用的传输介质、传输速度、数据编码方式和冲突检测机制,PHY芯片是物理层功能实现的实体,生活中常用水晶头网线+水晶头插座+PHY组合构成了物理层。

ETH 有专用的DMA控制器,它通过 AHB 主从接口与内核和存储器相连,AHB主接口用于控制数据传输,而AHB从接口用于访问“控制与状态寄存器” (CSR)空间。在进行数据发送是,先将数据有存储器以DMA传输到发送TX FIFO 进行缓冲,然后由 MAC 内核发送;接收数据时,RX FIFO先接收以太网数据帧,再由DMA传输至存储器。ETH系统功能框图见下图:

Android ETH通信 eth通讯接口_mcu_03

发送数据模块包括:

  • TxDMA控制器:用于从存储器中读取描述符和数据,以及将状态写入存储器;
  • TxMTL:用于对发送数据的控制,管理和存储。 TxMTL内含TxFIFO,用于缓存待MAC发送的数据;
  • MAC发送控制寄存器组:用于管理和控制数据帧的发送。

接收数据模块包括:

  • RxDMA控制器:用于从存储器中读取描述符,以及将数据与状态写入存储器;
  • RxMTL:用于对接收数据的控制,管理和存储。 RxMTL实现了RxFIFO,用于存储待转发到系统存储的帧数据;
  • MAC接收控制寄存器组:用于管理数据帧的接收和标示接收状态。 MAC内含接收过滤器,采用多种过滤机制,滤除特定的以太网帧。

注意: 在使用以太网模块时, AHB的频率应至少为25MHz。

3. ETH引脚接口说明

ETH的接口整体分为两个部分,一部分是用来通信以太网数据的MII/RMII接口,另一部分是用来控制PHY芯片内部寄存器的SMI接口。

以太网模块通过MII/RMII接口与片外PHY连接,传送与接收以太网包。 MII或RMII模式由软件选择。

通过SMI接口对PHY芯片进行管理,可以配置以太网通信模式和检测通信状态等。

3.1 MII 和 RMII 接口

介质独立接口(MII)用于链接 MAC 控制器和 PHY 芯片,提供数据传输路径。

RMII 接口是 MII 接口的简化版本, MII 需要16根通信线, RMII 只需7根通信,在功能上是相同的。 下面两个图分别是 MII 接口连接示意图和RMII 接口连接示意图:

3.1.1 MII 接口连接示意图:

Android ETH通信 eth通讯接口_Android ETH通信_04

接口说明:

  • MII_TX_EN:发送使能信号,此信号必须与数据前导符的起始位同步出现,并在传输完毕前 一直保持。
  • MII_TX_CLK:发送数据使用的时钟信号,对于10Mbit/s的数据传输,此时钟为2.5MHz,对于100M bit/s的数据传输,此时钟为25MHz。
  • MII_TXD[3:0]:发送数据线,每次传输4位数据,数据在MII_TX_EN信号有效时有效。MII_TXD[0]是数据的最低有效位, MII_TXD[3]是最高有效位。当MII_TX_EN信号无效时, PHY忽略传输的数据。
  • MII_RX_DV:接收数据使能信号,由PHY控制,当PHY准备好数据供MAC接收时,该信号有效。此信号必须和帧数据的第一个4位同步出现,并保持有效直到数据传输完成。在传送最后4位数据后的第一个时钟之前,此信号必须变为无效状态。为了正确地接收帧,有效电平不能滞后于数据线上的帧首界定码出现。
  • MII_RX_ER:接收出错信号,保持一个或多个时钟周期(MII_RX_CLK) 的有效状态,表明MAC在接收过程中检测到错误。具体错误原因需结合MII_RX_DV的状态及MII_RXD[3:0]的数据值,详见下表:(接收接口信号编码)。
  • MII_RX_CLK:接收数据使用的时钟信号,对于10Mbit/s的数据传输,此时钟为2.5MHz,对于100M bit/s的数据传输,此时钟为25MHz。
  • MII_RXD[3:0]:接收数据线,每次接收4位数据,数据在MII_RX_DV信号有效时有效。MII_RXD[0]是数据的最低位, MII_RXD[3]是最高位。当MII_RX_DV无效,而MII_RX_ER有效时, MII_RXD[3:0]数据值代表特定的信息请参考下表:(接收接口信号编码)。
  • MII_CRS:载波侦听信号,仅工作在半双工模式下,由PHY控制。当发送或接收介质非空闲时,此信号有效。 PHY必需保证MII_CRS信号在发生冲突的整个时间段内都保持有效。此信号不需要与发送/接收的时钟同步。
  • MII_COL:冲突检测信号,仅工作在半双工模式下,由PHY控制。当检测到介质发生冲突时,
    此信号有效,并且在整个冲突的持续时间内,保持此信号有效。此信号不需要与发送/接收的时
    钟同步。

接收接口信号编码表:

MII_RX_ER

MII_RX_DV

MII_RXD[3:0]

说明

0

0

0000 to 1111

正常的帧间隔

0

1

0000 to 1111

正常的数据接收

1

0

0000

正常的帧间隔

1

0

0001 to 1101

保留

1

0

1110

载波错误指示

1

0

1111

保留

1

1

0000 to 1111

数据接收出错

MII 时钟源:
为了产生TX_CLK和RX_CLK时钟信号,外部PHY模块必需有来自外部的25MHz时钟驱动。该时钟不需要与MAC时钟相同。可以使用外部的25MHz晶振或者微控制器的时钟输出引脚CK_OUTx(x=0,1)提供这一时钟。当时钟来源为CK_OUTx(x=0,1)引脚时需配置合适的PLL,保证CK_OUTx(x=0,1)引脚输出的时钟为25MHz。

3.1.2 RMII 接口连接示意图:

Android ETH通信 eth通讯接口_mcu_05

精简媒体独立接口(RMII) 规范减少了以太网通信所需要的引脚数。根据IEEE 802.3标准, MII接口需要16个引脚用于数据和控制信号,而RMII标准则将引脚数减少到了7个。 RMII具有以下特性:

  • 只有一个时钟信号,且该时钟信号需要提高到50MHz
  • MAC和外部的以太网PHY需要使用同样的时钟源
  • 使用2位宽度的数据收发

接口说明:

  • RMII_TX_EN:发送使能信号,此信号必须与数据前导符的起始位同步出现,并在传输完毕前 一直保持。
  • RMII_TXD[1:0]:发送数据线,每次传输2位数据,数据在RMII_TX_EN信号有效时有效。RMII_TXD[0]是数据的最低有效位,RMII_TXD[1]是最高有效位。当RMII_TX_EN信号无效时, PHY忽略传输的数据。
  • RMII_RX_DV:接收数据使能信号,由PHY控制,当PHY准备好数据供MAC接收时,该信号有效。其他意义请参考MII_RX_DV说明。
  • RMII_RXD[1:0]:接收数据线,每次接收2位数据,数据在RMII_RX_DV信号有效时有效。RMII_RXD[0]是数据的最低位, RMII_RXD[1]是最高位。其他意义请参考MII_RXD[3:0]说明。
  • RMII_REF_CLK:发送和接收数据使用的时钟信号,对于10Mbit/s的数据传输,此时钟为5MHz,对于100M bit/s的数据传输,此时钟为50MHz。

RMII 时钟源:

RMII_REF_CLK是发送和接收数据同时使用的时钟信号,为了产生RMII_REF_CLK时钟信号,外部PHY模块必需有来自外部的50MHz时钟驱动。将相同的时钟源接到MAC和以太网PHY的REF_CLK引脚保证两者时钟源的同步。可以使用外部的25MHz晶振通过PHY芯片内部倍频产生50M(有的PHY芯片支持),再输出到MCU,或者直接外接一个50M时钟同时接到PHY的REF_CLK引脚和MAC,再或者用微控制器的时钟输出引脚CK_OUTx(x=0,1)提供这一时钟。当时钟来源为CK_OUTx(x=0,1)引脚时需配置合适的PLL,保证CK_OUTx(x=0,1)引脚输出的时钟为50MHz。

3.1.3 关于MII 和 RMII 接口的注意事项
  1. 对于MII 接口,有上面那个接收接口信号编码表来表示数据的正常还是异常。对于 RMII 接口,我并不清楚怎样表示数据的正常还是异常,但是猜测MII 和 RMII 接口对于数据正常还是异常表示方法是不同的。
  2. MII/RMII 位传输顺序:正常我们数据都是8位的,那么不管是MII还是RMII接口,都要分段发送(每次4bit或2bit),发送接收的次序都是低位先出。MII和RMII之间的区别主要是数据位数和发送次数的不同。 MII上是先发送/接收低4位数据,再发送/接收高4位。在RMII上则是先发送/接收最低2位数据,再次低2位数据,次高2位数据,和最高2位数据。
    例如:一个字节数据为10011101b(从左到右顺序:高位到低位)。使用MII发送需2个时钟周期:1101 -> 1001(从左到右顺序:高位到低位);使用RMII发送需4个时钟周期: 01 -> 11 -> 01 -> 10(从左到右顺序:高位到低位)。
  3. 上面的引脚只是 MII 和 RMII 接口的引脚,实际还会有SMI站点管理接口引脚,同时PHY芯片也会有一些引脚(如PHY的reset复位引脚,可选的还有INT引脚);
  4. 针对不同的PHY 芯片,对MII 和 RMII 接口支持也不相同,有的两种接口都支持,有的只支持其中一种接口。

针对上面两种接口,这里做了一个接口对比,能更好的理解MII 和 RMII 接口:

  • TX_EN:数据发送使能。在整个数据发送过程保存有效电平。
  • TX_CLK:数据发送时钟线。标称速率为 10Mbit/s 时为 2.5MHz;速率为100Mbit/s 时为 25MHz。 RMII 接口没有该线。
  • TXD[3:0]或 TXD[1:0]:数据发送数据线。对于 MII 有 4 位, RMII 只有 2 位。只有在 TX_EN 处于有效电平数据线才有效。
  • RX_DV:接收数据有效信号,功能类似 TX_EN,只不过用于数据接收,由 PHY芯片负责驱动。对于 RMII 接口,是把 CRS 和 RX_DV 整合成 CRS_DV 信号线,当介质处于不同状态时会自切换该信号状态。
  • RX_ER:仅用于 MII 接口,接收错误信号线,由 PHY 驱动,向 MAC 控制器报告在帧某处检测到错误。
  • RX_CLK:数据接收时钟线。标称速率为 10Mbit/s 时为 2.5MHz;速率为100Mbit/s 时为 25MHz。 RMII 接口没有该线。
  • RXD[3:0]或 RXD[1:0]:数据接收数据线,由 PHY 芯片负责驱动。对于 MII 有 4位, RMII 只有 2 位。在 MII 模式,当 RX_DV 禁止、 RX_ER 使能时,特定的RXD[3:0]值用于传输来自 PHY 的特定信息。
  • CRS:仅用于 MII 接口,载波侦听信号,由 PHY 芯片负责驱动,当发送或接收介质处于非空闲状态时使能该信号。在全双工模式该信号线无效。
  • COL:仅用于 MII 接口,冲突检测信号,由 PHY 芯片负责驱动,检测到介质上存在冲突后该线被使能,并且保持至冲突解除。在全双工模式该信号线无效。
  • REF_CLK:仅用于 RMII 接口,由外部时钟源提供 50MHz 参考时钟。因为要达到 100Mbit/s 传输速度, MII 和 RMII 数据线数量不同,使用 MII 和 RMII 在时钟线的设计是完全不同的。对于 MII 接口,一般是外部为 PHY 提供 25MHz 时钟源,再由 PHY 提供 TX_CLK 和 RX_CLK 时钟。对于 RMII 接口,一般需要外部直接提供 50MHz 时钟源,同时接入 MAC 和 PHY。

更为详细说明请参考用户手册

3.2 SMI站点管理接口

站点管理接口(SMI) 通过MDC时钟线与MDIO数据线这两条线与外部PHY通讯,可以通过其访问任意PHY的任意寄存器。 SMI接口可以支持最多32个PHY,应用程序可以从 32 个 PHY 中选择一个 PHY,然后从任意 PHY 包含的 32 个寄存器中选择一个寄存器,发送控制数据或接收状态信息。但在任意给定时间内只能对一个 PHY 中的一个寄存器进行寻址。

SMI站点管理接口连接示意图:

Android ETH通信 eth通讯接口_Android ETH通信_06

MDC时钟线和MDIO数据线具体作用如下:

  • MDC:最高频率为2.5MHz的时钟信号,在空闲状态下该引脚保持为低电平状态。在传输数据时该信号的高电平和低电平的最短保持时间为160ns,信号的最小周期为400ns;
  • MDIO:用于与PHY之间的数据传输,与MDC时钟线配合,接收/发送数据。

SMI接口的时钟源由AHB时钟分频得到。为了保证MDC时钟频率不超过2.5MHz,需根据AHB时钟频率对PHY控制寄存器中相关位进行设置,选择合适的分频系数。 下表的时钟范围列出了对应AHB时钟范围的分频系数的选择 :

AHB时钟

MDC 时钟

选择位

150~240MHz

AHB clock/102

0x4

35~60MHz

AHB clock/26

0x3

20~35MHz

AHB clock/16

0x2

100~150 MHz

AHB clock/62

0x1

60~100MHz

AHB clock/42

0x0

详细说明请参考用户手册

4. ETH对应GD32F450引脚配置

下面列出了MAC模块所用引脚在MII/RMII模式下默认及重映射的功能和具体配置 。

注意: 对任意接口模式(MII/RMII),有的MAC信号有两个引脚可以选择,这时候就要根据板子的引脚设计选择一个合适的引脚,不可以两个引脚都选,只能将其中的一个引脚映射到AF11 。

MAC信号

引脚配置(AF11)

MII可选引脚(1)

MII可选引脚(2)

RMII可选引脚(1)

RMII可选引脚(2)

ETH_MDC

推挽复用输出,高速 (50MHz)

PC1

-

PC1

-

ETH_MII_TXD2

推挽复用输出,高速 (50MHz)

PC2

-

-

-

ETH_MII_TX_CLK

推挽复用输出,高速 (50MHz)

PC3

-

-

-

ETH_MII_CRS

推挽复用输出,高速 (50MHz)

PA0

PH2

-

-

ETH_MII_RX_CLK ETH_RMII_REF_CLK

推挽复用输出,高速 (50MHz)

PA1

-

PA1

-

ETH_MDIO

推挽复用输出,高速 (50MHz)

PA2

-

PA2

-

ETH_MII_COL

推挽复用输出,高速 (50MHz)

PA3

PH3

-

-

ETH_MII_RX_DV ETH_RMII_CRS_DV

推挽复用输出,高速 (50MHz)

PA7

-

PA7

-

ETH_MII_RXD0 ETH_RMII_RXD0

推挽复用输出,高速 (50MHz)

PC4

-

PC4

-

ETH_MII_RXD1 ETH_RMII_RXD1

推挽复用输出,高速 (50MHz)

PC5

-

PC5

-

ETH_MII_RXD2

推挽复用输出,高速 (50MHz)

PB0

PH6

-

-

ETH_MII_RXD3

推挽复用输出,高速 (50MHz)

PB1

PH7

-

-

ETH_PPS_OUT

推挽复用输出,高速 (50MHz)

PB5

PG8

PB5

PG8

ETH_MII_TXD3

推挽复用输出,高速 (50MHz)

PB8

PE2

-

-

ETH_MII_RX_ER

推挽复用输出,高速 (50MHz)

PB10

PI10

-

-

ETH_MII_TX_EN ETH_RMII_TX_EN

推挽复用输出,高速 (50MHz)

PB11

PG11

PB11

PG11

ETH_MII_TXD0 ETH_RMII_TXD0

推挽复用输出,高速 (50MHz)

PB12

PG13

PB12

PG13

ETH_MII_TXD1 ETH_RMII_TXD1

推挽复用输出,高速 (50MHz)

PB13

PG14

PB13

PG14

到此,ETH外设接口简介就介绍完了,关于ETH的使用,请看我的其他文章。