以太网硬件介绍
1. STM32以太网外设简介
1.1 ETH逻辑框图
以太网外设包括带专用 DMA 控制器的 MAC 802.3(介质访问控制)。它支持介质独立接口(MII) 和简化介质独立接口 (RMII),并通过一个选择位在两个接口间进行切换(请参见SYSCFG_PMC 寄存器)
DMA 控制器通过 AHB 主从接口与内核和存储器相连。 AHB 主接口用于控制数据传输,而AHB 从接口则用于访问“控制和状态寄存器” (CSR) 的空间
在进行数据发送时,首先将数据由系统存储器以 DMA 的方式送至发送 FIFO (Tx FIFO) 进行缓冲,再通过 MAC 内核发送。同样,接收 FIFO (Rx FIFO) 则存储通过线路接收的以太网帧,直到这些帧通过 DMA 传送到系统存储器
以太网外设还包括用于与外部 PHY 通信的 SMI。通过一组配置寄存器,用户可以为 MAC 控制器和 DMA 控制器选择所需模式和功能
以太网外设由 4 个主要功能模块组成:
- 控制和状态寄存器模块 (CSR),用于控制通过 AHB 32 位从接口进行的寄存器访问
- 直接存储器访问接口 (DMA),此为逻辑 DMA 模块,具有 1 条用于接收的物理通道和 1 条用于发送的物理通道。该模块用于控制通过 AMBA AHB 32 位主接口在 MAC 和系统存储器之间进行的数据传输。
- 介质访问控制模块 (MAC),负责实现以太网协议
- MAC 事务层 (MTL),负责控制应用和 MAC 之间的数据流
此外,还增添了协议适配模块以支持 RMII PHY 介质独立接口
1.2 MAC 802.3
适用于局域网(LAN)的IEEE 802.3国际标准将CSMA/CD(带有冲突检测的载波侦听多路访问)用作访问方法。以太网外设包括一个带MII接口的MAC 802.3(介质访问控制)控制器和一个专用DMA控制器
- MAC帧格式
- 帧发送:从系统存储器读取的以太网帧由DMA推入FIFO,然后将帧弹出并传输到MAC内核。帧传输结束时,从MAC内核获取发送状态并传回DMA
- 帧填充和CRC计算:当从应用程序接收到的字节数少于46时,会向发送帧附加零,使数据长度正好为46字节,以满足IEEE 802.3的最小数据字段要求
1.3 FIFO
FIFO向MAC内核弹出数据有两种模式:
- 阈值模式:只要FIFO中的字节数超过配置的阈值,数据就准备好弹出并转发到MAC内核
- 存储转发模式:仅在FIFO中存储完整的帧后,才会想MAC内核弹出帧
1.4 DMA
以太网外设中,DMA基于描述符的链表传输数据。应用程序在系统存储器(SRAM)中创建描述符。支持正常描述符和上下文描述符两种
以太网模块中的接收/发送FIFO和内存之间的以太网数据包传输时以太网DMA使用DMA描述符完成的。一共有两个描述符列表:一个用于接收、一个用于发送,两个列表的基地址分别写入DMACRDLAR寄存器和DMACTDLAR寄存器中
- DMA描述符环形结构
- DMA描述符环链接结构:到达环结束处时,DMA会自动基于基址进行回卷
- DMA描述符格式:以发送正常描述符的读取和回写格式为例
2. LAN8720以太网芯片简介
LAN8720是低功耗的10/100M以太网PHY层芯片,I/O引脚电压符合IEEE802.3-2005标准。LAN8720支持通过RMII接口与以太网MAC层通信,内置10-BASE-T/100BASE-TX全双工传输模块,支持10Mbps和100Mbps。LAN8720可以通过自协商的方式与目的主机最佳的连接方式(速度和双工模式)。支持HP Auto-MDIX自动翻转功能,无需更换网线即可将连接更改为直连或交叉连接。
LAN8720功能框图如下图示
LAN8720的配置及使用详见LAN8720数据手册,下面简单介绍几种常用功能设置
- 中断管理:当中断事件发生且相应事件的中断位使能,LAN8720就会在nINT(14脚)产生一个低电平有效的中断信号。提供主中断和复用中断两种模式
- PHY地址设置:MAC层通过SMI总线对PHY进行读写操作,LAN8720通过设置RXER/PHYAD0引脚来设置PHY地址,默认情况下为0
- nINT/REFCLKO配置:nINTSEL(2脚)用于设置nINT/REFCLKO(14脚)引脚的功能
- 内部寄存器:BCR/BSR/PHY等寄存器