本章,我们将向大家介绍战舰STM32F开发板的网口及其使用。本章,我们将使用ALIENTEK战舰STM32FV3开发板自带的网口和LWIP实现:TCP服务器、TCP客服端、UDP以及WEB服务器等四个功能。本章分为如下几个部分:
-55.1DM、TCP/IP和LWIP简介
-55.2硬件设计
-55.3软件设计
-55.4下载验证
55.1DM、TCP/IP和LWIP简介
本章,我们需要用到DM以太网芯片和LWIPTCP/IP协议栈。接下来分别介绍这两个部分。
55.1.1DM简介
DM是一款完全集成的、性价比高、引脚数少、带有通用处理器接口的单芯片快速以太网控制器。一个10/MPHY和4K双字的SRAM,它是出于低功耗和高性能目的设计的,其IO端口支持3.3V与5V电压。
DM为适应各种处理器提供了8位、16位数据接口访问内部存储器。DM理协议层接口完全支持使用10Mbps下3类、4类、5类非屏蔽双绞线和Mbps下5类非屏蔽双绞线,这是完全遵照IEEE.3u标准。它的自动协商功能将自动完成DM配置以使其发挥出最佳性能,它还支持IEEE.3x全双工流量控制,DM的特性如下:
支持处理器接口:I/O口的字节或字命令对内部存储器进行读写操作。
集成自适应(AUTO-MDIX)10/M收发器。
半双工模式流量控制的背压模式。
IEEE.3x全双工模式的流量控制。
支持唤醒帧,链路状态改变和远程唤醒。
内置16K字节SRAM。
内置3.3V至2.5V的调节器。
支持IP/TCP/UDP的校验和生成以及校验支持MAC接口。
支持自动加载EEPROM里面生产商ID和产品ID。
可选EEPROM配置。
超低功耗模式
A.功率降低模式(电缆侦测)
B.掉电模式
C.可选择1:1或1.25:1变压比例降低额外功率
兼容3.3V和5.0V输入输出电压。
DM功能框图如图55.1.1.1所示。
图55.1.1.1DM功能框图DM有多种型号,有引脚和48引脚的,ALIENTEK战舰STM32FV3开发板选择的是48引脚的DM,型号为DMCEP。本教程讲解的有关DM的内容都是针对48引脚的,如果有使用引脚DM的朋友请自行查阅相关芯片的数据手册。
1、DM中断引脚电平设置
DM的34(INT)引脚为中断输出引脚,默认情况下该引脚高电平有效。可以通过设置DM的20(EECK)引脚来改变INT的有效电平,当EECK拉高以后,INT低电平有效,否则的话INT是高电平有效的。开发板上R66电阻为EECK的上拉电阻,因此,战舰STM32FV3开发板上DM的INT引脚是低电平有效的,这点一定要注意到!
2、DM数据位宽设置
前面我们提了一下DM支持8位和16位两种数据位宽,可以通过DM的21(EECS)引脚设置其数据位宽,当EECS上拉的时候DM选择8位数据位宽,否则的话选择16位数据位宽。开发板上的R65电阻为EECS的上拉电阻,但是此电阻并未焊接!因此,战舰STM32FV3开发板上的DM芯片的数据位宽为16位。
3、DM直接内存访问控制(DMAC)
DM支持DMA方式以简化对内部存储器的访问。在我们编程写好内部存储器地址后,就可以用一个读/写命令伪指令把当前数据加载到内部数据缓冲区,这样,内部存储器指定位置就可以被读/写命令寄存器访问。存储器地址将会自动增加,增加的大小与当前总线操作模式相同(8-bit或16-bit),接着下一个地址数据将会自动加载到内部数据缓冲区。
内部存储器空间大小为16K字节。前3K字节单元用作发送包的缓冲区,其他13K字节用作接收包的缓冲区。所以在写存储器操作时,如果地址越界(即超出3K空间),在IMR寄存器bit7置位的情况下,地址指针将会返回到存储器0地址处。同样,在读存储器操作时,如果地址越界(即超出16K空间),在IMR寄存器bit7置位的情况下,地址指针将会返回到存储器0x0C00地址处。
4、DM数据包发送
DM有两个发送数据包:index1和index2,同时存储在TXSRAM中。发送控制寄存器(02h)控制循环冗余校验码(CRC)和填充(pads)的插入,其状态分别记录在发送状态寄存器I(03H)和发送状态寄存器II(04H)中。
发送器的起始地址为0x00H,在软件或硬件复位后,默认的数据发送包为index1。首先,将数据写入TXSRAM中,然后,在发送数据包长度寄存器中把数据字节数写入字节计数寄存器。置位发送控制寄存器(02H)的bit0位,则DM开始发送index1数据包。在index1数据包发送结束之前,数据发送包index2被移入TXSRAM中。在index1数据包发送结束后,将index2数据字节数写入字节计数寄存器中,然后,置位发送控制寄存器(02H)的bit0位,则index2数据包开始发送。以此类推,后面的数据包都以此方式进行发送。
5、DM数据包接收
RXSRAM是一个环形数据结构。在软件或硬件复位后,RXSRAM的起始地址为0X0C00。每个接收数据包都包含有CRC校验域,数据域,以及紧跟其后的4字节包头域。4字节包头格式为:01h、状态、BYTE_COUNT低、BYTE_COUNT高。请注意:每个接收包的起始地址处在适当的地址边界,这取决于当前总线操作模式(8bit或者16bit)。
最后,我们来看看战舰STM32FV3开发板上面,DM网络部分与STM32FZET6的连接原理图,如图55.1.1.2所示。
图55.1.1.2DM网络部分与STM32连接原理图
从上可以看出,DM是通过16位数据总线,挂在STM32的FSMC上面,DM的片选由FSMC_NE2控制,CMD则由FSMC_A7控制。这个连接方法,类似于TFTLCD显示实验,总共用到了22个IO口。
注意:DM_RST和RS_RE共用,所以RS和DM,不可以同时使用。另外,DM_INT和NRF_IRQ共用,所以DM和NRF也不可以同时使用。在开发板使用的时候,请大家注意这两个地方。
55.1.2TCP/IP协议简介
TCP/IP中文名为传输控制协议/因特网互联协议,又名网络通讯协议,是Internet最基本的协议、Internet国际互联网络的基础,由网络层的IP协议和传输层的TCP协议组成。TCP/IP定义了电子设备如何连入因特网,以及数据如何在它们之间传输的标准。协议采用了4层的层级结构,每一层都呼叫它的下一层所提供的协议来完成自己的需求。通俗而言:TCP负责发现传输的问题,一有问题就发出信号,要求重新传输,直到所有数据安全正确地传输到目的地。而IP是给因特网的每一台联网设备规定一个地址。
TCP/IP协议不是TCP和IP这两个协议的合称,而是指因特网整个TCP/IP协议族。从协议分层模型方面来讲,TCP/IP由四个层次组成:网络接口层、网络层、传输层、应用层。OSI是传统的开放式系统互连参考模型,该模型将TCP/IP分为七层:物理层、数据链路层(网络接口层)、网络层(网络层)、传输层(传输层)、会话层、表示层和应用层(应用层)。TCP/IP模型与OSI模型对比如表55.1.2.1所示。
表55.1.2.1TCP/IP模型与OSI模型对在我们的LWIP实验中DM相当于PHY+MAC层,而LWIP提供的就是网络层、传输层的功能,应用层是需要用户自己根据自己想要的功能去实现的。
55.1.3LWIP简介
LWIP是瑞典计算机科学院(SICS)的AdamDunkels等开发的一个小型开源的TCP/IP协议栈。LWIP是轻量级IP协议,有无操作系统的支持都可以运行,LWIP实现的重点是在保持TCP协议主要功能的基础上减少对RAM的占用,它只需十几KB的RAM和40K左右的ROM就可以运行,这使LWIP协议栈适合在低端的嵌入式系统中使用。目前LWIP的最新版本是1.4.1。本教程采用的就是1.4.1版本的LWIP
关于LWIP的详细信息大家可以去
这个网站去查阅。LWIP的主要特性如下:
ARP协议,以太网地址解析协议;
IP协议,包括IPv4和IPv6,支持IP分片与重装,支持多网络接口下数据转发;
ICMP协议,用于网络调试与维护;
IGMP协议,用于网络组管理,可以实现多播数据的接收;
UDP协议,用户数据报协议;
TCP协议,支持TCP拥塞控制,RTT估计,快速恢复与重传等;
提供三种用户编程接口方式:raw/callbackAPI、sequentialAPI、BSD-stylesocketAPI;
DNS,域名解析;
SNMP,简单网络管理协议;
DHCP,动态主机配置协议;
AUTOIP,IP地址自动配置;
PPP,点对点协议,支持PPPoE
我们从LWIP