前言
STM32F4开发板上自带了网口。可以通过开发板自带的网口和LWIP实现:TCP服务器、TCP客服端、UDP以及WEB服务器等四个功能。
1. STM32 以太网简介
STM32F4 芯片自带以太网模块,该模块包括带有专用 DMA 控制器的 MAC 802.3(介质访问控制)控制器,支持介质独立接口(MII)和简化介质独立接口(RMII),并自带了一个用于外部PHY通信的SMI接口,通过一组配置寄存器,用户可以为 MAC 控制器和 DMA 控制器选择所需的模式和功能。
STM32F4必须外接PHY芯片,才可以完成以太网通信,外部PHY芯片可以通过 MII/RMII 接口与STM32F4 内部MAC连接,并且支持 SMI (MDIO&MDC)接口配置外部以太网PHY芯片。
SMI 接口:
SMI 接口,即站管理接口,该接口允许应用程序通过2条线:时钟(MDC)和数据线(MDIO)访问任意 PHY寄存器,访问任意PHY寄存器。该接口支持访问多达32个PHY,应用程序可以从32个PHY中选择一个PHY,然后从任意PHY包含的32个寄存器中选择一个寄存器,发送控制数据和接收状态信息。任意给定时间内只能对一个PHY中的一个寄存器进行寻址。
MII 接口,即介质独立接口,用于 MAC层 与 PHY层 进行数据传输。
MII_TX_CLK:连续时钟信号。该信号提供进行TX 数据传输时的参考时序。标称频率为:速率为 10 Mbit/s 时为2.5 Mhz;速率为 100 Mbit/s 时为25 Mhz。
MII_RX_CLK:连续时钟信号。该信号提供进行RX 数据传输时的参考时序。
MII_TX_EN:发送使能信号。
MII_TXD[3:0]:数据发送信号。该信号是4个一组的数据信号。
MII_CRS:载波侦听信号。
MII_COL:冲突检测信号。
MII_RXD[3:0]:数据接收信号。
MII_RX_DV:接收数据有效信号。
MII_RX_ER:接收错误信号
RMII 接口:
RMII 接口,即精简介质独立接口,该接口降低了在10/100 Mbits/s 下微控制器以太网外设与外部PHY 间的引脚数。根据 IEEE 802.3u 标准,MII 包括16 个数据和控制信号的引脚。RMII 规范将引脚数减少为7个。
什么是PHY?
物理层芯片称为PHY、数据链路层芯片称为MAC。PHY的作用就是将差分信号转换为数字信号(PHY数据是穿过网络接口的差分信号)。
LAN8720A 是低功耗的 10/100M以太网PHY层芯片,I/O 引脚电压符合 IEEE802.3-2005 标准,支持通过RMII 接口与以太网MAC 层通信。
2. TCP/IP LWIP简介
2.1 TCP/IP简介
TCP/IP 中文名为传输控制协议/因特网互联协议,又称为网络通讯协议,是Internet最基本的协议,也是Internet国际互联网络的基础,由网络层的IP协议和传输层的TCP协议组成。TCP/IP定义了电子设备如何连入因特网,以及数据如何在他们之间传输的标准。
该协议采用了4层的层级结构,每一层都呼叫它的下一层所提供的协议来完成自己的需求。简单来说就是,TCP 负责发展传输的问题,一旦有问题就发出信号,要求重新传输,直到所有数据都安全正确的传输到目的地。IP是给因特网的每一台联网设备规定一个地址。
TCP/IP 协议不是TCP和IP这两个的协议的合称,而是指因特网整个 TCP/IP 协议族。从协议分层模型方面来讲,TCP/IP 由四个层次组成:网络接口层、网络层、传输层、应用层。
OSI模型将 TCP/IP 分为七层:物理层、数据链路层(网络接口层)、网络层(网络层)、传输层(传输层)、会话层、表示层和应用层(应用层)。
在本节中:PHY层芯片LAN8720A相当于物理层,STM32F407自带的MAC层相当于数据链路层,LWIP提供的就是网络层、传输层的功能,应用层是需要用户自己根据自己想要的功能去实现的。
2.2 LWIP简介
LWIP 是瑞典计算机科学院开发的一个小型开源的TCP/IP 协议栈,是TCP/IP的一种实现方式。LWIP是轻量级IP协议,有无操作系统的支持都可以运行,LWIP实现的重点是在保持TCP协议主要功能的基础上减少对RAM的占用,它只需十几 KB 的 RAM 和 40K左右的ROM就可以运行,这使 LWIP 协议栈适合在低端的嵌入式系统中使用。
LWIP 的主要特性如下:
- ARP协议,以太网地址解析协议;
- IP协议,包括 IPv4 和 IPv6 ,支持 IP 分片与重装,支持多网络接口下数据转发;
- ICMP 协议,用于网络调试与维护;
- IGMP 协议,用于网络组管理,可以实现多播数据的接收;
- UDP 协议,用户数据报协议;
- TCP 协议,支持 TCP 拥塞控制,RTT 估计,快速恢复与重传等;
- 提供三种用户编程接口方式:raw/callback API、sequential API、BSD-style socket API;
- DNS,域名解析;
- SNMP,简单网络管理协议;
- DHCP,动态主机配置协议;
- AUTOIP,IP地址自动配置;
- PPP,点对点协议,支持PPPoE