lwip移植-基于类rtos&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/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值