STM32以太网(ETH)学习笔记1:ETH接口功能说明详解
目 录
以太网接口功能说明:SMI、MI 和 RMII
1. 站管理接口:SMI
SMI 帧格式
SMI写操作
SMI 读操作
SMI 时钟选择
2. 介质独立接口:MII
MII 时钟源
3. 精简介质独立接口:RMII
RMII 时钟源
以太网接口功能说明:SMI、MI 和 RMII
以太网外设包括带专用 DMA 控制器的 MAC 802.3(介质访问控制)。它支持介质独立接口 (MII) 和简化介质独立接口 (RMII),并通过SYSCFG_PMC 寄存器的bit23在两个接口间进行切换,以太网控制器处于复位模式或使能时钟前,应用程序必须设置 MII/RMII 模式。
在进行数据发送时,首先将数据由系统存储器以 DMA 的方式送至发送 FIFO (Tx FIFO) 进行
缓冲,再通过 MAC 内核发送。同样,接收 FIFO (Rx FIFO) 则存储通过线路接收的以太网帧,直到这些帧通过 DMA 传送到系统存储器。
以太网外设还包括用于与外部 PHY 通信的 SMI。通过一组配置寄存器,用户可以为 MAC 控
制器和 DMA 控制器选择所需模式和功能。
当使用以太网时,AHB 时钟频率必须至少为 25 MHz。
1. 站管理接口:SMI
站管理接口 (SMI) 允许应用程序通过 2 线(时钟和数据线)访问任意 PHY 寄存器。该接口支持访问多达 32 个 PHY。
MDC 时钟线和 MDIO 数据线在微控制器中均用作复用功能 I/O:
● MDC:周期性时钟,提供以最大频率 2.5 MHz 传输数据时的参考时序。MDC 的最短高电平时间和最短低电平时间必须均为 160 ns。MDC 的最小周期必须为 400 ns。在空闲状态下,SMI 管理接口将 MDC 时钟信号驱动为低电平。
● MDIO:数据输入/ 输出比特流,用于通过 MDC 时钟信号向/从 PHY 设备同步传输状态信息。
SMI 帧格式
● 报头:报头字段对应于 MDIO 线上 32 个连续的逻辑“1”位以及 MDC 上的 32 个周期。该字段用于与 PHY 设备建立同步。
● 起始:用于验证线路从默认逻辑“1”状态变为逻辑“0”状态,然后再从逻辑“0”状态变为逻辑“1”状态。
● 操作:定义正在发生的事务(读取或写入)的类型。
● PADDR:PHY 地址有 5 位,可构成 32 个唯一 PHY 地址。最先发送和接收地址的 MSB 位。
● RADDR:寄存器地址有 5 位,可在所选 PHY 设备中对 32 个不同的寄存器进行寻址。最先发送和接收地址的 MSB 位。
● TA:周转字段有 2 位,用于避免在读取事务期间出现竞争现象。读取事务时,MAC控制器将 TA 的 2 个位驱动为高阻态。PHY设备必须将 TA 的第1位驱动为高阻态,将 TA 的第2位驱动为“0”。
写入事务时,MAC 控制器对 TA 字段驱动为 10。PHY 设备必须将 TA 字段驱动为高阻态。
● 数据:数据字段为 16 位。最先发送和接收的位必须为 ETH_MACMIIDR 寄存器的位 15。
● 空闲:MDIO 线驱动为高阻态。三态驱动器必须禁止,PHY 的上拉电阻使线路保持逻辑
“1”状态。
SMI写操作
当应用程序将 MII写 和 MII繁忙 位(ETH_MACMIIAR的bit1、bit0) 置 1 时,SMI 将通过传输 PHY 地址、PHY 中的寄存器地址以及写入数据(ETH_MACMIIDR 中的值)来触发对 PHY 寄存器进行写操作。事务进行期间,应用程序不应更改 MII 地址寄存器 或 MII 数据寄存器的内容。在此期间对 MII 地址寄存器 或 MII 数据寄存器执行的写操作将会忽略(繁忙位处于高电平状态),事务将无错完成。写操作完成后,SMI 将通过复位繁忙位进行指示。
SMI 读操作
当用户将以太网 MAC MII 地址寄存器 (ETH_MACMIIAR) 中的 MII 繁忙位置 1、MII 写位清零时,SMI 将通过传输 PHY 地址和 PHY 中的寄存器地址在 PHY 寄存器中触发读操作。事务进行期间,应用程序不应更改 MII 地址寄存器的内容或 MII 数据寄存器。在此期间对 MII 地址寄存器或 MII 数据寄存器执行的写操作将会忽略(繁忙位处于高电平状态),事务将无错完成。读操作完成后,SMI 将复位繁忙位,然后用从 PHY 中读取的数据更新 MII 数据寄存器。
SMI 时钟选择
SMI 时钟是一个分频时钟,其时钟源为应用时钟(AHB 时钟)。 分频系数取决于 MII 地址寄存器(ETH_MACMIIAR)中设置的时钟范围。
2. 介质独立接口:MII
介质独立接口 (MII) 定义了 10 Mbit/s 和 100 Mbit/s 的数据传输速率下 MAC 子层与 PHY 之
间的互连。
● MII_TX_CLK:连续时钟信号。该信号提供进行 TX 数据传输时的参考时序。标称频率为:速率为 10 Mbit/s 时为 2.5 MHz ;速率为 100 Mbit/s 时为 25 MHz。
● MII_RX_CLK:连续时钟信号。该信号提供进行 RX 数据传输时的参考时序。标称频率为:速率为 10 Mbit/s 时为 2.5 MHz ;速率为 100 Mbit/s 时为 25 MHz。
● MII_TX_EN:发送使能信号。该信号表示 MAC 当前正针对 MII 发送半字节。该信号必须与报头的前半字节进行同步 (MII_TX_CLK),并在所有待发送的半字节均发送到 MII 时必须保持同步。
● MII_TXD[3:0]:数据发送信号。该信号是 4 个一组的数据信号,由 MAC 子层同步驱动,在 MII_TX_EN 信号有效时才为有效信号(有效数据)。MII_TXD[0] 为最低有效位,MII_TXD[3] 为最高有效位。禁止 MII_TX_EN 时,发送数据不会对 PHY 产生任何影响。
● MII_CRS:载波侦听信号。当发送或接收介质处于非空闲状态时,由 PHY 使能该信号。发送和接收介质均处于空闲状态时,由 PHY 禁止该信号。PHY 必须确保 MII_CS 信号在冲突条件下保持有效状态。该信号无需与 TX 和 RX 时钟保持同步。在全双工模式下,该信号没意义。
● MII_COL:冲突检测信号。检测到介质上存在冲突后,PHY 必须立即使能冲突检测信号,并且只要存在冲突条件,冲突检测信号必须保持有效状态。该信号无需与 TX 和 RX 时钟保持同步。在全双工模式下,该信号没意义。
● MII_RXD[3:0]:数据接收信号。该信号是 4 个一组的数据信号,由 PHY 同步驱动,在
MII_RX_DV 信号有效时才为有效信号(有效数据)。MII_RXD[0] 为最低有效位,MII_RXD[3] 为最高有效位。当 MII_RX_DV 禁止、MII_RX_ER 使能时,特定的 MII_RXD[3:0] 值用于传输来自 PHY 的特定信息(请参见表 164)。
● MII_RX_DV:接收数据有效信号。该信号表示 PHY 当前正针对 MII 接收已恢复并解码的半字节。该信号必须与恢复帧的头半字节进行同步 (MII_RX_CLK),并且一直保持同步到恢复帧的最后半字节。该信号必须在最后半字节随后的第一个时钟周期之前禁止。为了正确地接收帧,MII_RX_DV 信号必须在时间范围上涵盖要接收的帧,其开始时间不得迟于 SFD 字段出现的时间。
● MII_RX_ER:接收错误信号。该信号必须保持一个或多个周期 (MII_RX_CLK),从而向 MAC 子层指示在帧的某处检测到错误。该错误条件必须通过 MII_RX_DV 验证,如表 164 所示。
MII 时钟源
要生成 TX_CLK 和 RX_CLK 时钟信号,必须向外部 PHY 提供 25MHz 时钟,如图 326 所示。除了使用外部 25 MHz 石英晶体提供该时钟,还可以通过 STM32F4xx 微控制器的 MCO 引脚输出该信号。这种情况下,必须对 PLL 倍频进行配置,以通过 25 MHz 外部石英晶体在 MCO 引脚上获得所需频率
3. 精简介质独立接口:RMII
RMII 时钟源
使用外部 50 MHz 时钟驱动 PHY 或使用嵌入式 PLL 生成 50 MHz 频率信号来驱动 PHY
作者:Mr_幼稚猿