天天看點

U3V實作——CYUSB3014之GPIF總結

原文位址::U3V實作——CYUSB3014之GPIF總結_gpif接口_初一零一的部落格-CSDN部落格

相關文章

1、Infineon開發套件, 無線通信開發工具----CYUSB3KIT-003 | Infineon開發套件, 無線通信開發工具 | RS 

2、基于CYUSB3KIT-003USB接口到微控制器的參考設計----基于CYUSB3KIT-003USB接口到微控制器的參考設計-電子電路圖,電子技術資料網站 

3、FPGA和USB3.0通信-UVC錄影機----FPGA和USB3.0通信-UVC錄影機 - 知乎 

4、FPGA和USB3.0通信-SDK的安裝----FPGA和USB3.0通信-SDK的安裝

5、FPGA和USB3.0通信-聯合測試(一)----​FPGA和USB3.0通信-聯合測試(一)

6、FPGA和USB3.0通信-聯合測試(二)----FPGA和USB3.0通信-聯合測試(二)

0 背景:

實作基于CYUSB3014傳輸的标準USB3 VisionDevice支援GenIcam過程中,控制節點實作已與eBus正常通訊,但是圖像流傳輸,是接下來攻克的重點,本文檔用于記錄攻克資料流傳輸過程的難點問題,資料流傳輸主要使用的Cypress公司的GPIFII接口。

硬體拓撲結構是:

Sensor-->FPGA-->CyUSB3014-->pc

以下記錄了從設計到問題解決的過程,包括關鍵詞總結,使用方法步驟詳述,和原理說明,參考資料來源。

(歡迎關注與支援,後期會不斷更新創作)

1 總結:

概念描述:

1.1 套接字(socket):用于指向有效的DMA描述符,使能或者标記中斷;

1.2 DMA描述符(descriptor):描述緩沖區位址,大小,下一個描述符的位置等;DMA節點分為DMA Producer和DMA Customer,生産者和消費者,生産者作為資料生成端口,消費者作為資料消耗端口。

1.3 DMA緩沖區(buffer):用于緩沖接口傳輸資料;

1.4 GPIF線程:賽普拉斯開發的USB SOC與USB上位機之間有32個endpoint節點,但是對外為可程式設計總線接口,可滿足SD卡開發,傳感器等并行可程式設計接口,Cypress稱之為GPIF II。有專用的Cypress開發軟體“GPIF II Designer”。

1.5 URB:USB Request Block;和USB傳輸包大小無關,多個Buck傳輸組成一個URB。BUShound抓取的是URB包,是以呈現出單個URB可以傳輸很大的資料量。(大家會疑惑,USB3.0 Buck傳輸官方手冊說是1024Byte,在這裡做闡述屆時,大家看大Bushund抓取的包超過1024之後不要驚訝)。

2 使用方法:

2.1 打開"GPIF II Designer";

2.2 “File --> OpenProject --> fx3_uvc.cydsn”;

2.3 得到如下圖示

圖2.3.1

2.4 StateMachine示意如下:

圖2.4.1

2.5 “File-->Save Project As”另存為本地路徑下的新工程;

2.6 修改合适的“LD_DATA_COUNT”和“LD_ADDR_COUNT”修改方法是:預設的DMA緩沖區大小/(資料位寬/8)-1 得到所需修改的值。注意:由于狀态機級數從0開始,是以計數起始值為0;

圖2.6.1

2.7 儲存,編譯,編譯all;得到Cypress的SOC下硬體配置“cyfxgpif2config.h”

2.8 替換eclipse工程路徑下的“cyfxgpif2config.h”,即完成了GPIF II端的設計。

3原理說明:

3.1 傳統設計中,FPGA端或者Sensor端常采用DVP接口,圖像從Sensor或者FPGA傳入到USB SOC上,由于前端的流資料不會與SOC中的CPU握手,是以無法控制Master端資料啟停。同時由于USB繁忙度原因,如果采用如下簡單資料流方式實作GPIF II狀态機,則穩定性及資料傳輸的效率欠佳。如圖狀态機:

圖3.1.1

3.2 為了适配各種不同分辨率,且不同分辨率下均不發生資料丢失問題,我們采用Ping-Pong設計,即:GPIF II接口作為Slave裝置,接收來自FPGA或Sensor的VS/DE/Data信号,通過GPIF II Block的雙線程,進而通過DMA套接字傳輸到DMA緩沖區,由于CPU在轉接資料過程中有us及延時存在,是以如果不采用Ping-Pong設計,會導緻GPIF端資料丢失引起的問題。是以結構如下:

3.3 關于USB3 Vision Device的Genicam協定要求的Stream流資料必須具備Leader + Payload + Trailer。但是Stream可以正常傳輸了,但是L/T如何傳輸?

如圖2.4.1中,State19和State22中實作了Commit,Commit了0長度的包到CPU,此時CPU應該響應并向USB Endpoint的Buffer中寫入預設的L/T資訊,即可完成L/T傳輸。

具體應用見c代碼設計。

3.4 GIPF II設計中的"INTR_CPU"實作了戳CPU的狀态,同時此時CPU的c代碼應該具備GPIF_CB callback響應此中斷。否則狀态機無法正常運作。

3.5 圖示中的狀态機設定由于是2個GPIF II線程對接消耗端,是以c代碼中的DMA應該建立MANY_TO_ONE的模式,使用CyU3PDmaMultiChannelCreate。

3.6 dmaMultiConfig.size大小設定與“LD_DATA_COUNT”和“LD_ADDR_COUNT”設定值一緻,但不用減1。

3.7 C代碼中,啟動Stream前需要寫入cyfxgpif2config配置字到SOC寄存器内。

3.8 c代碼中需要将狀态機強制複位到起始位置。

3.9 c代碼需要履歷Stream的Callback函數Commit到上位機所需要的資料。

4 參考設計:

4.1 參考設計資訊:

詳見Infineon官方社群與論壇。

4.2 參考代碼

“U3V_SM.cydsn”

“U3V_on_Fx3”

“cyfxuvc_an75779”

4.3 參考文檔

《AN87216_Designing_a_GPIF_II_Master_Interface_Chinese.pdf》

《AN75779_How_to_Implement_an_Image_Sensor_Interface_with_EZ-U.pdf》

————————————————

版權聲明:本文為CSDN部落客「初一零一」的原創文章,遵循CC 4.0 BY-SA版權協定,轉載請附上原文出處連結及本聲明。

原文連結:https://blog.csdn.net/weixin_48244275/article/details/126825892

繼續閱讀