1 概述
GigE Vision是一個(gè)比較復(fù)雜的協(xié)議,要在FPGA中完全實(shí)現(xiàn)具有較大的難度。如果FPGA作為接收端希望實(shí)現(xiàn)GigE Vision相機(jī)的配置和圖像采集功能,則只需要實(shí)現(xiàn)其中小部分功能即可。本文對(duì)原有GigE Vision協(xié)議的結(jié)構(gòu)進(jìn)行了裁剪,僅保留設(shè)備搜索、寄存器配置和圖像采集三個(gè)主要功能。并在FPGA中成功實(shí)現(xiàn)了對(duì)Basler GIGE相機(jī)的配置和圖像實(shí)時(shí)采集。
2 GigE Vision協(xié)議
GigE Vision協(xié)議包含GVCP(GigE Vision Control Protocol)和GVSP(GigE Vision Streaming Protocol)兩部分。其中,GVCP負(fù)責(zé)對(duì)相機(jī)進(jìn)行配置,GVSP負(fù)責(zé)控制圖像數(shù)據(jù)的傳輸。
2.1 GVCP協(xié)議
GVCP協(xié)議規(guī)定了應(yīng)用程序通過(guò)以太網(wǎng)配置和控制外部設(shè)備的準(zhǔn)則,設(shè)備的配置過(guò)程采用了指令(CMD)和應(yīng)答(ACK)的方式。以外部主機(jī)和相機(jī)為例,首先,主機(jī)通過(guò)以太網(wǎng)向相機(jī)發(fā)送指令包,然后等待相機(jī)返回當(dāng)前指令的應(yīng)答包;相機(jī)接收到指令包后執(zhí)行相應(yīng)的操作,而后向主機(jī)返回應(yīng)答包。主機(jī)收到應(yīng)答包后,根據(jù)應(yīng)答包中的狀態(tài)信息判斷指令是否執(zhí)行成功,若執(zhí)行成功則繼續(xù)發(fā)送下一個(gè)指令包,否則重新發(fā)送當(dāng)前指令包。該方式彌補(bǔ)了UDP協(xié)議面向無(wú)連接的缺點(diǎn),保證了數(shù)據(jù)傳輸?shù)耐暾院涂煽啃浴?/p>
GVCP包含兩種格式的數(shù)據(jù)包:指令包和應(yīng)答包,指令包首部為:
在指令包首部中,0x42為GVCP指令包的固定字段,flag字段包含了不同指令的特定信息,command字段代表指令的類型,length字段代表指令包中除首部外,載荷數(shù)據(jù)的長(zhǎng)度(單位:字節(jié)),req_id代表指令包的序號(hào)。
應(yīng)答包首部為:
在應(yīng)答包首部中,status字段代表指令包的執(zhí)行狀態(tài),acknowledge字段代表應(yīng)答包的類型,length字段代表應(yīng)答包中除首部外,載荷數(shù)據(jù)的長(zhǎng)度(單位:字節(jié)),ack_id代表應(yīng)答包的序號(hào)。
設(shè)計(jì)中使用了兩種指令包:設(shè)備搜索(DISCOVERY)和寫寄存器(WRITEREG)。
2.1.1 設(shè)備搜索(DISCOVERY)
設(shè)備搜索指令用于接收端(FPGA)尋找所在的子網(wǎng)中的GIGE發(fā)送設(shè)備(相機(jī))。通過(guò)搜索指令DISCOVERY_CMD實(shí)現(xiàn)。
搜索指令包格式:
設(shè)計(jì)中的搜索指令包格式為:
對(duì)應(yīng)的搜索應(yīng)答包DISCOVERY_ACK為格式:
在搜索應(yīng)答包中,包含了相機(jī)的各個(gè)主要參數(shù),包括相機(jī)的生產(chǎn)商、版本、名稱、序列號(hào)、IP地址、MAC地址等信息,載荷數(shù)據(jù)的長(zhǎng)度為248字節(jié)。設(shè)計(jì)中所關(guān)心的是相機(jī)的IP地址和MAC地址信息,其中MAC地址位于載荷數(shù)據(jù)的第11~16字節(jié)部分,IP地址位于第37~40字節(jié)部分。
2.1.2 寫寄存器(WRITEREG)
寫寄存器指令用于配置相機(jī)的參數(shù),通過(guò)WRITEREG_CMD指令實(shí)現(xiàn)。
寫寄存器指令包格式:
在寫寄存器指令包中,register_address字段代表32位的寄存器地址,register_data字段代表所要寫入的32位寄存器值。在設(shè)計(jì)中,每次只配置一個(gè)寄存器,因此只包含一個(gè)register_address和register_data字段。
因此,設(shè)計(jì)中的寫寄存器包格式如下:
對(duì)應(yīng)的寫寄存器應(yīng)答包WRITEREG_ACK格式:
在應(yīng)答包中,status字段的值為0x0000,代表寫寄存器指令執(zhí)行成功,index字段代表配置成功的寄存器個(gè)數(shù),對(duì)于每次配置1個(gè)寄存器而言,該字段的值為0x0001。
因此,設(shè)計(jì)中的寫寄存器應(yīng)答包格式如下:
2.2 GVSP協(xié)議
GVSP協(xié)議規(guī)定了GVSP發(fā)送方向GVSP接收方傳輸圖像數(shù)據(jù)和圖像信息的一系列準(zhǔn)則。GVSP協(xié)議以數(shù)據(jù)塊(Data Block)為單位進(jìn)行數(shù)據(jù)傳輸,通常使用標(biāo)準(zhǔn)傳輸模式。該模式包含3種格式的數(shù)據(jù)包:頭數(shù)據(jù)包(Data Leader Packet)、載荷數(shù)據(jù)包(Data Payload Packet)和尾數(shù)據(jù)包(Data Trailer Packet),頭數(shù)據(jù)包和尾數(shù)據(jù)包作為每個(gè)數(shù)據(jù)塊的首尾界定,不包含圖像數(shù)據(jù);載荷數(shù)據(jù)包則作為數(shù)據(jù)塊中數(shù)據(jù)的傳輸載體,包含了有效的圖像數(shù)據(jù)。
3種數(shù)據(jù)包具有相同的GVSP首部,格式如下:
在GVSP首部中,status字段代表數(shù)據(jù)包的狀態(tài),block_id代表數(shù)據(jù)塊的序號(hào),packet_id代表當(dāng)前數(shù)據(jù)塊中數(shù)據(jù)包的序號(hào)(頭數(shù)據(jù)包的packet_id總為0),packet_format字段代表數(shù)據(jù)包的類型(頭數(shù)據(jù)包、載荷數(shù)據(jù)包、尾數(shù)據(jù)包)。EI字段代表擴(kuò)展block_id和packet_id的標(biāo)志位,當(dāng)EI=0時(shí),block_id為16bit,packet_id為24bit,此時(shí)的首部長(zhǎng)度為8字節(jié);當(dāng)EI=1時(shí),block_id為64bit,packet_id為32bit,此時(shí)的首部長(zhǎng)度為20字節(jié)。
設(shè)計(jì)中不對(duì)頭數(shù)據(jù)包和尾數(shù)據(jù)包進(jìn)行處理,僅根據(jù)packet_format字段從數(shù)據(jù)流中提取包含圖像數(shù)據(jù)的載荷數(shù)據(jù)包,并由EI位判斷首部的長(zhǎng)度,準(zhǔn)確剝除載荷數(shù)據(jù)包的首部后,便可得到有效的圖像數(shù)據(jù)。為了保證圖像傳輸?shù)膶?shí)時(shí)性,不對(duì)status字段進(jìn)行判斷,對(duì)于傳輸錯(cuò)誤的圖像數(shù)據(jù)仍作為有效數(shù)據(jù)輸出。
3 UDP IP協(xié)議
GigE Vision是基于UDP協(xié)議進(jìn)行數(shù)據(jù)傳輸?shù)?。因此,要?shí)現(xiàn)FPGA與相機(jī)間的GVCP和GVSP通信,還需要設(shè)計(jì)網(wǎng)絡(luò)通信協(xié)議。按照GigE Vision協(xié)議的要求,需要設(shè)計(jì)的網(wǎng)絡(luò)協(xié)議還是比較多的。從FPGA與相機(jī)之間實(shí)現(xiàn)點(diǎn)對(duì)點(diǎn)數(shù)據(jù)傳輸?shù)慕嵌瘸霭l(fā),只要實(shí)現(xiàn)基本的UDP 、IP和MAC三種協(xié)議即可。由于相機(jī)可以設(shè)置為固定IP地址,而且相機(jī)的IP地址和MAC地址都可以通過(guò)FPGA發(fā)送DISCOVERY指令獲取。所以ARP協(xié)議可以不在FPGA中實(shí)現(xiàn)。
對(duì)于UDP和IP協(xié)議,只需要實(shí)現(xiàn)UDP和IP首部的添加和移除功能,其他功能可以不做。MAC協(xié)議在FPGA廠商的開(kāi)發(fā)環(huán)境中均提供了IP。當(dāng)然自己也可以設(shè)計(jì)一個(gè)MAC,只需要實(shí)現(xiàn)基本的MAC首部移除、添加以及CRC32校驗(yàn)功能即可。
4 FPGA工作流程
從相機(jī)的配置到圖像的采集整個(gè)流程為:
可分為5個(gè)步驟,具體過(guò)程如下:
(1)FPGA向其所屬子網(wǎng)發(fā)送UDP廣播包搜尋所連接的相機(jī)。GVCP的UDP端口號(hào)為3956,除此之外,F(xiàn)PGA和相機(jī)的IP地址必須屬于同一個(gè)子網(wǎng)段,否則相機(jī)將無(wú)法應(yīng)答搜索包。
(2)FPGA等待相機(jī)返回應(yīng)答包,并從中提取相機(jī)的IP地址和MAC地址,作為發(fā)送數(shù)據(jù)包的IP首部和MAC首部中的目的地址。
(3)FPGA發(fā)送寫寄存器指令包,依次配置相機(jī)的各功能寄存器,對(duì)其工作參數(shù)進(jìn)行設(shè)置。
(4)FPGA發(fā)送寫采集使能寄存器指令包,觸發(fā)相機(jī)進(jìn)行圖像采集和傳輸。
(5)FPGA從相機(jī)接收GVSP數(shù)據(jù)包,從中提取出有效的圖像數(shù)據(jù)。
原文鏈接:
https://gitcode.csdn.net/66c6dc510bfad230b8ae756b.html
-
FPGA
+關(guān)注
關(guān)注
1629文章
21754瀏覽量
604221 -
圖像采集
+關(guān)注
關(guān)注
2文章
301瀏覽量
41295 -
相機(jī)
+關(guān)注
關(guān)注
4文章
1358瀏覽量
53703 -
Vision
+關(guān)注
關(guān)注
1文章
199瀏覽量
18209
原文標(biāo)題:基于FPGA的GigE Vision相機(jī)圖像采集方案設(shè)計(jì)
文章出處:【微信號(hào):gh_9d70b445f494,微信公眾號(hào):FPGA設(shè)計(jì)論壇】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論