STM32H750XBH6的ETH模块的TCP segmentation offload功能分析

TCPsegmentationoffloadTCP\quad segmentation\quad offloadTCPsegmentationoffload功能可以将图1中处于运输层的TCPTCPTCP或UDPUDPUDP协议的一个较大的数据包划分为多个小的数据包来传送,注意这里必须是处于运输层的TCPTCPTCP或UDPUDPUDP协议(但是对于这一块,STM32H750XBH6的用户手册只是重点描述了TCPTCPTCP,UDPUDPUDP只是提了一下,具体支持与否还不知道如图2和图3所示),其它协议的数据包是不行的。该功能只能用于全双工模式。
 
图1.
 
图2.
 
图3.

TCPsegmentationoffloadTCP\quad segmentation\quad offloadTCPsegmentationoffload功能在寄存器中的使能位如图4所示,这个应该是主使能位,图5中的使能位是发送描述符里面的使能位。TCPsegmentationoffloadTCP\quad segmentation\quad offloadTCPsegmentationoffload功能最重要的一个参数是MaximumSegmentSizeMaximum\quad Segment\quad SizeMaximumSegmentSize,如图7和图8所示,那个后写入那个配置就生效。一个图1中处于运输层的TCPTCPTCP或UDPUDPUDP协议数据包主要结构图如图6所示,TCPsegmentationoffloadTCP\quad segmentation\quad offloadTCPsegmentationoffload功能在划分数据包的时候主要是划分payloadpayloadpayload那一部分,划分的单位就是MaximumSegmentSizeMaximum\quad Segment\quad SizeMaximumSegmentSize个字节数据,比如payloadpayloadpayload现在有113字节数据,MaximumSegmentSizeMaximum\quad Segment\quad SizeMaximumSegmentSize配置为70,在划分的时候先取前面的70字节放到一个数据包里面去发送,剩下的不足70字节就放到另一个数据包里面去发送,这里就相当于把一个payloadpayloadpayload有113字节数据的数据包分为两个数据包发送了出去,这里每个数据包的包头(也就是图6中EthernetheaderEthernet\quad headerEthernetheader,IPheaderIP\quad headerIPheader和TCP/UDPheaderTCP/UDP\quad headerTCP/UDPheader这三部分)基本一样只有部分不一样,详细可以参考这三种包头的详细介绍。详细的如图9和图10所示。
 
图4.
 
图5.
 
图6.
 
图7.
 
图8.
 
图9.
 
图10.

和以前普通的数据包发送不一样的是,这里图6中EthernetheaderEthernet\quad headerEthernetheader,IPheaderIP\quad headerIPheader和TCP/UDPheaderTCP/UDP\quad headerTCP/UDPheader这三部分单独放在一块BUFFER,BUFFER地址放在图11中TDES0TDES0TDES0中,字节个数写入TDES2TDES2TDES2中对应区域。payloadpayloadpayload也即是实际的数据放在另一块BUFFER。BUFFER地址放在图11中TDES1TDES1TDES1中,payloadpayloadpayload的字节个数写入TDES3TDES3TDES3中对应区域。
 
图11.

图12是一个有167个字节的TCPTCPTCP数据报,实际的数据有113字节,也就是payload,这里MaximumSegmentSizeMaximum\quad Segment\quad SizeMaximumSegmentSize设置为70,因此这个完整的数据包会被分成两个数据包,第一个数据包的实际数据是70字节,第2个数据包的实际数据是43字节。通过wireshark捕获的截图如图13和图14所示。
 
图12.
 
图13.
 
图14.

相关推荐
tudoSearcher15 小时前
服务器蓝屏了远程连不上?工业级IP KVM的硬件级抢救实战
运维·服务器·tcp/ip
jghhh0115 小时前
STM32 上使用 SPI 总线驱动 OLED 的程序
stm32·单片机·嵌入式硬件
foundbug99916 小时前
STM32 + uIP协议栈实现TCP/UDP功能指南
stm32·tcp/ip·udp
XINVRY-FPGA16 小时前
XC7Z010-2CLG400I Xilinx Zynq-7000 FPGA
arm开发·嵌入式硬件·算法·fpga开发·硬件工程·dsp开发·fpga
WYH28716 小时前
一、驱动基础
linux·嵌入式硬件
XINVRY-FPGA16 小时前
XCZU11EG-2FFVC1156I Xilinx Zynq UltraScale+ MPSoC EG FPGA
图像处理·嵌入式硬件·计算机视觉·fpga开发·硬件工程·dsp开发·fpga
sdm07042718 小时前
TCP--面向字节流
网络·网络协议·tcp/ip
山木嵌入式1 天前
【STM32实战】轻量级任务调度器实现
stm32·单片机·rtos·任务调度器·裸机开发
guygg881 天前
基于霍尔传感器的BLDC控制源码
单片机·嵌入式硬件
ytttr8731 天前
DSP 28335 CAN总线通信程序
开发语言·stm32·单片机