搜公众号
推荐 原创 视频 Java开发 开发工具 Python开发 Kotlin开发 Ruby开发 .NET开发 服务器运维 开放平台 架构师 大数据 云计算 人工智能 开发语言 其它开发 iOS开发 前端开发 JavaScript开发 Android开发 PHP开发 数据库
Lambda在线 > 电子技术站 > 千兆以太网UDP协议中数据包数据的提取

千兆以太网UDP协议中数据包数据的提取

电子技术站 2018-09-29
举报


千兆以太网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协议中数据包数据的提取》的版权归原作者「电子技术站」所有,文章言论观点不代表Lambda在线的观点, Lambda在线不承担任何法律责任。如需删除可联系QQ:516101458

文章来源: 阅读原文

相关阅读

关注电子技术站微信公众号

电子技术站微信公众号:gh_cb7d30a4ed57

电子技术站

手机扫描上方二维码即可关注电子技术站微信公众号

电子技术站最新文章

精品公众号随机推荐

举报