第39章 ETH—Lwip以太网通信—零死角玩转STM32-F429系列

2019-09-19来源: eefocus关键字:ETH  Lwip  以太网通信  STM32-F429系列

互联网技术对人类社会的影响不言而喻。当今大部分电子设备都能以不同的方式接入互联网(Internet),在家庭中PC常见的互联网接入方式是使用路由器(Router)组建小型局域网(LAN),利用互联网专线或者调制调解器(modem)经过电话线网络,连接到互联网服务提供商(ISP),由互联网服务提供商把用户的局域网接入互联网。而企业或学校的局域网规模较大,常使用交换机组成局域网,经过路由以不同的方式接入到互联网中。


39.1 互联网模型

通信至少是两个设备的事,需要相互兼容的硬件和软件支持,我们称之为通信协议。以太网通信在结构比较复杂,国际标准组织将整个以太网通信结构制定了OSI模型,总共分层七个层,分别为应用层、表示层、会话层、传输层、网络层、数据链路层以及物理层,每个层功能不同,通信中各司其职,整个模型包括硬件和软件定义。OSI模型是理想分层,一般的网络系统只是涉及其中几层。


TCP/IP是互联网最基本的协议,是互联网通信使用的网络协议,由网络层的IP协议和传输层的TCP协议组成。TCP/IP只有四个分层,分别为应用层、传输层、网络层以及网络访问层。虽然TCP/IP分层少了,但与OSI模型是不冲突的,它把OSI模型一些层次整合一起的,本质上可以实现相同功能。


实际上,还有一个TCP/IP混合模型,分为五个层,参考图 391,它实际与TCP/IP四层模型是相通的,只是把网络访问层拆成数据链路层和物理层。这种分层方法对我们学习理解更容易。

图 391 TCP/IP混合参考模型


设计网络时,为了降低网络设计的复杂性,对组成网络的硬件、软件进行封装、分层,这些分层即构成了网络体系模型。在两个设备相同层之间的对话、通信约定,构成了层级协议。设备中使用的所有协议加起来统称协议栈。在这个网络模型中,每一层完成不同的任务,都提供接口供上一层访问。而在每层的内部,可以使用不同的方式来实现接口,因而内部的改变不会影响其它层。


在TCP/IP混合参考模型中,数据链路层又被分为LLC层(逻辑链路层)和MAC层(媒体介质访问层)。目前,对于普通的接入网络终端的设备, LLC层和MAC层是软、硬件的分界线。如PC的网卡主要负责实现参考模型中的MAC子层和物理层,在PC的软件系统中则有一套庞大程序实现了LLC层及以上的所有网络层次的协议。


由硬件实现的物理层和MAC子层在不同的网络形式有很大的区别,如以太网和Wi-Fi,这是由物理传输方式决定的。但由软件实现的其它网络层次通常不会有太大区别,在PC上也许能实现完整的功能,一般支持所有协议,而在嵌入式领域则按需要进行裁剪。


39.2 以太网

以太网(Ethernet)是互联网技术的一种,由于它是在组网技术中占的比例最高,很多人直接把以太网理解为互联网。


以太网是指遵守IEEE 802.3标准组成的局域网,由IEEE 802.3标准规定的主要是位于参考模型的物理层(PHY)和数据链路层中的介质访问控制子层(MAC)。在家庭、企业和学校所组建的PC局域网形式一般也是以太网,其标志是使用水晶头网线来连接(当然还有其它形式)。IEEE还有其它局域网标准,如IEEE 802.11是无线局域网,俗称Wi-Fi。IEEE 802.15是个人域网,即蓝牙技术,其中的802.15.4标准则是ZigBee技术。


现阶段,工业控制、环境监测、智能家居的嵌入式设备产生了接入互联网的需求,利用以太网技术,嵌入式设备可以非常容易地接入到现有的计算机网络中。


39.2.1 PHY层

在物理层,由IEEE 802.3标准规定了以太网使用的传输介质、传输速度、数据编码方式和冲突检测机制,物理层一般是通过一个PHY芯片实现其功能的。


1.    传输介质

传输介质包括同轴电缆、双绞线(水晶头网线是一种双绞线)、光纤。根据不同的传输速度和距离要求,基于这三类介质的信号线又衍生出很多不同的种类。最常用的是"五类线"适用于100BASE-T和10BASE-T的网络,它们的网络速率分别为100Mbps和10Mbps。


2.    编码

为了让接收方在没有外部时钟参考的情况也能确定每一位的起始、结束和中间位置,在传输信号时不直接采用二进制编码。在10BASE-T的传输方式中采用曼彻斯特编码,在100BASE-T中则采用4B/5B编码。


曼彻斯特编码把每一个二进制位的周期分为两个间隔,在表示"1"时,以前半个周期为高电平,后半个周期为低电平。表示"0"时则相反,见图 392

图 392 曼彻斯特编码


采用曼彻斯特码在每个位周期都有电压变化,便于同步。但这样的编码方式效率太低,只有50%。


在100BASE-T 采用的4B/5B编码是把待发送数据位流的每4位分为一组,以特定的5位编码来表示,这些特定的5位编码能使数据流有足够多的跳变,达到同步的目的,而且效率也从曼彻斯特编码的50%提高到了80%。


3.    CSMA/CD冲突检测

早期的以太网大多是多个节点连接到同一条网络总线上(总线型网络),存在信道竞争问题,因而每个连接到以太网上的节点都必须具备冲突检测功能。以太网具备CSMA/CD冲突检测机制,如果多个节点同时利用同一条总线发送数据,则会产生冲突,总线上的节点可通过接收到的信号与原始发送的信号的比较检测是否存在冲突,若存在冲突则停止发送数据,随机等待一段时间再重传。


现在大多数局域网组建的时候很少采用总线型网络,大多是一个设备接入到一个独立的路由或交换机接口,组成星型网络,不会产生冲突。但为了兼容,新出的产品还是带有冲突检测机制。


39.2.2 MAC子层

1.    MAC的功能

MAC子层是属于数据链路层的下半部分,它主要负责与物理层进行数据交接,如是否可以发送数据,发送的数据是否正确,对数据流进行控制等。它自动对来自上层的数据包加上一些控制信号,交给物理层。接收方得到正常数据时,自动去除MAC控制信号,把该数据包交给上层。


2.    MAC数据包

IEEE对以太网上传输的数据包格式也进行了统一规定,见图 393。该数据包被称为MAC数据包。

图 393 MAC数据包格式


MAC数据包由前导字段、帧起始定界符、目标地址、源地址、数据包类型、数据域、填充域、校验和域组成。


    前导字段,也称报头,这是一段方波,用于使收发节点的时钟同步。内容为连续7个字节的0x55。字段和帧起始定界符在MAC收到数据包后会自动过滤掉。


    帧起始定界符(SFD):用于区分前导段与数据段的,内容为0xD5。


    MAC地址: MAC地址由48位数字组成,它是网卡的物理地址,在以太网传输的最底层,就是根据MAC地址来收发数据的。部分MAC地址用于广播和多播,在同一个网络里不能有两个相同的MAC地址。PC的网卡在出厂时已经设置好了MAC地址,但也可以通过一些软件来进行修改,在嵌入式的以太网控制器中可由程序进行配置。数据包中的DA是目标地址,SA是源地址。


    数据包类型:本区域可以用来描述本MAC数据包是属于TCP/IP协议层的IP包、ARP包还是SNMP包,也可以用来描述本MAC数据包数据段的长度。如果该值被设置大于0x0600,不用于长度描述,而是用于类型描述功能,表示与以太网帧相关的MAC客户端协议的种类。


    数据段:数据段是MAC包的核心内容,它包含的数据来自MAC的上层。其长度可以从0~1500字节间变化。


    填充域:由于协议要求整个MAC数据包的长度至少为64字节(接收到的数据包如果少于64字节会被认为发生冲突,数据包被自动丢弃),当数据段的字节少于46字节时,在填充域会自动填上无效数据,以使数据包符合长度要求。


    校验和域:MAC数据包的尾部是校验和域,它保存了CRC校验序列,用于检错。


以上是标准的MAC数据包,IEEE 802.3同时还规定了扩展的MAC数据包,它是在标准的MAC数据包的SA和数据包类型之间添加4个字节的QTag前缀字段,用于获取标志的MAC帧。前2个字节固定为0x8100,用于识别QTag前缀的存在;后两个字节内容分别为3个位的用户优先级、1个位的标准格式指示符(CFI)和一个12位的VLAN标识符。


39.3 TCP/IP协议栈

标准TCP/IP协议是用于计算机通信的一组协议,通常称为TCP/IP协议栈,通俗讲就是符合以太网通信要求的代码集合,一般要求它可以实现图 391中每个层对应的协议,比如应用层的HTTP、FTP、DNS、SMTP协议,传输层的TCP、UDP协议、网络层的IP、ICMP协议等等。关于TCP/IP协议详细内容推荐阅读《TCP-IP详解》和《用TCP/IP进行网际互连》理解。


Windows操作系统、UNIX类操作系统都有自己的一套方法来实现TCP/IP通信协议,它们都提供非常完整的TCP/IP协议。对于一般的嵌入式设备,受制于硬件条件没办法支持使用在Window或UNIX类操作系统的运行的TCP/IP协议栈,一般只能使用简化版本的TCP/IP协议栈,目前开源的适合嵌入式的有uIP、TinyTCP、uC/TCP-IP、LwIP等等。其中LwIP是目前在嵌入式网络领域被讨论和使用广泛的协议栈。本章内容其中一个目的就是移植LwIP到开发板上运行。


39.3.1 为什么需要协议栈

物理层主要定义物理介质性质,MA

[1] [2] [3] [4] [5] [6] [7] [8] [9] [10] ..[13]
关键字:ETH  Lwip  以太网通信  STM32-F429系列 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic475013.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:第27章 LTDC/DMA2D—液晶显示—零死角玩转STM32-F429系列
下一篇:第1章-如何使用本书—零死角玩转STM32-F429系列

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

秉火429笔记之十八 ETH--以太网
1. 以太网简介STM32F42x 系列控制器内部集成了一个以太网外设,它实际是一个通过DMA 控制器进行介质访问控制(MAC),它的功能就是实现MAC 层的任务。借助以太网外设,STM32F42x 控制器可以通过ETH 外设按照IEEE 802.3-2002 标准发送和接收MAC 数据包。ETH 内部自带专用的DMA 控制器用于MAC,ETH 支持两个工业标准接口介质独立接口(MII)和简化介质独立接口(RMII)用于与外部PHY 芯片连接。MII 和RMII 接口用于MAC数据包传输,ETH 还集成了站管理接口(SMI)接口专门用于与外部PHY 通信,用于访问PHY 芯片寄存器。物理层定义了以太网使用的传输介质、传输速度
发表于 2019-09-12
秉火429笔记之十八 ETH--以太网
STM32F107VC的ETH以太网外设+DP83848无法发送和接收
1. 必须根据DP83848的自动协商结果配置ETH_MACCR的DM(duplex mode)和FES(fast ethernet speed)位。网线上数据发送线和接收线是分开的。发送用的是白橙(正线)、橙(负线)这对双绞线,而接收用的是白绿(正线)、绿(负线)这对双绞线。当以太网集线器上只插了两根网线时,一定不会产生碰撞,既可以配置为半双工也可以配置为全双工,配置为半双工也就意味着强制不允许发送和接收同时进行。如果集线器上插了三台及以上的电脑,则有可能产生碰撞,此时只能配置为半双工模式。2. 必须在RCC中同时打开ETH的三个RCC时钟,哪怕只想发送数据,也必须打开MACRX的时钟。注意:以太网外设的DMA是专用DMA
发表于 2019-07-25
如何使用STM32CubeMX配置ETH(RMII)
最近,刚接触STM32CubeMX,感觉功能非常强大,特别是对于ETH、USB、FAT等特别方便,不用再像以前那样去找各种移植方法(移植起来既麻烦也耽误时间)。此处,我以自己手头上的一个板子(STM32F207VCT6)为例,记录一下以太网的配置过程,中间也走了一些弯路,希望其他同志今后在配置ETH的时候可以借鉴参考,以节省自己的开发周期。具体配置过程:1、打开STM32CubeMX,并选择好相应的芯片。文中的芯片为STM32F207VCT6,选择后如下图:2、配置RCC时钟、ETH、PA8以及使能LWIP;      由于此处我们的开发板硬件上为RMII方式,因此选择ETH-RMII,若有同志
发表于 2019-07-24
如何使用STM32CubeMX配置ETH(RMII)
STM32开发笔记61: 解决Undefined symbol ethernetif_init (referred from lwip.
单片机型号:STM32F407VGT6在STM32开发笔记60: 在STM32CubeMX中配置LwIP文章的基础上进行分层设计,将与用户设计相关的文件挑出来单独建立一个工程,此工程使用CPP11进行生成,在链接的时候提示错误。挑出的与用户逻辑相关的文件如下图所示:错误如下图所示:ethernetif_init函数出现在ethernetif.c文件中,代码如下。err_t ethernetif_init(struct netif *netif){  LWIP_ASSERT("netif != NULL", (netif != NULL));  #if
发表于 2019-07-15
STM32开发笔记61: 解决Undefined symbol ethernetif_init (referred from lwip.
英特尔用1300万美元投资Untether AI
英特尔投资在其全球峰会上宣布,拿出1.17亿美元(约合人民币7.85亿)投资14家创业公司。今(3) 日有消息传出,英特尔正在向Untether AI 投资 1300万美元,这家创业公司正致力于开发一种用于人工智能的新型芯片,该芯片有望以超高的速度进行神经网络计算。据介绍,Untether AI(加拿大安大略省多伦多市)从事超高效、高性能 AI 芯片的开发。这些芯片将成为下一轮 AI 创新浪潮的基础。Untether AI 发明了一种前所未有的新型芯片架构,打破了数据移动瓶颈,专门用于神经网络推理。这种独特的架构能以千倍于传统架构的速度传输数据,因此性能和效率都极高。该公司由一群科学家、工程师以及经验丰富的企业家共同
发表于 2019-04-09
STM32cube使用LAN8720芯片生成lwip初始代码的一些操作
首先使用cude设置好所有lan8720的引脚定义,包括REST和PHYAD0,下面是需要小改动的部分Cube  PHY address 根据PHYAD0选0,注意初始化引脚PHY_SR 0x001FPHY_SPEED_STATUS 0x0004PHY_DUPLEX_STATUS 0x0010While(1)加入MX_LWIP_Process();函数low_level_init加入LAN8720_RESET();函数 void LAN8720_RESET(void){    HAL_GPIO_WritePin(ETH_PHYAD0_GPIO_Port, ETH_PHYAD0_Pi
发表于 2019-07-24
小广播
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2019 EEWORLD.com.cn, Inc. All rights reserved