
系列文章目录
GIGE 学习笔记
GIGE 协议摘录 ------ 设备发现(一)
GIGE 协议摘录 ------ GVCP 协议(二)
GIGE 协议摘录 ------ GVSP 协议(三)
GIGE 协议摘录 ------ 引导寄存器(四)
GIGE 协议 2.0 中文版
文章目录
- 系列文章目录
- [GVSP 摘要](#GVSP 摘要)
- [UDP 可靠性和错误恢复](#UDP 可靠性和错误恢复)
- 数据块
- 有效载荷类型
-
- [1、扩展块模式(Extended Chunk Mode)](#1、扩展块模式(Extended Chunk Mode))
- [2、图像有效载荷类型(Image Payload Type)](#2、图像有效载荷类型(Image Payload Type))
- [3、原始数据有效载荷类型(Raw Data Payload Type)](#3、原始数据有效载荷类型(Raw Data Payload Type))
- [4、文件有效载荷类型(File Payload Type)](#4、文件有效载荷类型(File Payload Type))
- [5、块数据有效载荷类型(Chunk Data Payload Type)](#5、块数据有效载荷类型(Chunk Data Payload Type))
- [6、扩展块数据有效载荷类型(已弃用)(Extended Chunk Data Payload Type (deprecated))](#6、扩展块数据有效载荷类型(已弃用)(Extended Chunk Data Payload Type (deprecated)))
- [7、JPEG有效载荷类型(JPEG Payload Type)](#7、JPEG有效载荷类型(JPEG Payload Type))
- [8、JPEG 2000有效载荷类型(JPEG 2000 Payload Type)](#8、JPEG 2000有效载荷类型(JPEG 2000 Payload Type))
- [9、H.264有效载荷类型(H.264 Payload Type)](#9、H.264有效载荷类型(H.264 Payload Type))
- [10、多区域图像有效载荷类型(Multi-zone Image Payload Type)](#10、多区域图像有效载荷类型(Multi-zone Image Payload Type))
- [11、设备特定有效载荷类型(Device-specific Payload Type)](#11、设备特定有效载荷类型(Device-specific Payload Type))
- [像素布局(Pixel Layouts)](#像素布局(Pixel Layouts))
-
- [1、像素对齐(Pixel Alignment)](#1、像素对齐(Pixel Alignment))
- [2、线和图像边界(Line and Image Boundaries)](#2、线和图像边界(Line and Image Boundaries))
- [3、像素格式(Pixel Formats)](#3、像素格式(Pixel Formats))
-
- [3.1 Mono1p](#3.1 Mono1p)
- [3.2 Mono2p](#3.2 Mono2p)
- [3.3 Mono4p](#3.3 Mono4p)
- [3.4 Mono8](#3.4 Mono8)
- [3.5 Mono8s](#3.5 Mono8s)
- [3.6 Mono10](#3.6 Mono10)
- [3.7 Mono10Packed](#3.7 Mono10Packed)
- [3.8 Mono12](#3.8 Mono12)
- [3.9 Mono12Packed](#3.9 Mono12Packed)
- [3.10 Mono14](#3.10 Mono14)
- [3.11 Mono16](#3.11 Mono16)
- [3.12 BayerGR8](#3.12 BayerGR8)
- [3.13 BayerRG8](#3.13 BayerRG8)
- [3.69 RGB16_Planar](#3.69 RGB16_Planar)
- [像素格式定义(Pixel Format Defines)](#像素格式定义(Pixel Format Defines))
-
- [1、单个缓冲区格式定义(Mono buffer format defines)](#1、单个缓冲区格式定义(Mono buffer format defines))
- [2、Bayer buffer format defines](#2、Bayer buffer format defines)
- [3、RGB打包的缓冲区格式定义(RGB Packed buffer format defines)](#3、RGB打包的缓冲区格式定义(RGB Packed buffer format defines))
- [4、YUV和YCbCr打包缓冲区格式定义(YUV and YCbCr Packed buffer format defines)](#4、YUV和YCbCr打包缓冲区格式定义(YUV and YCbCr Packed buffer format defines))
- [5、RGB平面缓冲区格式定义(RGB Planar buffer format defines)](#5、RGB平面缓冲区格式定义(RGB Planar buffer format defines))
GVSP 摘要
GVSP 是一种依赖于 UDP 传输层协议的应用层协议。它允许 GVSP 接收器从 GVSP 发射机接收图像数据、图像信息或其他信息。
GVSP 数据包总是从 GVSP 发射器传输到接收器。
该规范上的当前版本使用 UDP IPv4 作为传输层协议。由于 UDP 是不可靠的,GVSP 提供了机制来保证数据包传输的可靠性(通过 GVCP),并确保最小的流量控制。
UDP 可靠性和错误恢复

数据块
该数据块被划分为多个元素,以向 GVSP 接收机提供解码该块所需的信息。
对于图像,可以通过两种不同的方式提供来自同一帧的多个 ROIs :
-
在单个流信道上 ------ 当它们在同一流信道上传输时,每个 ROI 必须以不同的块 ID 进行传输。在这种情况下,必须使用相同的时间戳来促进将 ROI 与给定的暴露口相匹配,如 [CR-253st] 所指定的那样。设备可以选择在同一流通道上发送所有 ROI ,以简化传输(只配置一个流通道)。
-
在不同的流通道上 ------ 当它们在不同的流通道上传输时(每个流通道有一个 ROI),那么 ROI 应该使用相同的块 ID 值,以方便匹配。在这种情况下,时间戳仍然可以用于方便将 ROI 与给定的曝光相匹配。设备可能选择使用不同的流通道,允许不同的 ROI 发送到不同的目的地。
数据块传输模式
数据块放入包中,允许在流通道上传输。支持两种传输模式:标准和全传输模式。
- 标准传输模式
在标准传输模式下,数据开始标记包、数据有效负载包和数据结束标记包以不同的数据包分开。这是自 GigE 愿景成立以来所支持的标准方法。开始标记包和结束标记包划定了数据的有效载荷,并在连续的数据块之间提供清晰的分离点。
在标准传输模式下存在三种不同的数据包类型:- 数据开始标记包
- 数据有效载荷包
- 数据结束标记包
下图说明了在标准传输模式下的数据包的顺序。
- 全传输模式
可选地,如果数据开始标记、数据有效载荷和数据结束标记可以装入单个数据包,那么 GVSP 发射器可以配置为重新分组它们。这是一种全能的传输模式,可用于减少拥有单独的数据开始标记和数据结束标记包的开销。应用程序必须验证是否支持此传输模式(SCCx 的第 29 位)并启用它(SCCFGx 的第 29 位),否则将使用标准传输模式。

数据块数据包头
所有的 GVSP 数据包共享相同的基本报头。GVSP 协议报头不包括长度字段: GVSP 接收器使用 UDP 长度信息来确定数据包的大小。

标准传输模式数据包
为标准传输模式定义了以下数据包。
数据开始标记数据包
- 数据开始标记包必须是块的第一个包。
- 数据引线包必须以单独的包发送,packet_id/packet_id32设置为0。它必须适合一个最多576字节的包(包括IP、UDP和GVSP头)。
- 数据开始标记包必须遵循图24-4的布局。

全传输模式包

块数据
块是经过标记的数据块,可以在数据块中分组以发送元数据。数据块的例子是:
- 图像
- 从图像中提取数据
- AOI / 像素格式
- I/O 引脚的状态
- 曝光数
有效载荷类型
为了有效地传输信息,GVSP 定义了可以从 GVSP 发射机中流式传输的各种有效载荷类型。下表中列出了这些有效负载类型。

1、扩展块模式(Extended Chunk Mode)
2、图像有效载荷类型(Image Payload Type)
此有效载荷类型用于传输未压缩的图像。
如果支持图像有效负载,则使用图像有效负载类型的流必须以光栅扫描格式在每个数据有效负载数据包中放置数据。
这意味着图像在从左到右传输,然后从上到下传输之前,要在GVSP发射器存储器中重建。这是典型的单触头传感器。
图像数据开始标记包

图像数据有效负载包

图像数据结束标记包

图像全输入数据包(Image All-in Packet)
3、原始数据有效载荷类型(Raw Data Payload Type)
4、文件有效载荷类型(File Payload Type)
5、块数据有效载荷类型(Chunk Data Payload Type)
6、扩展块数据有效载荷类型(已弃用)(Extended Chunk Data Payload Type (deprecated))
7、JPEG有效载荷类型(JPEG Payload Type)
8、JPEG 2000有效载荷类型(JPEG 2000 Payload Type)
9、H.264有效载荷类型(H.264 Payload Type)
10、多区域图像有效载荷类型(Multi-zone Image Payload Type)
11、设备特定有效载荷类型(Device-specific Payload Type)
自定义

像素布局(Pixel Layouts)
本节描述了 GigE Vision 所支持的各种像素和图像布局。在 GigE 视觉 2.0 版本中,这些布局是基于 AIA 像素格式命名约定的。
1、像素对齐(Pixel Alignment)
为了最小化GVSP接收端的像素处理时间,在有效载荷数据包中使用多字节的像素数据在默认情况下必须是小端化的。
GVSP 发射机可以实现一个转换器,将像素从小端转换为大端。当受支持时,可以使用 SCPSx 引导寄存器(pixel_endianess 字段)激活此转换器。SCCx 寄存器的 big_and_little_endian_supported 字段表示是否支持此转换器。
在下面的图中,字节 0 首先在数据线上发送,然后是字节 1 ,以此类推。
2、线和图像边界(Line and Image Boundaries)
GigE 视觉使用在像素格式命名约定中定义的图像填充。图像填充要求在直线的末尾不插入人工填充。
因此,对于某些分组和打包的像素格式,来自不同行的像素可能被组合在相同的字节中。例如,想象一个奇宽的图像(例如:宽度= 641像素)。如果像素成对组合(由于填充),那么第一行的最后一个像素将与第二行的第一个像素组合,如下所示。

另一个例子是当使用 Mono1p 时,图像宽度不是 8 像素的倍数。使用这种像素格式填充一个字节需要 8 个像素,因此一行的最后一个像素可能不会与字节边界对齐。
3、像素格式(Pixel Formats)
本节说明了GVSP本地支持的各种像素格式。这些像素格式基于像素格式命名约定文档,其中每个像素格式由5个特征定义:
- 组件和位置(Components and Location)
- #位(# bits)
- 标志指示灯(可选)(Sign indicator)
- 包装方式(可选)(Packing Style)
- 特定于接口的(可选的)(Interface-specific)
3.1 Mono1p
3.2 Mono2p
3.3 Mono4p
3.4 Mono8
3.5 Mono8s
3.6 Mono10
3.7 Mono10Packed
3.8 Mono12
3.9 Mono12Packed
3.10 Mono14
3.11 Mono16
3.12 BayerGR8
3.13 BayerRG8
3.69 RGB16_Planar
像素格式定义(Pixel Format Defines)
下面为 GVSP 支持的各种像素格式提供了 #define 定义。每个像素格式都用一个 32 位的值来表示。上面的 8 位表示该颜色。第二个上 8 位表示一个像素所占用的位数(包括任何填充)。这可用于快速计算使用此像素格式存储图像所需的内存量。
cpp
//===================================================
// PIXEL FORMATS
//===================================================
// Indicate if pixel is monochrome or RGB
#define GVSP_PIX_MONO 0x01000000
#define GVSP_PIX_RGB 0x02000000 // deprecated in version 1.1
#define GVSP_PIX_COLOR 0x02000000
#define GVSP_PIX_CUSTOM 0x80000000
#define GVSP_PIX_COLOR_MASK 0xFF000000
// Indicate effective number of bits occupied by the pixel (including padding).
// This can be used to compute amount of memory required to store an image.
#define GVSP_PIX_OCCUPY1BIT 0x00010000
#define GVSP_PIX_OCCUPY2BIT 0x00020000
#define GVSP_PIX_OCCUPY4BIT 0x00040000
#define GVSP_PIX_OCCUPY8BIT 0x00080000
#define GVSP_PIX_OCCUPY12BIT 0x000C0000
#define GVSP_PIX_OCCUPY16BIT 0x00100000
#define GVSP_PIX_OCCUPY24BIT 0x00180000
#define GVSP_PIX_OCCUPY32BIT 0x00200000
#define GVSP_PIX_OCCUPY36BIT 0x00240000
#define GVSP_PIX_OCCUPY48BIT 0x00300000
#define GVSP_PIX_EFFECTIVE_PIXEL_SIZE_MASK 0x00FF0000
#define GVSP_PIX_EFFECTIVE_PIXEL_SIZE_SHIFT 16
// Pixel ID: lower 16-bit of the pixel formats
#define GVSP_PIX_ID_MASK 0x0000FFFF
#define GVSP_PIX_COUNT 0x46 // next Pixel ID available
1、单个缓冲区格式定义(Mono buffer format defines)
cpp
#define GVSP_PIX_MONO1P (GVSP_PIX_MONO | GVSP_PIX_OCCUPY1BIT | 0x0037)
#define GVSP_PIX_MONO2P (GVSP_PIX_MONO | GVSP_PIX_OCCUPY2BIT | 0x0038)
#define GVSP_PIX_MONO4P (GVSP_PIX_MONO | GVSP_PIX_OCCUPY4BIT | 0x0039)
#define GVSP_PIX_MONO8 (GVSP_PIX_MONO | GVSP_PIX_OCCUPY8BIT | 0x0001)
#define GVSP_PIX_MONO8S (GVSP_PIX_MONO | GVSP_PIX_OCCUPY8BIT | 0x0002)
#define GVSP_PIX_MONO10 (GVSP_PIX_MONO | GVSP_PIX_OCCUPY16BIT | 0x0003)
#define GVSP_PIX_MONO10_PACKED (GVSP_PIX_MONO | GVSP_PIX_OCCUPY12BIT | 0x0004)
#define GVSP_PIX_MONO12 (GVSP_PIX_MONO | GVSP_PIX_OCCUPY16BIT | 0x0005)
#define GVSP_PIX_MONO12_PACKED (GVSP_PIX_MONO | GVSP_PIX_OCCUPY12BIT | 0x0006)
#define GVSP_PIX_MONO14 (GVSP_PIX_MONO | GVSP_PIX_OCCUPY16BIT | 0x0025)
#define GVSP_PIX_MONO16 (GVSP_PIX_MONO | GVSP_PIX_OCCUPY16BIT | 0x0007)
2、Bayer buffer format defines
cpp
#define GVSP_PIX_BAYGR8 (GVSP_PIX_MONO | GVSP_PIX_OCCUPY8BIT | 0x0008)
#define GVSP_PIX_BAYRG8 (GVSP_PIX_MONO | GVSP_PIX_OCCUPY8BIT | 0x0009)
#define GVSP_PIX_BAYGB8 (GVSP_PIX_MONO | GVSP_PIX_OCCUPY8BIT | 0x000A)
#define GVSP_PIX_BAYBG8 (GVSP_PIX_MONO | GVSP_PIX_OCCUPY8BIT | 0x000B)
#define GVSP_PIX_BAYGR10 (GVSP_PIX_MONO | GVSP_PIX_OCCUPY16BIT | 0x000C)
#define GVSP_PIX_BAYRG10 (GVSP_PIX_MONO | GVSP_PIX_OCCUPY16BIT | 0x000D)
#define GVSP_PIX_BAYGB10 (GVSP_PIX_MONO | GVSP_PIX_OCCUPY16BIT | 0x000E)
#define GVSP_PIX_BAYBG10 (GVSP_PIX_MONO | GVSP_PIX_OCCUPY16BIT | 0x000F)
#define GVSP_PIX_BAYGR12 (GVSP_PIX_MONO | GVSP_PIX_OCCUPY16BIT | 0x0010)
#define GVSP_PIX_BAYRG12 (GVSP_PIX_MONO | GVSP_PIX_OCCUPY16BIT | 0x0011)
#define GVSP_PIX_BAYGB12 (GVSP_PIX_MONO | GVSP_PIX_OCCUPY16BIT | 0x0012)
#define GVSP_PIX_BAYBG12 (GVSP_PIX_MONO | GVSP_PIX_OCCUPY16BIT | 0x0013)
#define GVSP_PIX_BAYGR10_PACKED (GVSP_PIX_MONO | GVSP_PIX_OCCUPY12BIT | 0x0026)
#define GVSP_PIX_BAYRG10_PACKED (GVSP_PIX_MONO | GVSP_PIX_OCCUPY12BIT | 0x0027)
#define GVSP_PIX_BAYGB10_PACKED (GVSP_PIX_MONO | GVSP_PIX_OCCUPY12BIT | 0x0028)
#define GVSP_PIX_BAYBG10_PACKED (GVSP_PIX_MONO | GVSP_PIX_OCCUPY12BIT | 0x0029)
#define GVSP_PIX_BAYGR12_PACKED (GVSP_PIX_MONO | GVSP_PIX_OCCUPY12BIT | 0x002A)
#define GVSP_PIX_BAYRG12_PACKED (GVSP_PIX_MONO | GVSP_PIX_OCCUPY12BIT | 0x002B)
#define GVSP_PIX_BAYGB12_PACKED (GVSP_PIX_MONO | GVSP_PIX_OCCUPY12BIT | 0x002C)
#define GVSP_PIX_BAYBG12_PACKED (GVSP_PIX_MONO | GVSP_PIX_OCCUPY12BIT | 0x002D)
#define GVSP_PIX_BAYGR16 (GVSP_PIX_MONO | GVSP_PIX_OCCUPY16BIT | 0x002E)
#define GVSP_PIX_BAYRG16 (GVSP_PIX_MONO | GVSP_PIX_OCCUPY16BIT | 0x002F)
#define GVSP_PIX_BAYGB16 (GVSP_PIX_MONO | GVSP_PIX_OCCUPY16BIT | 0x0030)
#define GVSP_PIX_BAYBG16 (GVSP_PIX_MONO | GVSP_PIX_OCCUPY16BIT | 0x0031)
3、RGB打包的缓冲区格式定义(RGB Packed buffer format defines)
cpp
#define GVSP_PIX_RGB8 (GVSP_PIX_COLOR | GVSP_PIX_OCCUPY24BIT | 0x0014)
#define GVSP_PIX_BGR8 (GVSP_PIX_COLOR | GVSP_PIX_OCCUPY24BIT | 0x0015)
#define GVSP_PIX_RGBA8 (GVSP_PIX_COLOR | GVSP_PIX_OCCUPY32BIT | 0x0016)
#define GVSP_PIX_BGRA8 (GVSP_PIX_COLOR | GVSP_PIX_OCCUPY32BIT | 0x0017)
#define GVSP_PIX_RGB10 (GVSP_PIX_COLOR | GVSP_PIX_OCCUPY48BIT | 0x0018)
#define GVSP_PIX_BGR10 (GVSP_PIX_COLOR | GVSP_PIX_OCCUPY48BIT | 0x0019)
#define GVSP_PIX_RGB12 (GVSP_PIX_COLOR | GVSP_PIX_OCCUPY48BIT | 0x001A)
#define GVSP_PIX_BGR12 (GVSP_PIX_COLOR | GVSP_PIX_OCCUPY48BIT | 0x001B)
#define GVSP_PIX_RGB16 (GVSP_PIX_COLOR | GVSP_PIX_OCCUPY48BIT | 0x0033)
#define GVSP_PIX_RGB10V1_PACKED (GVSP_PIX_COLOR | GVSP_PIX_OCCUPY32BIT | 0x001C)
#define GVSP_PIX_RGB10P32 (GVSP_PIX_COLOR | GVSP_PIX_OCCUPY32BIT | 0x001D)
#define GVSP_PIX_RGB12V1_PACKED (GVSP_PIX_COLOR | GVSP_PIX_OCCUPY36BIT | 0X0034)
#define GVSP_PIX_RGB565P (GVSP_PIX_COLOR | GVSP_PIX_OCCUPY16BIT | 0x0035)
#define GVSP_PIX_BGR565P (GVSP_PIX_COLOR | GVSP_PIX_OCCUPY16BIT | 0X0036)
4、YUV和YCbCr打包缓冲区格式定义(YUV and YCbCr Packed buffer format defines)
cpp
#define GVSP_PIX_YUV411_8_UYYVYY (GVSP_PIX_COLOR | GVSP_PIX_OCCUPY12BIT | 0x001E)
#define GVSP_PIX_YUV422_8_UYVY (GVSP_PIX_COLOR | GVSP_PIX_OCCUPY16BIT | 0x001F)
#define GVSP_PIX_YUV422_8 (GVSP_PIX_COLOR | GVSP_PIX_OCCUPY16BIT | 0x0032)
#define GVSP_PIX_YUV8_UYV (GVSP_PIX_COLOR | GVSP_PIX_OCCUPY24BIT | 0x0020)
#define GVSP_PIX_YCBCR8_CBYCR (GVSP_PIX_COLOR | GVSP_PIX_OCCUPY24BIT | 0x003A)
#define GVSP_PIX_YCBCR422_8 (GVSP_PIX_COLOR | GVSP_PIX_OCCUPY16BIT | 0x003B)
#define GVSP_PIX_YCBCR422_8_CBYCRY (GVSP_PIX_COLOR | GVSP_PIX_OCCUPY16BIT | 0x0043)
#define GVSP_PIX_YCBCR411_8_CBYYCRYY (GVSP_PIX_COLOR | GVSP_PIX_OCCUPY12BIT | 0x003C)
#define GVSP_PIX_YCBCR601_8_CBYCR (GVSP_PIX_COLOR | GVSP_PIX_OCCUPY24BIT | 0x003D)
#define GVSP_PIX_YCBCR601_422_8 (GVSP_PIX_COLOR | GVSP_PIX_OCCUPY16BIT | 0x003E)
#define GVSP_PIX_YCBCR601_422_8_CBYCRY (GVSP_PIX_COLOR | GVSP_PIX_OCCUPY16BIT | 0x0044)
#define GVSP_PIX_YCBCR601_411_8_CBYYCRYY (GVSP_PIX_COLOR | GVSP_PIX_OCCUPY12BIT | 0x003F)
#define GVSP_PIX_YCBCR709_8_CBYCR (GVSP_PIX_COLOR | GVSP_PIX_OCCUPY24BIT | 0x0040)
#define GVSP_PIX_YCBCR709_422_8 (GVSP_PIX_COLOR | GVSP_PIX_OCCUPY16BIT | 0x0041)
#define GVSP_PIX_YCBCR709_422_8_CBYCRY (GVSP_PIX_COLOR | GVSP_PIX_OCCUPY16BIT | 0x0045)
#define GVSP_PIX_YCBCR709_411_8_CBYYCRYY (GVSP_PIX_COLOR | GVSP_PIX_OCCUPY12BIT | 0x0042)
5、RGB平面缓冲区格式定义(RGB Planar buffer format defines)
cpp
#define GVSP_PIX_RGB8_PLANAR (GVSP_PIX_COLOR | GVSP_PIX_OCCUPY24BIT | 0x0021)
#define GVSP_PIX_RGB10_PLANAR (GVSP_PIX_COLOR | GVSP_PIX_OCCUPY48BIT | 0x0022)
#define GVSP_PIX_RGB12_PLANAR (GVSP_PIX_COLOR | GVSP_PIX_OCCUPY48BIT | 0x0023)
#define GVSP_PIX_RGB16_PLANAR (GVSP_PIX_COLOR | GVSP_PIX_OCCUPY48BIT | 0x0024)
☆