基于STM32移植LWIP硬件相关介绍

1.前言

移植需要做的准备工作,下载相关的资料:《基于STM32移植LWIP的资料准备》

移植过程是基于硬件平台STM32F429,在移植了STM32标准库的基础上面进行移植。

在移植之前需要对我们的硬件及其接口有一些了解。

2.硬件原理图介绍

网卡硬件连接原理图如下:
1:MCUSTM32F429
2:网卡LAN8720A

备注:硬件网卡LAN8720ARMII接口与MCU连接的。

  • MII即“媒体独立接口”,也叫“独立于介质的接口”。它是IEEE-802.3定义的以太网行业标准。它包括一个数据接口,以及一个MAC和PHY之间的管理接口。
  • RMII全称为“简化的媒体独立接口”,是IEEE-802.3u标准的以太网接口之一,比MII有更少的I/O传输.(此处内容来源于网络)

在这里插入图片描述

3.SMI(MDC/MDIO)总线接口介绍

3.1 MDIO接口

SMI:串行管理接口(Serial Management Interface),也被称作MII管理接口(MII Management Interface),包括MDC和MDIO两条信号线MDIO是一个PHY的管理接口,用来读/写PHY的寄存器,以控制PHY的行为或获取PHY的状态,MDC为MDIO提供时钟。

MDIO原本是为MII总线接口定义的,MII用于连接MAC和PHY,包含两种信号接口:

1: 一个数据接口用于MAC和PHY之间接收和发送以太网帧数据。
2: 一个PHY管理接口,即MDIO,用于读写每个PHY的控制寄存器和状态寄存器,以达到控制PHY行为和监控PHY状态的目的。

MDIO是双向的,只支持一个MAC连接最多32个PHY的连接方式,且MAC作为master,PHY作为slave。在写PHY寄存器的时候,由MAC驱动MDIO向PHY写入数据;在读PHY寄存器时,前半段由MAC驱动发送寄存器地址,后半段由PHY驱动回复寄存器的值。

MDC要求由MAC输出,是非周期性的,即不要求提供固定频率的时钟,对于PHY芯片则作为输入,以在上升沿触发MDIO的读写。MDC的时钟频率可以是DC-2.5MHz,即最小的时钟周期为400ns

3.2 MDIO数据传输协议

MDIO数据格式定义在IEEE 802.3以太网标准中,如下图所示(数据传输顺序为从左至右):

Preamble
(32bits)
Start
(2bits)
OP Code
(2bits)
PHYAD
(5bits)
REGAD
(5bits)
Turn Around
(2bits)
Data
(16bits)
Idle
Read 1…1 01 10 A4A3A2A1A0 R4R3R2R1R0 Z0 D15…D0 Z*
Write 1…1 01 01 A4A3A2A1A0 R4R3R2R1R0 10 D15…D0 Z*

上图中*表示高阻态,这时MDIO的状态由一个外部的1.5KΩ电阻决定。

Preamble+Start:32bits的前导码以及2bit的开始位。

OP Code:2bits的操作码,10表示读,01表示写。

PHYAD:5bits的PHY地址,一般PHY地址从0开始顺序编号,例如6口switch中PHY地址为0-5。

REGAD:5bits的寄存器地址,即要读或写的寄存器。

Turn Around:2bits的TA,在读命令中,MDIO在此时由MAC驱动改为PHY驱动,并等待一个时钟周期准备发送数据。在写命令中,不需要MDIO方向发生变化,则只是等待两个时钟周期准备写入数据。

Data:16bits数据,在读命令中,PHY芯片将读到的对应PHYAD的REGAD寄存器的数据写到Data中,在写命令中,MAC将要写入对应PHYAD的REGAD寄存器的值写入Data中。

Idle:空闲状态,此时MDIO无源驱动,处高阻状态,但一般用上拉电阻使其处在高电平。
在这里插入图片描述
需要注意的是,为了保证PHY能准确采样,当MAC向MDIO写数据的时候,需要在MDC的上升沿之前就把数据写到MDIO上,要求等待10ns以上再发出一个MDC的上升沿。而为了保证MAC能准确采样,当PHY向MDIO写数据时,这个clock-to-data的delay时间范围可以是0-300ns(小于上面提到的400ns)。这个规定使接口的实现变得简单,但一定程度上限制了总线带宽。
IEEE 802.3还定义了扩展的SMI数据格式,包括read,write以及set address和read increment,不过我们在此不做讨论。

4.LAN8720A简介

  1. 从datasheet中可以了解到LAN8720A仅支持RMII接口的10Mbps、100Mbps

  2. PHYAD[0]: PHY地址配置(参考:Datasheet 3.7.1)
    将PHYAD0位驱动为高电平或低电平,以为每个PHY提供唯一的地址。在硬件复位结束时(默认= 0b),该地址被锁存到内部寄存器中。在多PHY应用程序(例如转发器)中,控制器能够通过唯一地址管理每个PHY。每个PHY检查每个管理数据帧中相关位中的匹配地址。 识别到匹配后,PHY会响应该特定帧。 PHY地址还用于为加扰器提供种子。 在多PHY应用中,这可确保加扰器不同步,并在整个频谱上分散电磁辐射。

    设备的SMI地址可以通过硬件配置为0或1。如果有需要地址大于1,则用户可以使用软件配置PHY地址。 通过特殊模式寄存器PHYAD位写入PHY地址(在某个地址建立SMI通信之后)。 PHYAD0硬件配置与RXER引脚复用。

    备注:根据前面的硬件原理图,PHYAD0引脚是未连接,所以默认PHY地址为0。(在后续编程中会使用到该地址)

  3. REF_CLK的配置(参考:Datasheet 3.7.4 )
    通过nINTSEL来配置两个模式:REF_CLK输入模式(nINT)和REF_CLK输出模式。 配置模式决定了nINT / REFCLKO引脚的功能。 nINTSEL配置锁定在POR(Power-On Reset)和nRST(pin reset)的上升沿。 默认情况下,通过内部上拉电阻将nINTSEL配置为nINT模式。

    RMII REF_CLK是连续时钟,可为CRS_DV,RXD [1:0],TXEN,TXD [1:0]和RXER提供时序参考。

    • 配置REF_CLK输入模式,XTAL1 / CLKIN引脚驱动50MHz REF_CLK。 这是使用RMII时的传统系统配置,请参见第3.7.4.1节。
    • 配置REF_CLK输出模式,设备产生50MHz RMII REF_CLK,此时nINT中断功能不可用(该引脚复用2个功能)。 REF_CLK输出模式允许将低成本25MHz晶振用作REF_CLK的参考。这种配置可以降低系统成本,请参见第3.7.4.2节。

    备注: 根据前面的硬件原理图,nINTSEL引脚被10K电阻下拉到GND,所以REF_CLK为输出模式。

  4. LED的配置
    提供两个LED信号作为指示收发器工作的状态:

    • LED1:每当设备检测到有效链接时,LED1输出就被驱动为激活状态,而当CRS处于活动状态(高电平)指示活动时,LED1输出将闪烁。
    • LED2:当工作速度为100Mbps时,LED2输出被驱动为激活状态。 当工作速度为10Mbps或线路隔离时,此LED指示灯将不活动。

    备注:根据前面的硬件原理图,LED1LED2都是高电平驱动。LED的2个引脚都有2个功能复用引脚:
    1: REGOFF = 0,将会使能内部+1.2V调节器。
    2: nINTSEL = 0,将会设置REF_CLK为输出模式。

  5. 在驱动移植过程中我们比较关注的Registers Map,后面移植会使用到它,如下:

    IEEE802.3标准第22条要求的寄存器0到6,以及规范允许的“供应商专用”寄存器16到31。 不支持的寄存器(例如7到15)将被读取为十六进制“ FFFF”。

    备注:后面编程主要用到上面的3个寄存器:
    0: Basic Control Register
    1: Basic Status Register
    31: PHY Special Control/Status Register

5.参考资料

  1. https://blog.csdn.net/jasonchen_gbd/article/details/51628992

猜你喜欢

转载自blog.csdn.net/ZHONGCAI0901/article/details/108985844