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