锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

GD32F450以太网(2-1):PHY芯片LAN8720A介绍

时间:2023-02-12 01:30:01 a561j电阻器220f450v5a三极管f450光电开关传感器lan的连接器

PHY芯片LAN8720A

文章目录

  • PHY芯片LAN8720A
    • 1. MCU网口输出设计现状
    • 2. LAN8720A
      • 2.1 LAN8720A简介
      • 2.2 LAN8720A使用连接简图
      • 2.3 LAN8720A内部图
      • 2.4 LAN8720A和MCU连接图
    • 3. LAN8720A内部寄存器[^1]
      • 3.1 BCR寄存器
      • 3.2 BSR寄存器
      • 3.3 PHY特殊功能寄存器
    • 声明

1. MCU网口输出设计现状

首先要知道,要实现网口与标准网络之间的通信,必须遵守网口传输协议TCP/IP 协议,TCP/IP 协议不是 TCP 和 IP 这两个协议的合称是指整个因特网 TCP/IP 协议族。在协议分层模型方面,TCP/IP 由网络接口层、网络层、传输层、应用层四个层次组成。OSI 是
传统的开放系统互联参考模型,该模型将 TCP/IP 分为七层: 物理层、数据链路层(网络接口层)、网络层(网络层)、传输层(传输层)、会话层、表示层和应用层(应用层)。TCP/IP 模型与 OSI 模型比较如下所示1
在这里插入图片描述

对于mcu实现网口输出的外挂芯片有几种常见方法:

  • 如果 MCU 内部集成 MAC 控制器 (ETH),只需要外接一个 PHY 芯片可以通过介质独立接口 (MII) 或简化介质独立界面 (RMII)一个接口外挂PHY芯片,通过网站管理接口(SMI)外部PHY通信实现网口输出。LAN8720。
  • 如果 MCU 内部没有 MAC 需要外接的控制器 MAC 芯片和 PHY 这两个芯片可以分立或集成在一个芯片中。ENC28J60。
  • mcu通过spi或者8080平行总线、串口等外挂已经集成TCP/IP协议的芯片实现网口输出。如W5500。

前两种方案,MAC PHY 完成了 TCP/IP 物理层和数据链路层是五层模型的最低两层。网络层、传输层、应用层等上述层需要在 MCU 实现。一般采用成熟的开源 TCP/IP 协议栈,如 uIP、LwIP。它们都是轻量级的 TCP/IP 协议栈。

三是使用硬件 TCP/IP 协议栈,优点是mcu内部不需要再实现TCP/IP协议,只需实现应用层代码即可。socket数量有限,通信数据量不易过大。

当然,现在也有mcu将PHY集成到mcu内部,如沁恒CH32V307自带10兆以太网PHY,这种mcu不需要插件网络芯片。

对于那些先进的嵌入式芯片,其中许多是芯片内部集成PHY,还有是通过SDIO插件通信模块。

2. LAN8720A

2.1 LAN8720A简介

首先我的理解LAN8720分为LAN8720A和LAN8720Ai,平时我们说LAN8720指的就是LAN8720A。LAN8720A这是一个更严格的名字。接下来,让我们简要介绍一下 LAN8720A 这个芯片。

LAN8720A 是低功耗的 10/100M 以太网 PHY 层芯片,I/O 引脚电压一致 IEEE802.3-2005 标准,支持通过 RMII 接口与以太网 MAC 因此,芯片必须集成 MAC 控制器的MCU使用。LAN8720A 内置 10-BASE-T/100BASE-TX 全双工传输模块,支持 10Mbps 和 100Mbps。 LAN8720A 通过自主机的最佳连接方式(速度和双工模式)可通过自协商支持 HP Auto-MDIX 无需更换网线即可将连接改为直接连接或交叉连接。LAN8720A 主要特点如下:

2.2 LAN8720A使用连接简图

2.3 LAN8720A内部图

LAN8720A 因此,许多引脚具有多种功能,在 LAN8720A从启动到运行的不同时刻,重用为不同的功能。以下是一些最重要的引脚说明1

  1. PHY 设置芯片地址 :MAC层通过SMI总线对PHY读写内部寄存器,SMI可以控制32个PHY通过不同的芯片PHY芯片的地址不同PHY操作,LAN8720A 通过PHYAD0 配置引脚和引脚 RXER 引脚复用,芯片内部有自己的下拉电阻,因此,默认情况下为0,硬复位后,LAN8720A 将引脚电平读取为器件 SMI 地址,接下拉电阻时(浮空也可以,因为芯片内部自带了下拉电阻),设置 SMI 地址为 0.外部上拉电阻时,可设置为 1。
  2. nINT/REFCLKO 引脚功能配置 :nINT/REFCLKO 引脚可作为中断输出(请参考中断)LAN2930页的8720数据手册,或参考时钟输出。该功能由另一个引脚使用LED2(nINTSEL)来决定,LED2 芯片复位后引脚值 LAN8720A 读取时,当引脚与拉电阻(或浮空、内置拉电阻)相连时,正常工作后,nINT/REFCLKO 引脚将被用作中断输出引脚 REF_CLK IN 模式)。引脚下拉电阻时,正常工作后,nINT/REFCLKO 引脚将为参考时钟输出 REF_CLK OUT 模式)。
    注意:在 REF_CLK IN 必须提供外部模式 50Mhz 参考时钟给 LAN8720A 的 XTAL1(CLKIN)引脚。在 REF_CLK OUT 模式,LAN8720A 可以外接 25Mhz 石英晶振通过内部倍频到达 50Mhz,然后通过 REFCLKO 引脚,输出 50Mhz 参考时钟给 MAC 控制器。这样可以减少 BOM成本。两种配置下的时钟接线图如下:

外部提供 50Mhz 参考时钟给 LAN8720A 的 XTAL1(CLKIN)同时引脚RMII提供时钟:

LAN8720A 可以外接 25Mhz 石英晶振通过内部倍频到达 50Mhz,然后通过 REFCLKO 引脚,输出 50Mhz为RMII提供时钟:

时钟的两个功能:PHY芯片工作需要时钟,可以连接25M或50M,RMII需要时钟的通信必须是50M,所以才有上面的接法

  1. 1.2V 内部稳压器配置:LAN8720A 需要 1.2V 电压给 VDDCR 但芯片内部集成了电源 1.2V 稳压器,可通过
    LED1(REGOFF)配置是否使用内部稳压器时,必须提供外部稳压器 1.2V电压给 VDDCR 引脚。我们在这里使用内部稳压器,所以我们在 LED1 下拉电阻(浮空也可以,内置下拉电阻)控制打开内部 1.2V 稳压器。

2.4 LAN8720A和MCU连接图

以下内部集成 MAC 控制器的STM例如,描述连接图:

连接图主要包括两部分:

  • RMII接口:从以太网数据实现mcu到PHY芯片的双向传输。
  • SMI网站管理接口:实现mcu对PHY芯片内部寄存器R/W。

注:从上图可以看出 RMII 相比 MII,引脚的数量简化了很多。RMII接口,图中的 REF_CLK 信号,是RMII 和外部 PHY 共用的 50Mhz 外部必须提供50个参考时钟M时钟的来源可以来自三个地方:

  1. 外部直接提供50M时钟到REF_CLK,例如,有源晶振同时驱动mcu和PHY芯片。
  2. PHY芯片外接25M晶体振动,芯片内部倍频至50M,然后通过REF_CLK输出到mcu,(最常用的方案)
  3. 由mcu引脚输出50的时钟,然后将这个引脚接到REF_CLK ,同时驱动mcu和PHY芯片。

3. LAN8720A内部寄存器1

PHY是由IEEE802.3定义的,一般通过SMI对PHY进行管理和控制,也就是读写PHY芯片的内部寄存器。PHY寄存器的地址空间为5位,可以定义0~31共32个寄存器,但是随着PHY芯片功能的增加,很多PHY芯片都采用分页技术来扩展地址空间,定义更多的寄存器,我们不讨论这种情况,我们只讨论那32个寄存器,其中IEEE802.3定义了0~15这16个寄存器的功能,剩下的16~31寄存器由芯片制造商自己定义,用于实现一些自己独有的功能。

由于寄存器很多,这里只讲几个我们用到的寄存器,其它的请自行查阅LAN8720数据手册。

3.1 BCR寄存器

偏移地址:0x00

对于像BCR这种已经被IEEE802.3规定好的寄存器,一般mcu的网络库会定义好这个寄存器,比如在st的官方库中,ST官方以太网库的stm32f4xx_hal_conf.h中已经定义了BCR和BSR寄存器:

/*Section 3: Common PHY Registers */

#definePHY_BCR ((uint16_t)0x00) /*!< Transceiver Basic Control Register */
#definePHY_BSR ((uint16_t)0x01) /*!< Transceiver Basic Status Register */

我们配置LAN8720其实就是配置BCR寄存器,我们通过调用ST官方的以太网库的HAL_ETH_ReadPHYRegister()和HAL_ETH_WritePHYRegister()函数来完成对PHY芯片寄存器的读写操作。当我们在LAN8720初始化的中并没有看到我们直接操作PHY的寄存器,原因就在这里当我们调用HAL_ETH_Init()函数以后就会根据我们输入的参数配置LAN8720的相应寄存器。

3.2 BSR寄存器

偏移地址:0x01

BSR寄存器为LAN8720的状态寄存器,通过读取该寄存器的值我们可以得到当前的连接速度、双工状态和连接状态等功能。在ST官方以太网库中的HAL_ETH_Init()函数通过读取PHY的BSR寄存器来判断连接是否建立、自协商是否完成等信息,在stm32f4xx_hal_eth.c文件中多次使用到BCR和BSR寄存器。

3.3 PHY特殊功能寄存器

偏移地址:0x1F

由于特殊功能寄存器不属于IEEE802.3规定的前16个寄存器,所以每个厂家的可能不同,这个需要用户根据自己实际使用的PHY芯片参照芯片的数据手册去修改,在stm32f4xx_hal_conf.h文件中定义。

在LAN8720的特殊功能寄存器中我们关心的是bit2~bit4这三位,因为通过这3位来确定连接的状态和速度。在HAL_ETH_Init函数中通过读取这3位的值来设置BCR寄存器的bit8和bit13。

注意!ST以太网库中默认使用的PHY芯片为DP83848,所以我们要根据实际所使用的PHY芯片来修改对应的宏定义,代码如下:

/* Section 4: Extended PHY Registers */

#define PHY_SR ((uint16_t)0x1F)//PHY特殊功能寄存器地址

#define PHY_SPEED_STATUS ((uint16_t)0x0004) //PHY速度掩码
#define PHY_DUPLEX_STATUS ((uint16_t)0x0010) //PHY双工状态掩码

通过以上代码可以看出定义了PHY_SR,读取PHY_SR中的值与PHY_SPEED_STATUS和PHY_DUPLEX_STATUS进行计算来得到速度值和双工状态。

声明


  1. 这部分内容参考了正点原子STM32F429开发板的相关教程文档。 ↩︎ ↩︎ ↩︎

锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章