🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
LAN8720A 是 SMSC 公司(已被 Microchip 公司收购)设计的一个体积小、功耗低、全能型 10/100Mbps 的以太网物理层收发器。它是针对消费类电子和企业应用而设计的。LAN8720A 总共只有 24Pin,仅支持 RMII 接口。由它组成的网络结构见图 3‑7。 ![](https://box.kancloud.cn/fb4c345f6b354c2c740bb51520e908aa_659x304.png) 图 3‑7由 LAN8720A 组成的网络系统结构 LAN8720A 通过 RMII 与 MAC 连接。 RJ45 是网络插座,在与 LAN8720A 连接之间还需要一个变压器,所以一般使用带电压转换和 LED 指示灯的 HY911105A 型号的插座。一般来说,必须为使用 RMII 接口的 PHY 提供 50MHz 的时钟源输入到 REF\_CLK 引脚,不过LAN8720A 内部集成 PLL,可以将 25MHz 的时钟源陪频到 50MHz 并在指定引脚输出该时钟,所以我们可以直接使其与 REF\_CLK 连接达到提供 50MHz 时钟效果。 LAN8720A 内部系统结构见图 3‑8。 ![](https://box.kancloud.cn/451061c9809db9536b2dfd0bb647c1a4_740x405.png) 图 3‑8LAN8720A 内部系统结构 LAN8720A 有各个不同功能模块组成,最重要的要数接收控制器和发送控制器,其它的基本上都是与外部引脚挂钩,实现信号传输。部分引脚是具有双重功能的,比如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 通信速度,半双工或全双工工作模式,另外 LAN8720A 支持 HP Auto-MDIX 自动翻转功能,即可自动识别直连或交叉网线并自适应。一般将 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 之间或为 TAL1/CLKIN提供 25MHz 时钟,由 LAN8720A 内部 PLL 电路陪频得到 50MHz 时钟,此时nIN/REFCLKO 引脚的中断功能不可用,用于 50MHz 时钟输出。当 nINTSEL 引脚为高电平时,LAN8720A 被设置为时钟输入,即外部时钟源直接提供 50MHz 时钟接入 STM32F42x的 REF\_CLK 引脚和 LAN8720A 的 XTAL1/CLKIN 引脚,此时INT/REFCLKO 可用于中断功能。 nINTSEL 与 LED2 引脚共用,一般使用下拉。 REGOFF 引脚用于配置内部+1.2V 电压源, LAN8720A 内部需要+1.2V 电压,可以通过VDDCR 引脚输入+1.2V 电压提供,也可以直接利用 LAN8720A 内部+1.2V 稳压器提供。当REGOFF 引脚为低电平时选择内部+1.2V 稳压器。 REGOFF 与 LED1 引脚共用。 SMI 支持寻址 32 个寄存器, LAN8720A 只用到其中 14 个,参考图 3‑9。 ![](https://box.kancloud.cn/b69a2a16dd7b1d94729fd4eaa9706d4e_633x439.png) 图 3‑9LAN8720A 寄存器列表 序号与 SMI 数据帧中的 RADDR 是对应的,这在编写驱动时非常重要,本文将它们标记为 R0~R31。寄存器可规划为三个组: Basic、 Extended 和 Vendor-specific。Basic 是IEEE802.3 要求的, R0 是基本控制寄存器,其位 15 为 Soft Reset 位,向该位写 1 启动LAN8720A 软件复位,还包括速度、自适应、低功耗等等功能设置。 R1 是基本状态寄存器。Extended 是扩展寄存器,包括 LAN8720A 的 ID 号、制造商、版本号等等信息。Vendorspecific 是供应商自定义寄存器, R31 是特殊控制/状态寄存器,指示速度类型和自适应功能。