LAN8720是低功耗的10/100M以太网PHY层芯片,I/O引脚电压符合IEEE802.3-2005标准。
LAN8720支持通过RMII接口与以太网MAC层通信,内置10-BASE-T/100BASE-TX全双工传输模块,支持10Mbps和100Mbps
LAN8720可以通过自协商的方式与目的主机最佳的连接方式(速度和双工模式)。
支持HP Auto-MDIX自动翻转功能,无需更换网线即可将连接更改为直连或交叉连接。

1、支持RMII接口以减少引脚数
2、支持全双工和半双工模式
3、可以使用25M晶振以降低成本
4、支持SMI串行管理接口
5、支持MAC接口

PHY地址设置

SMI最多可以控制32个PHY芯片,通过不同的PHY芯片地址来对不同的PHY操作。
LAN8720通过设置RXER/PHYAD0引脚来设置其PHY地址。
默认情况下为0,其地址设置如下表所示。我们STM32F407开发板使用的是默认地址,也就是0X00。

RXER/PHYAD0引脚状态 PHY地址
上拉 0X01
下拉(默认) 0X00

外部结构

LAN8720A 总共只有 24Pin,仅支持 RMII 接口。

  • 连接
    • LAN8720A 通过 RMII 与 MAC 连接。
  • RJ45 是网络插座
    • 与 LAN8720A 连接之间还需要一个变压器,所以一般使用带电压转换和 LED 指示灯的 HY911105A 型号的插座。

:::info 时钟问题
一般来说,必须为使用 RMII 接口的 PHY 提供 50MHz 的时钟源输入到 REF_CLK 引脚,
不过LAN8720A 内部集成 PLL,可以将 25MHz 的时钟源陪频到 50MHz 并在指定引脚输出该时 钟,所以我们可以直接使其与 REF_CLK 连接达到提供 50MHz 时钟的效果。:::

内部结构

image.png

引脚的重用性

部分引脚是具有双重功能的,比如 PHYAD0 与 RXER 引脚是共用的,在系统上电后 LAN8720A 会马上读取这部分共用引脚的电平,以确定系统的状态并保存在相关寄存器内,之后则自动转入作为另一功能引脚

PHYAD[0]引脚

  • 用于配置 SMI 通信的 LAN8720A 地址
  • 在芯片内部该引脚已经自带下拉电阻,默认认为 0(即使外部悬空不接)
  • 在系统上电时会检测该引脚获取得到 LAN8720A 的地址为 0 或者 1,并保存在特殊模式寄存器(R18)的 PHYAD 位中,该寄存器的 PHYAD 有 5 个位,在需要超过 2 个 LAN8720A 时可以通过软件设置不同 SMI 通信地址。
  • PHYAD[0]是与 RXER 引脚共用。

    MODE[2:0]引脚

  • 用于选择 LAN8720A 网络通信速率和工作模式

  • 可选 10Mbps 或 100Mbps 通信速度,半双工或全双工工作模式
  • 一般将 MODE 引脚都设置为 1,可以 让 LAN8720A 启动自适应功能,它会自动寻找最优工作方式。
  • 引脚共用

    • MODE[0]与 RXD0 引脚共用
    • MODE[1]与 RXD1 引脚共用
    • MODE[2]与 CRS_DV 引脚共用。

      nINT/REFCLKO引脚

  • 用于 RMII 接口中 REF_CLK 信号线

  • 当 nINTSEL 引脚为低电平是,它也可以被设置成 50MHz 时钟输出,这样可以直接与 STM32F42x 的 REF_CLK 引脚 连接为其提供 50MHz 时钟源,这种模式要求为 XTAL1 与 XTAL2 之间或为 XTAL1/CLKIN提供 25MHz 时钟
  • 由 LAN8720A 内部 PLL 电路陪频得到 50MHz 时钟,此时 nIN/REFCLKO 引脚的中断功能不可用,用于 50MHz 时钟输出。当 nINTSEL 引脚为高电平时,LAN8720A 被设置为时钟输入,即外部时钟源直接提供 50MHz 时钟接入 STM32F42x 的 REF_CLK 引脚和 LAN8720A 的 XTAL1/CLKIN 引脚,此时 nINT/REFCLKO 可用于中断 功能。nINTSEL 与 LED2 引脚共用,一般使用下拉 REGOFF 引脚用于配置内部+1.2V 电压源,LAN8720A 内部需要+1.2V 电压,可以通过 VDDCR 引脚输入+1.2V 电压提供,也可以直接利用 LAN8720A 内部+1.2V 稳压器提供。当REGOFF 引脚为低电平时选择内部+1.2V 稳压器。REGOFF 与 LED1 引脚共用。

LAN8720A 支持 HP Auto-MDIX 自动 翻转功能,即可自动识别直连或交叉网线并自适应。

序号与 SMI 数据帧中的 RADDR 是对应的,这在编写驱动时非常重要,本文将它们标记为 R0~R31。

寄存器

可规划为三个组:

Basic Basic 是 IEEE 802.3 要求的
R0 是基本控制寄存器,其位 15 为 Soft Reset 位,向该位写 1 启动,LAN8720A 软件复位,还包括速度、自适应、低功耗等等功能设置
R1 是基本状态寄存器。
Extended Extended 是扩展寄存器,包括 LAN8720A 的 ID 号、制造商、版本号等等信息
Vendor-specific