千兆以太网UDP协议中数据包数据的提取
Posted 电子技术站
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了千兆以太网UDP协议中数据包数据的提取相关的知识,希望对你有一定的参考价值。
千兆以太网UDP协议帧结构如下图所示:
帧头:7个55、一个d5,共有8bit、
源MAC就是电脑了。
Type IP H’ 0800:固定的ip协议0800.
20字节的IP首部:
8字节的UDP首部:
字节序号 |
Byte 数 |
值 |
含义 |
|
0-6 |
7 |
‘H55 |
前导码 |
帧头 8byte |
7 |
1 |
‘HD5 |
界定符 |
|
8-13 |
6 |
‘Hff_ff_ff_ff_ff_ff |
目的MAC |
E II格式 14byte |
14-19 |
6 |
‘HA8_BB_C8_07_D9_9F |
源MAC |
|
20 |
1 |
‘H08 |
Type IP H’ 0800 |
|
21 |
1 |
‘H00 |
||
22 |
1 |
‘H45 |
版本/IP头长度20byte |
IP首部 20byte |
23 |
1 |
‘H00 |
未知TOS |
|
24-25 |
2 |
‘H041c |
IP首部+udp首部+数据长度total LEN 20+8+1024=1052 0x41c |
|
26-27 |
2 |
‘H0000 |
每发一数据包自曾一标志 |
|
28-29 |
2 |
‘H0000 |
FLAGS/offset |
|
30 |
1 |
‘H80 |
通过最多路由级数TTL |
|
31 |
1 |
‘H11 |
UDP协议 |
|
32-33 |
2 |
00 |
头部检测计算 |
|
34-37 |
4 |
‘D192_168_0_1 |
||
38-41 |
4 |
‘Hff_ff_ff_ff |
||
42-43 |
2 |
‘H04_D2=’D1234 |
Port 源 |
UDP首部8byte |
44-45 |
2 |
‘H00_7B=’D123 |
Port 目的 |
|
46-47 |
2 |
‘H408 |
UDP头+数据长度 8+1024=1032 0x408 |
|
48-49 |
2 |
00 |
头部检测计算 |
|
50-1073 |
1PKG |
数据data |
1PKG |
|
1074-1077 |
4 |
CRC校验位 |
4byte |
RGMII 图像通信协议
在千兆以太网发送图像数据之前,他会先发一个头包数据,这个头包包含的信息如下:
字节号 |
别名 |
长度 |
值 |
描述 |
0~6 |
FRE |
7 |
0xAA |
包头用于同步区别包 |
7 |
PR |
1 |
0xFA |
帧标示标志着头包 |
8 |
Width[15:8] |
1 |
0x00 |
图像宽度高字节-1 |
9 |
Width[7:0] |
1 |
0x00 |
图像宽度低字节-1 |
10 |
Height[15:8] |
1 |
0x00 |
图像高度高字节-1 |
11 |
Height[7:0] |
1 |
0x00 |
图像高度高字节-1 |
12 |
Img_type |
1 |
0x00 |
0x00=RGB图像3字节一个像素顺序是RGB 0x01=GRAY图像1字节一个像素 0x02=RGBH图像4字节一个像素 参考注: |
13~253 |
保留数据 |
241 |
0x00 |
0x00保留数据 |
254 |
Check_sum[15:8] |
1 |
02 |
Check_sum[15:0]=sum(byte[8:253]) |
255 |
Check_sum[7:0] |
1 |
03 |
|
数据头包是指在发送第一行图像数据前发送的帧头数据,标志着下一包图像数据即将到来。
当数据头包发送完成之后,就发送图像RGB包。在我们每一包数据发送的时候,前面UDP协议的前50字节都会发送。这是固定的,比如,头包数据是要填充到UDP协议的数据data部分的,前面的50字节包含了帧头、IP首部、UDP首部等的数据。头包发送完之后,开始发送RGB图像包,发送图像包之前也要先发送50字节的帧头、IP首部、UDP首部等的数据。之后RGB图像再填充到数据data.
如下就是发送的RGB 图像数据包格式。
字节号 |
别名 |
长度 |
值 |
描述 |
0~6 |
FRE |
7 |
0xAA |
包头用于同步区别包 |
7 |
PR |
1 |
0xF5or0xF6 |
帧标示0xF5标志是行包除了最后一行,0Xf6标志一帧图像的最后一行数据。 |
8 |
Row_Num[15:8] |
1 |
0x00 |
图像行数高字节 |
9 |
Row_Num [7:0] |
1 |
0x00 |
图像行数低字节 |
10~end |
图像数据 |
1 |
图像数据参考注释 |
1、图像头包数据信息的提取
由于我们在跨时钟域的时候就已经把帧头的7个55和1个d5去掉了,那么传进来的数据包中包含的信息就从EII格式14byte开始了。
根据跨时钟模块输出的数据接口,我们可以画出如下时序图:
Dout_o:RAM中读出来的数据
Dout_en_0:读数据对应的数据有效
Width_en:图像RGB宽度信号使能,
Height_en:图像RGB高度信号使能,当检测到Rd_cnt=52并且Width_en=1就拉高,检测到54的时候拉低。
Width_data:宽度数据,用移位拼接的方法拼接
Height_data: 高度数据,用移位拼接的方法拼接
Rlst:门限值的大小,用一个乘法器将Width_data* Height_data乘起来,作为DDR3的读写门限值。
2、图像头包数据发送完成之后就发送图像数据包。
一次发送一行图像数据。
如果RGB图像一行超过400pixel(像素)需要把一行像素分包发送,由于每个UDP包不能超过1.5k长度。限定最大发送图像宽度为1200pixel。
小于等于400pixel发送一个udp包
大于400小于等于800pixel分两个udp包发送
大于800小于等于1200pixel分三个udp包发送
由于我们发送的是1024*768的图像,1024>800,所以一行像素我们要分三个UDP包来发送,每个UDP包大小分别是400/400/224,总共发送3*768个UDP图像包,每个包发送都要先发送前面的50字节。
400个像素点=1200个字节,一个像素点由RGB组成每个RGB分别是8bit。
接下来就提取图像包中的RGB图像信息。
Start_image_en:当7个aa,一个f5或者f6就把他拉高,行号过完之后拉低,标志图像信息的到来。
Image_en:RGB图像信息对应的使能,注意4个校验位不要包含进来。Latch_max-3的时候拉低。
Rgb_data:图像信息
Rgb_den:图像数据有效信号
当图像数据提取出来后,就把图像信息传给DDR3,同时还要传一个DDR3的读写门限值。把8bit数据传给DDR3拼接为128bit数据
以上是关于千兆以太网UDP协议中数据包数据的提取的主要内容,如果未能解决你的问题,请参考以下文章