STM32F407 系列文章 - LWIP-Network(十四)
目录
前言
一般对于许多嵌入式系统或单片机,在其资源受限的环境下,要想实现网络通讯,并保证资源的高效利用和稳定的网络通信,我们一般采用一种轻量级的网络协议lwIP。TI公司的STM32芯片一般都会自带一路以太网口,用于网络通讯,但因其内存资源受限,所以都用采用一种小型化、轻量级的lwIP网络协议,只需十几KB的RAM和大约40K的ROM即可运行,既可以在无操作系统环境下工作,也可以与各种操作系统配合使用,使其成为资源受限的嵌入式系统的理想选择。一般市场上所卖的板子都带这一功能的,需准备STM32F407开发板一块和网线一根。
一、以太网简介
以太网 (Ethernet,ETH) 是互联网技术的一种,由于它是在组网技术中占的比例最高,很多人直接把以 太网理解为互联网。 以太网是指遵守IEEE 802.3标准组成的局域网,由IEEE 802.3标准规定的主要是位于参考模型的物理层 (PHY) 和数据链路层中的介质访问控制子层 (MAC)。在家庭、企业和学校所组建的PC局域网形式一般也是以太网,其标志是使用水晶头网线来连接 (当然还有其它形式)。IEEE还有其它局域网标准,如IEEE 802.11是无线局域网,俗称Wi-Fi。IEEE802.15是个人域网,即蓝牙技术,其中的802.15.4标准则是ZigBee技术。 现阶段,工业控制、环境监测、智能家居的嵌入式设备产生了接入互联网的需求,利用以太网技术,嵌入式设备可以非常容易地接入到现有的计算机网络中。
二、网络协议简介
网络通信的本质是数字通信,任何数字通信都离不开通信协议的制定,通信设备只有按照约定 的、统一的方式去封装和解析信息,才能实现通信。所以要实现网络通信,制定一套网络协议很有必要。网络协议为设备之间的通信提供了必要的规则和约定,了解网络协议的基本原理和常用类型对于深入理解计算机网络的工作原理和进行网络编程都非常重要。
1.OSI模型
提到网络协议,先介绍一下著名的OSI模型(Open System Interconnection/Reference Model),由国际标准化组织(ISO)在1978年提出了“开放系统互联参考模型”,即OSI模型,旨在为全球范围内的计算机提供开放式通信的标准框架。它将计算机网络体系结构的通信协议划分为七层,自下而上依次为:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。OSI参考模型_百度百科 (baidu.com)
2.TCP/IP协议
TCP/IP协议(Transmission Control Protocol/Internet Protocol,传输控制协议/网际协议),即传输控制/网络协议,也叫作网络通讯协议,它是Internet网络使用中的最基本的通信协议,规定了互联网中各部分的通信标准。并且,TCP/IP协议是保证网络数据信息及时、完整传输的两个重要的协议。TCP/IP协议_百度百科 (baidu.com)
TCP/IP协议在一定程度上参考了OSI的体系结构,OSI模型共有七层,但是这显然是有些复杂的,所以在TCP/IP协议中,它们被简化为了四个层次,分别为应用层、传输层、网络层和网络接口层。相比之下,TCP/IP模型更简洁、更注重实用性和效率,专注于实现网络通信具体协议。
TCP/IP协议栈每一层都使用下一层提供的服务,同时对上一层提供服务。这种分层结构使得协议栈更加灵活,易于扩展和维护。不同层次上的协议一起工作,协调数据在计算机网络中的传输,使得不同的计算机能够相互通信,每个层次含义如下:
- 应用层:这是最顶层,负责处理特定的应用程序细节,软件开发者大部分时间都在应用层工作。在这一层,用户的数据被处理和解释。一些常见的应用层协议包括 HTTP、FTP、SMTP 和 DNS 等。
- 传输层:这一层负责数据包的分割、打包以及传输控制,确保数据能够可靠、有序地到达目的地。主要的传输层协议有TCP和UDP。
- 网络层:负责确定数据包的路径从源到目的地。这一层主要有IP(Internet Protocol)协议,它负责在主机之间发送和接收数据包;ARP协议实现如何在网络地址和MAC地址之间进行映射。
- 网络接口层:这是最底层,主要为MAC控制器和PHY驱动芯片组成。PHY规定了传输信号所需要的物理电平、介质特征。MAC控制器负责将数据转换为可以在物理媒介PHY上发送的信号。这一层的协议涉及到如何将数据帧封装在数据链路层,以便在网络上进行传输。
3.协议层报文间的封装与拆封
TCP/IP是一个庞大的协议族,是所有网络通讯协议的基础、核心,也是众多网络协议的集合。它定义了数据如何在不同的网络设备之间传输,确保了数据的可靠、有序和高效传输。下面简单解释一下在数据的发送和接收过程中,TCP/IP都做了哪些事儿。
当用户发送数据时,将数据向下交给传输层,这是处于应用层的操作,应用层可以通过调用传输 层的接口来编写特定的应用程序。传输层会在数据前面加上传输层首部(传输层首部可以是TCP首部,也可以是UDP首部),然后向下交给网络层。 同样地,网络层会在数据前面加上网络层首部(IP首部),然后将数据向下交给链路层,链路层会对数据进行最后一次封装,即在数据前面加上链路层首部(此处使用以太网接口为例),然后将数据交给网卡。最后,网卡将数据转换成物理链路上的电平信号,数据就这样被发送到了网络 中。数据的发送过程,可以概括为TCP/IP的各层协议对数据进行封装的过程,如图下图所示。
当设备的网卡接收到某个数据包后,它会将其放置在网卡的接收缓存中,并告知TCP/IP内核。然 后TCP/IP内核就开始工作了,它会将数据包从接收缓存中取出,并逐层解析数据包中的协议首部信息,并最终将数据交给某个应用程序。数据的接收过程与发送过程正好相反,可以概括TCP/IP 的各层协议对数据进行解析的过程。
4.lwIP
在许多嵌入式系统和资源受限的环境中,标准的TCP/IP协议栈由于其庞大的体积和复杂的结构,并不适合直接使用,为了解决这一问题,一种轻量级的TCP/IP协议栈lwIP进而产生。
lwIP协议( Lightweight IP,lwIP)是一种专为嵌入式系统设计的轻量级TCP/IP协议栈,是瑞典计算机科学院 (SICS) 的Adam Dunkels开发的一个小型开源的TCP/IP协议栈。它可以在无操作系统或带操作系统环境下运行,支持多线程或无线程,适用于8位和32位微处理器,同时兼容大端和小端系统。它的设计核心理念在于保持TCP/IP协议的主要功能同时尽量减少对RAM的占用。这意味着,尽管它的体积小巧,但它能够实现完整的TCP/IP通信功能。通常,lwIP只需十几KB的RAM和大约40K的ROM即可运行,使其成为资源受限的嵌入式系统的理想选择。lwIP的灵活性使其既可以在无操作系统环境下工作,也可以与各种操作系统配合使用。这为开发者提供了更大的自由度,可以根据具体的应用需求和硬件配置进行优化。无论是在云台接入、无线网关、远程模块还是工控控制器等场景中,lwIP都能提供强大的网络支持。
1.lwIP特性
LwIP支持ARP协议(以太网地址解析协议)、ICMP协议(控制报文协议,用于网络的调试与维护)、IGMP协议(互联网组管理协议,可以实现多播数据的接收)、UDP协议 (用户数据报协议)、TCP协议 (传输控制协议,包括阻塞控制、RTT 估算、快速恢复和快速转发)、PPP协议(点对点通信协议,支持PPPoE)、DNS(域名解析)、IP协议(包括IPv4、IPv6协议,支持IP分片与重装功能,多网络接口下的数据包转发)、SNMP协议(简单网络管理协议);支持DHCP协议,动态分配IP地址;支持AUTOIP,自动IP地址配置;提供专门的内部回调接口 (Raw API),用于提高应用程序性能;提供可选择的RAW/Callback API、Socket API、NETCONN API (在多线程情况下使用) 。
LwIP在嵌入式中使用有以下优点:
- 资源开销低,即轻量化。LwIP内核有自己的内存管理策略和数据包管理策略,使得内核处理数据包的效率很高。另外,LwIP高度可剪裁,一切不需要的功能都可以通过宏编译选项去掉。LwIP的流畅运行需要40KB的代码ROM和几十KB的 RAM,这让它非常适合用在内存资源受限的嵌入式设备中。
- 支持的协议较为完整。几乎支持TCP/IP中所有常见的协议,这在嵌入式设备中早已够用。
- 实现了一些常见的应用程序:DHCP客户端、DNS客户端、HTTP服务器、MQTT客户端、TFTP服务器、SNTP客户端等等。
- 同时提供了三种编程接口:RAW API、NETCONN API和 Socket API。这三种API的执行效率、易用性、可移植性以及时空间的开销各不相同,用户可以根据实际需要,平衡利弊,选择合适的API进行网络应用程序的开发。
- 高度可移植。其源代码全部用C实现,用户可以很方便地实现跨处理器、跨编译器的移植。
- 开源、免费,用户可以不用承担任何商业风险地使用它。
- 相比于嵌入式领域其它的TCP/IP协议栈,比如uC-TCP/IP、FreeRTOS-TCP等,LwIP的发 展历史要更悠久一些,得到了更多的验证和测试。LwIP被广泛用在嵌入式网络设备中,国内一些物联网公司推出的物联网操作系统,其TCP/IP核心就是LwIP;物联网知名的WiFi模块 ESP8266,其TCP/IP固件,使用的就是LwIP。
2.lwIP开源网址
lwIP官方网址为lwIP - A Lightweight TCP/IP stack,在上面可以下载相应版本的lwIP源码包。
3.lwIP参考书籍
由于lwIP比较复杂, 一些netif结构体、相关底层函数、以及使用方法等等,建议建议参考野火的lwIP开发指南【免费】嵌入式开发:基于野火STM32的LwIP应用开发指南,或者时参考原子的lwIP开发指南,相关文档均放在文末。
在野火的lwIP开发指南书籍上,文档目录如下。
在原子的lwIP开发指南书籍上,文档目录如下。
三、通讯连接示意
采用STM32通讯的以太网通讯由lwIP、MAC内核和PHY层芯片共同实现的,用于实现以太网的物理连接,如下所示。
在上述图中,STM32处理器内置DMA控制器和MAC内核。DMA控制器由lwIP软件库实现,用于实现TCP/IP体系结构中的应用层、传输层和网络层。MAC内核对应于TCP/IP体系结构中的数据链路层。同时,板载驱动芯片PHY层负责实现TCP/IP体系结构的物理层功能。通过结合lwIP、MAC内核和PHY层芯片,我们构建了网络通信的核心骨架。
四、STM32内部ETH
STM32借助ETH内设,通过DMA控制器进行介质访问控制 (MAC)。STM32处理器的ETH内设提供了可配置、灵活的外设,支持MII接口和RMII接口,用以满足各种应用需求,如交换机、网络接口卡等。 以太网遵守以下标准:
- IEEE 802.3-2002,用于以太网 MAC;
- IEEE 1588-2008 标准,用于规定联网时钟同步的精度;
- AMBA 2.0,用于AHB主/从端口;
- RMII 联盟的 RMII 规范。
在进行数据发送时,首先将数据由系统存储器以DMA的方式送至发送FIFO (Tx FIFO) 进行缓冲,再通过MAC内核发送。同样,接收FIFO (Rx FIFO) 则存储通过线路接收的以太网帧,直到这些帧通过DMA传送到系统存储器。官方提供的STM32内置以太网架构如下所示。
从上图描述中可以明确地了解到,框内左边的RX FIFO和TX FIFO都是2KB的物理存储器,它们分别存储网络层递交的以太网数据和接收的以太网数据。以太网DMA是网络层和数据链路层的中间桥梁,是利用存储器到存储器方式传输。
框内右边RMII与MII是MAC内核(数据链路层)与PHY芯片(物理层)的数据交互通道,用来传输以太网数据。MDC和MDIO是MAC内核对PHY芯片的管理和配置,是所需的通信引脚。时钟MDC和数据线 MDIO可以访问任意PHY寄存器,该接口支持访问多达32个PHY。应用程序可以从32个PHY中选择一个PHY,然后从任意PHY包含的32个寄存器中选择一个寄存器,发送控制数据或接收状态信息。
1.内部MAC
MAC内核具有如下特性:
- 支持外部PHY接口实现10/100Mbit/s数据传输速率;
- 通过符合IEEE 802.3的MII接口与外部快速以太网PHY进行通信;
- 支持多种灵活的地址过滤模式;
- 为发送和接收数据包分别返回32位状态;
- 使用MDIO接口配置和管理PHY设备;
-
支持检查IPv4头校验和以及在IPv4或IPv6数据包中封装的TCP、UDP或ICMP校验和;
-
两组FIFO,一个具有可编程阈值功能的2KB发送FIFO和一个具有可配置阈值(默认为64个字节)功能的2KB接收FIFO;
-
在存储转发模式下,可以在接收时过滤所有的错误帧,但不将这些错误帧转发给应用程序;
-
等等一些其他的功能,具体参考stm32f4xx的官方手册,以太网ETH章节。
2.内部DMA
内部DMA控制器具有如下特性;
- AHB从接口中支持所有AHB突发类型;
- 支持对数据缓冲区进行字节对齐寻址;
- 采用描述符架构可以在CPU几乎不干预的情况传输大型数据块;
- 可为发送和接收DMA引擎单独编程突发大小,以充分利用主总线;
- 报告正常工作和传输错误时的综合状态;
- 按帧控制发送/接收完成中断;
- 等等一些其他的功能,具体参考stm32f4xx的官方手册,以太网ETH章节。
五、PHY驱动芯片
PHY驱动芯片是物理层的实现,它负责将数据转换成光电模拟信号以便在网络中进行传输。常用的PHY驱动芯片有国产裕太微YT8512C、和进口SMSC公司LAN8720A 等,本文使用国产裕太微YT8512C型号进行讲解。
根据YT8512C官方手册上的描述,YT8512C是一款低功耗单端口10/100Mbps以太网PHY芯片,它通过两条标准双绞线电缆收发器实现发送和接收数据所需的所有物理层功能。此外,YT8512C还支持标准MII、RMII接口与MAC层进行连接。
YT8512C分为如下功能节点的讲解,相关芯片datasheet放在文末链接上。
这里我们重点讲解一下PHY的功能结构、接口模式、电路设计等部分。
1.功能结构
根据YT8512C芯片手册,官方推荐内部总架构示意图如下所示。LED0和LED1引脚的电平来设置 PHY地址,PHY内部时钟由XTAL和Clock引脚提供。同时,TXP、TXN、RXP和RXN引脚连接到 RJ45(网口),用于数据的发送和接收。
2.接口模式
YT8512C支持MII和RMII两种接口模式,其中RMII有RMII1和RMII2两种选择,选择哪一种使用根据你的使用要求,在结合YT8512C手册来决定,这里我们选择RMII2使用。
PHY芯片YT8512C还有一些其它的电气特性可以了解,如引脚功能、模式配置、寄存器设置等等,具体请参考其手册。
六、硬件电路设计
根据stm32f407手册数据和YT8512C驱动芯片数据,给出其电路原理图设计,如下所示。图中左边信息线连接到处理器IO引脚PC4、PC5、PG13、PG14、PG11、PC1、PA2、PA7、PD3处,图中右边连接到RJ45网线接口处。
七、软件设计
上面六个章节完成了对STM32实现LWIP网络通讯的前提性要求介绍,包含使用到的网络协议、MAC内核、PHY驱动芯片、通讯连接示意图、以及硬件电路原理设计图,为网络通讯软件开发提供了设计指导。
具体的软件设计将在下一章节进行详细的讲解,主要包括对lwIP的下载、移植和使用,或另一种方法通过可视化工具STM32CubeMX完成对lwIP通讯的配置,一键化生成工程代码
总结
下面提供的代码,基于STM32F407ZGT芯片编写,可直接在原子开发板上运行,也可运行在各工程项目上,但需要注意各接口以及相应的引脚应和原子开发板上保持一致。
相应的代码链接:单片机STM32F407-Case程序代码例程-CSDN文库
标签:协议,LWIP,IP,TCP,STM32,PHY,网络通讯,lwIP,以太网 From: https://blog.csdn.net/weixin_47006346/article/details/144913343