当前位置: 首页 > news >正文

lwip移植-基于类rtosw5500

目录

    • 一、背景
    • 二、lwip移植基于w5500(MAC+PHY,数据链路层和物理层)
      • 1.移植需要的相关文件
      • 2、协议栈层级调用
      • 3、w5500关键初始化说明
    • 三、附录

一、背景

1.OSI七层模型

图片来自网络 在这里插入图片描述
lwip协议栈工作在应用层、传输层、网络层;
网卡工作在数据链路层、物理层(集成mac+phy)

2.常用以太网物理层和数据链路层网卡芯片方案

集成型SOCPHYPHY+MACPHY+MAC+硬栈
TM4C1294NCPDTDP83848DM9000W5500
ENC28J60

DP83848 : 物理层(PHY) ,10/100M Base T,适用于主控内含有MAC控制器(数据链路层)通过MII/RMII接口控制网卡芯片,如stm32fxx互联型MCU;
DM9000 : 物理层(PHY)和数据链路层(MAC),10/100M主控没有MAC控制器,以地址总线方式访问芯片;
ENC28J60 : MAC+PHY(10M Base T), SPI接口;
W5500 : 硬件TCP/IP协议栈+MAC+PHY(10/100M Base T),SPI接口;
TM4C1294NCPDT:集成mac和phy部分,外部只需连接网络变压器或集成网络变压器的网口

3.以太网数据帧格式
在这里插入图片描述

字段含义
前同步码用来使接收端的适配器在接收 MAC 帧时能够迅速调整时钟频率,使它和发送端的频率相同。前同步码为 7 个字节,1 和 0 交替
帧前定界符帧的起始符,为 1 个字节。前 6 位 1 和 0 交替,最后的两个连续的 1 表示告诉接收端适配器:“帧信息要来了,准备接收”
目的地址接收帧的网络适配器的物理地址(MAC 地址),为 6 个字节(48 比特)。作用是当网卡接收到一个数据帧时,首先会检查该帧的目的地址,是否与当前适配器的物理地址相同,如果相同,就会进一步处理;如果不同,则直接丢弃
源地址发送帧的网络适配器的物理地址(MAC 地址),为 6 个字节(48 比特)
类型上层协议的类型。由于上层协议众多,所以在处理数据的时候必须设置该字段,标识数据交付哪个协议处理。字段为 0x0800 时,表示将数据交付给 IP 协议字段为 0x0806 时,地址解析协议ARP
数据也称为效载荷,表示交付给上层的数据。以太网帧数据长度最小为 46 字节,最大为 1500 字节。如果不足 46 字节时,会填充到最小长度。最大值也叫最大传输单元(MTU)
帧检验序列 FCS检测该帧是否出现差错,占 4 个字节(32 比特)。发送方计算帧的循环冗余码校验(CRC)值,把这个值写到帧里。接收方计算机重新计算 CRC,与 FCS 字段的值进行比较。如果两个值不相同,则表示传输过程中发生了数据丢失或改变。这时,就需要重新传输这一帧

二、lwip移植基于w5500(MAC+PHY,数据链路层和物理层)

1.移植需要的相关文件

【1】W5500底层驱动文件w5500.c/h,实现对寄存器访问的封装,理解寄存器编址访问规则和帧格式,主要包括通用寄存器组和针对每个套接字的套接字寄存器组,见附件数据手册
在这里插入图片描述

am_socket.c/h,实现对w5500的初始化macraw_init、发送macraw_send、接收操作函数macraw_receive封装
在这里插入图片描述

【2】Lwip底层移植文件ethernetif.c/h,主要实现几个low_level_xxx相关的操作底层以太网帧数据收发的函数和对网卡描述结构struct netif *netif_default初始化ethernetif_init函数

在这里插入图片描述

【3】操作系统模拟层文件,协议栈只是定义了接口头文件/lwip/src/include/sys.h,自己编写文件lwip-contrib/ports/freertos/sys_arch.c实现接口函数,主要实现针对特定操作系统的锁,信号量,邮箱等的封装

【4】配置文件,lwip自带官方推荐配置opt.h文件,自定义修改的配置需要建立配置文件lwipopts.h,主要包括是否支持操作系统、资源分配如内存池,内存堆、IP版本、arp等的配置

2、协议栈层级调用

在这里插入图片描述

3、w5500关键初始化说明

3.1 W5500 MAC RAW模式的操作

目的为不采用硬件协议栈,只支持在socket 0上使用,属于无连接模式,只需设置mac地址、maxraw模式、mac地址过滤即可

3.2可变长和非可变长度

采用可变长度,在spi帧的控制域的op_mode[1:0]进行指定

3.3不支持IP分片

使用硬件协议栈时不能超过1514字节,软协议栈靠协议栈自动实现分片和组包

3.4 接收/发送缓存大小设置

总和不超过16Kbytes,单个可设置为16K,且仅能使用一个socket

3.5 发送和接收

发送:初始化设置发送缓冲区长度,操作发送写指针寄存器
接收:初始化设置接收缓冲区长度,操作接收长度寄存器,操作接收读指针进行读取

三、附录

1.w5500数据手册: https://www.iwiznet.cn/products/network-chip/w5500/

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 实例:如何统计当前主机的连接状态和连接数
  • 实习项目|苍穹外卖|day8
  • 【机器学习】和【人工智能】在物理学领域的应用以及代码案例分析
  • SpringMVC使用:类型转换数据格式化数据验证
  • Linux 路径写法,目录相关命令及文件管理命令
  • 软件工程知识点总结(1):软件工程概述
  • Rust : 从事量化的生态现状与前景
  • 小程序多个set-cookie无法处理
  • C#发送正文带图片带附件的邮件
  • webgl-插值渲染原理理解
  • YC教父的创始人模式VS职业经理人模式:AI时代的独立开发者崛起
  • 4-1.Android Camera 之 CameraInfo 编码模板(前后置摄像头理解、摄像头图像的自然方向理解)
  • SpringBoot和Mybatis框架怎么防止SQL注入
  • Hystrix-熔断原理分析
  • [论文笔记]Dimensionality Reduction by Learning an Invariant Mapping
  • 【跃迁之路】【463天】刻意练习系列222(2018.05.14)
  • Apache的基本使用
  • CentOS 7 防火墙操作
  • Linux链接文件
  • OSS Web直传 (文件图片)
  • python3 使用 asyncio 代替线程
  • TiDB 源码阅读系列文章(十)Chunk 和执行框架简介
  • UEditor初始化失败(实例已存在,但视图未渲染出来,单页化)
  • Webpack4 学习笔记 - 01:webpack的安装和简单配置
  • 当SetTimeout遇到了字符串
  • 工作中总结前端开发流程--vue项目
  • 算法系列——算法入门之递归分而治之思想的实现
  • 智能网联汽车信息安全
  • 积累各种好的链接
  • ​中南建设2022年半年报“韧”字当头,经营性现金流持续为正​
  • ​字​节​一​面​
  • # Python csv、xlsx、json、二进制(MP3) 文件读写基本使用
  • # Spring Cloud Alibaba Nacos_配置中心与服务发现(四)
  • (C语言)字符分类函数
  • (Java入门)学生管理系统
  • (vue)el-tabs选中最后一项后更新数据后无法展开
  • (附源码)springboot家庭装修管理系统 毕业设计 613205
  • (附源码)springboot社区居家养老互助服务管理平台 毕业设计 062027
  • (附源码)计算机毕业设计SSM疫情下的学生出入管理系统
  • (三十五)大数据实战——Superset可视化平台搭建
  • (原創) X61用戶,小心你的上蓋!! (NB) (ThinkPad) (X61)
  • (转)shell中括号的特殊用法 linux if多条件判断
  • (转)为C# Windows服务添加安装程序
  • (转载)微软数据挖掘算法:Microsoft 时序算法(5)
  • .net core IResultFilter 的 OnResultExecuted和OnResultExecuting的区别
  • .net dataexcel 脚本公式 函数源码
  • .NET MVC之AOP
  • .NET/C# 中设置当发生某个特定异常时进入断点(不借助 Visual Studio 的纯代码实现)
  • .NET大文件上传知识整理
  • .NET的数据绑定
  • .NET企业级应用架构设计系列之应用服务器
  • .net通过类组装数据转换为json并且传递给对方接口
  • .NET中的Event与Delegates,从Publisher到Subscriber的衔接!
  • .net中的Queue和Stack
  • .pyc文件是什么?