时钟源方案

RMII 的数据采样依赖 REF_CLK ,因此 MAC 和 PHY 必须使用 同一个 50MHz 参考时钟。下图是 MAC 与 PHY 常见的三种时钟架构,区别在于时钟由谁产生、REF_CLK 的方向如何:

MAC 与 PHY 的三种时钟架构:Ameba 提供时钟、独立时钟源、共用外部时钟

MAC 与 PHY 的时钟架构

备注

  • REF_CLK 只能有一个驱动源。图中的双向箭头表示方向可选,不是两端同时驱动。

  • 两个独立的 50MHz 时钟不能代替共用的 REF_CLK ,即使频率偏差很小。

  • MAC 工作时钟的来源(内部 PLL 或外部时钟)与 REF_CLK 的来源互不影响。

按 MAC 的 50MHz 时钟来源,分为内部时钟源和外部时钟源两类,在 Menuconfig 的 MAC CLOCK SOURCE 中选择。

内部时钟源

MAC 的 50MHz 时钟由 SoC 内部 PLL 分频得到(对应 Internal clock divided from PLL )。此时 SoC 的 PLL 必须能被整数分频到 50MHz,请在 Menuconfig 中选择满足该条件的系统时钟配置。否则以太网不会启动,日志中会提示 RMII 需要 50MHz。

在此基础上,再根据 PHY 的时钟来源,在 PHY CLOCK SOURCE 中选择以下三种情况之一:

内部时钟源下的三种情况

情况

Menuconfig 选项

REF_CLK 方向(MAC 侧)

说明

Ameba 提供 50MHz

50M from Ameba

输出

Ameba 输出 50MHz 给 PHY,PHY 无需晶振

Ameba 提供 25MHz

25M from Ameba

输出

Ameba 输出 25MHz 给 PHY,PHY 无需晶振

MAC 与 PHY 使用独立时钟源

PHY xtal

输入

PHY 使用自己的晶振,并向 MAC 输出 REF_CLK

25M from Ameba 中的 25MHz 指提供给 PHY 的输入时钟,RMII 的 REF_CLK 仍为 50MHz。

Ameba 提供 50MHz

将 EXTCLK 引脚(见 引脚配置 )通过引脚复用配置为 EXT_CLK_OUT 功能,由 Ameba 输出 50MHz 时钟,接到 PHY 的 XTAL2 输入。此时 PHY 芯片无需单独的晶振。

Ameba 的 EXT_CLK_OUT 输出时钟接到 PHY 的 XTAL2

Ameba 向 PHY 输出时钟

备注

节省引脚的连接方式(需 PHY 支持):不使用 EXT_CLK_OUT ,而是将 MAC 的 REF_CLK 同时接到 PHY 的 XTAL2,PHY 自己的 REF_CLK 引脚悬空,XTAL1 接 GND。时钟通过 REF_CLK 信号线传递,可省去 EXTCLK 引脚和 PHY 晶振。

MAC 的 REF_CLK 同时接到 PHY 的 XTAL2,PHY 的 REF_CLK 引脚悬空

节省引脚的连接方式

Ameba 提供 25MHz

接线与 Ameba 提供 50MHz 相同。EXTCLK 引脚输出的频率须符合所用 PHY 对输入时钟的要求:PHY 要求 25MHz 时,在 Menuconfig 中选择 25M from Ameba ;要求 50MHz 时,选择 50M from Ameba 。

MAC 与 PHY 使用独立时钟源

PHY 的系统时钟由独立的晶振提供,不需要配置 EXT_CLK_OUT ,REF_CLK 由 PHY 输出给 MAC。

PHY 使用独立的 25MHz 晶振,REF_CLK 由 PHY 输出给 MAC

PHY 使用独立晶振

外部时钟源

如时钟架构图的子图 (c) 所示,同一个外部 50MHz 时钟源同时供给 MAC 和 PHY:MAC 通过 EXTCLK 引脚接收工作时钟,PHY 通过其支持的外部时钟输入接收同源时钟,不再使用独立晶振。PHY 的输入引脚、允许频率及启动配置须按所用 PHY 的数据手册确定。

在 Menuconfig 的 MAC CLOCK SOURCE 中选择 External 50M from the EXTCLK pin ,SDK 将 MAC 的 EXTCLK 引脚复用为 EXT_CLK50M_IN 。

  • EXTCLK 在此方案中用作输入,不能同时用于输出 25MHz/50MHz 给 PHY。

  • 外部 50MHz 时钟必须在 MAC 切换时钟源之前稳定,否则 MAC 会失去工作时钟。

  • 该方案下 REF_CLK 默认由 PHY 输出给 MAC。如需改为由 MAC 输出,需要同时调整初始化配置和 PHY 驱动中的 cfg_refclock。