LwIP应用开发实战指南:基于STM32
上QQ阅读APP看书,第一时间看更新

3.4 PHY:LAN8720A

LAN8720A是SMSC公司(已被Microchip公司收购)设计的一个体积小、功耗低、全能型10/100Mbit/s的以太网物理层收发器。它是针对消费类电子和企业应用而设计的。LAN8720A总共只有24个引脚,仅支持RMII接口。由它组成的网络结构如图3-7所示。

图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所示。

图3-8 LAN8720A内部系统结构

LAN8720A由各个具有不同功能的模块组成,其中最重要的是接收控制器和发送控制器,其他模块基本上都是与外部引脚挂钩,实现信号传输。部分引脚具有双重功能,比如PHYAD0与RXER引脚是共用的,在系统上电后LAN8720A会马上读取这部分共用引脚的电平,以确定系统的状态并保存在相关寄存器内,之后则自动转入作为另一功能引脚。

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

MODE[2:0]引脚用于选择LAN8720A网络通信速率和工作模式,可选10Mbit/s或100Mbit/s通信速度,半双工或全双工工作模式,另外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时钟源,这种模式要求外部提供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所示。

图3-9 LAN8720A寄存器列表

序号与SMI数据帧中的RADDR是对应的,这在编写驱动时非常重要,本书将它们标记为R0~R31。寄存器可规划为3个组:Basic、Extended和Vendor-specific。Basic是IEEE 802.3要求的,R0是基本控制寄存器,其位15为Soft Reset位,向该位写1启动LAN8720A软件复位,还包括速度、自适应、低功耗等功能设置。R1是基本状态寄存器。Extended是扩展寄存器,包括LAN8720A的ID号、制造商、版本号等信息。Vendor-specific是供应商自定义寄存器,R31是特殊控制/状态寄存器,指示速度类型和自适应功能。