时钟源方案
RMII 的数据采样依赖 REF_CLK ,因此 MAC 和 PHY 必须使用 同一个 50MHz 参考时钟。下图是 MAC 与 PHY 常见的三种时钟架构,区别在于时钟由谁产生、REF_CLK 的方向如何:
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 |
|
输出 |
Ameba 输出 50MHz 给 PHY,PHY 无需晶振 |
Ameba 提供 25MHz |
|
输出 |
Ameba 输出 25MHz 给 PHY,PHY 无需晶振 |
MAC 与 PHY 使用独立时钟源 |
|
输入 |
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 向 PHY 输出时钟
备注
节省引脚的连接方式(需 PHY 支持):不使用 EXT_CLK_OUT ,而是将 MAC 的 REF_CLK 同时接到 PHY 的 XTAL2,PHY 自己的 REF_CLK 引脚悬空,XTAL1 接 GND。时钟通过 REF_CLK 信号线传递,可省去 EXTCLK 引脚和 PHY 晶振。
节省引脚的连接方式
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 使用独立晶振
外部时钟源
如时钟架构图的子图 (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。