IT技術互動交流平台(tai)

英发彩票官网

來源︰IT165收集  發布日(ri)期︰2020-02-20 07:17:24

英发彩票官网

CY68013是一款USB 2.0芯片,常用(yong)作(zuo)fpga與(yu)pc的接口芯片,其硬件可以自動處理(li)USB協議,也可以在里面下載對應的固(gu)件程(cheng)序,由固(gu)件程(cheng)序來完成USB協議的通信。我們只關心USB數據(ju)的傳輸(shu),協議的不作(zuo)深究,能用(yong)就(jiu)行。

英发彩票官网

2.1 CY68013

英发彩票官网

主要參考文檔︰

參考文檔描(miao)述
EZ-USB_TRM_001-13670_0E.pdffx2的參考手冊,相當于UserGuide
CY7C68013A.pdffx2的電(dian)氣特性(xing),相當于DataSheet,slave fifo各(ge)個控制(zhi)信號的時序圖在這(zhe)份文檔中有寫
EZ-USB FX2單片機(ji)原理(li)、編程(cheng)及應用(yong)_錢(qian)峰編.pdf實際上(shang)是TRM的翻(fan)譯,翻(fan)得通俗(su)一點
AN61345.pdfCypress 提供的 slave fifo的接口介紹,以及demo代(dai)碼的分析
圈圈教你玩USB.pdf這(zhe)個是一款飛利浦的USB PHY芯片的參考書,USB協議需要自己處理(li),有助于理(li)解USB的專業(ye)術語的含義(yi)及協議

詳細(xi)摘抄

《EZ_USB FX2單片機(ji)原理(li)、編程(cheng)及應用(yong) 讀(du)書筆(bi)shi)恰br />《FX2 TRM 摘抄》

其余相關的Cypress USB開發資料(liao)︰
Cypress的開發環境︰
cy3684_ez_usb_fx2lp_development_kit_15.exe
CySuiteUSB_3_4_4_B184.exe

一個是qiang)  gu)件程(cheng)序的,里面自帶了一個簡化版的Keil;另一個是qiang) ?shang)位huan)ji)軟件的,還包含了Cypress默認的驅動程(cheng)序、API庫等(deng)等(deng)。安裝的時候最好默認都安裝在C盤下,會省很多麻煩。

cy7c68013 實現slave fifo: AN61345 + 例(li)程(cheng)demo

AN63787 - EZ-USB® FX2LP GPIF and Slave FIFO Configuration Examples Using an 8-Bit Asynchronous Interface

AN58069 - Implementing an 8-Bit Parallel MPEG2-TS Interface Using Slave FIFO Mode in FX2LP

AN63620 - Configuring a Xilinx Spartan-3E FPGA Over USB Using EZ-USB FX2LP™

CrazyBingo系列(lie)︰
Crazy Bingo CY68013開發例(li)程(cheng)
鏈接地址可能不準,直接百度即可,AET與(yu)非網上(shang)都有
(1)01︰USB+FPGA攝像(xiang)頭(tou)算法處理(li)-持續更新(xin)中 http://blog.chinaaet.com/detail/34481.html
(2)02:CY7C68013特性(xing)介紹 http://blog.chinaaet.com/detail/34482.html
(3)03: CY7C68013A相關驅動版本說(shuo)明 http://blog.chinaaet.com/detail/34483.html
(4)04: CY7C68013 Slave FIFO及PCB設計 http://blog.chinaaet.com/detail/34484.html
(5)05: CY3684 68013開發套件安裝指(zhi)南(nan) http://blog.chinaaet.com/detail/34485.html
(6)06: USB 68013驅動程(cheng)序的安裝 http://blog.chinaaet.com/detail/34486.html
(7)07: USB68013 Driver數字(zi)證(zheng)書一說(shuo) http://blog.chinaaet.com/detail/34487.html
(8)08: USB 68013 自定義(yi)VID&PID、版本、生廠商等(deng)信息 http://blog.chinaaet.com/detail/34488.html
(9)09: USB 68013調試工具的使(shi)用(yong)mi)yConsole助手的使(shi)用(yong) http://blog.chinaaet.com/detail/34489.html
(10)10: USB 68013調試工具的使(shi)用(yong)mi)treamer USB傳輸(shu)測速 http://blog.chinaaet.com/detail/34490.html
(11)11︰ USB 68013調試開發之各(ge)種EEPROM下載處理(li)辦法以及為(wei)什麼(me)??http://blog.chinaaet.com/detail/34534.html
(12)12︰USB68013 Firmware開發指(zhi)南(nan)之 CY3684固(gu)件例(li)程(cheng)分析 http://blog.chinaaet.com/detail/34534.html
(13)13︰USB68013 Firmware開發指(zhi)南(nan)之Keil UV4工程(cheng)配置選(xuan)項 http://blog.chinaaet.com/detail/34533.html
(14)14︰USB68013 Firmware開發指(zhi)南(nan)之8051 SFR寄存器說(shuo)明 http://blog.chinaaet.com/detail/34534.html

英发彩票官网

2.1.2.1 CY68013驅動安裝

Cypress提供了官方(fang)驅動,win7 x64 32都是支持的
安裝上(shang)驅動以後,可以使(shi)用(yong)庫函數來和fx2芯片進行通訊。
需要修(xiu)改 cyusb.inf 文件來安裝對應的驅動

 ;for all platforms ;在這(zhe)里增加對應的 VID 和 PID 設備 [Device] %VID_XXXX&PID_XXXX.DeviceDesc%=CyUsb, USBVID_XXXX&PID_XXXX ;for windows 2000 non intel platforms [Device.NT] %VID_XXXX&PID_XXXX.DeviceDesc%=CyUsb, USBVID_XXXX&PID_XXXX ;for x86 platforms [Device.NTx86] %VID_XXXX&PID_XXXX.DeviceDesc%=CyUsb, USBVID_XXXX&PID_XXXX ;for x64 platforms [Device.NTamd64] %VID_XXXX&PID_XXXX.DeviceDesc%=CyUsb, USBVID_XXXX&PID_XXXX [Strings] ;在這(zhe)里添(tian)加對應于自己的VID PID的描(miao)述 CYUSB_Provider = 'Cypress' CYUSB_Company = 'Cypress Semiconductor Corporation' CYUSB_Description = 'Cypress Generic USB Driver' CYUSB_DisplayName = 'Cypress USB Generic' CYUSB_Install = 'Cypress CYUSB Driver Installation Disk' VID_XXXX&PID_XXXX.DeviceDesc='Cypress USB Generic Driver (3.4.7.000)' CYUSB.GUID='{AE18AA60-7F6A-11d4-97DD-00010229B959}' CYUSB_Unused = '.'

2.1.2.2 程(cheng)序下載

Cypress 提供了開發工具包里的 CyConsoleCyUSB Center,可以用(yong)來下載程(cheng)序
程(cheng)序下載分兩種,

regVal = bmBIT0;

這(zhe)樣其余像(xiang) bit7->1 都是保留(liu)原值,可能會被第一次配置干擾。

爆出(chu)
error code 997,實際上(shang)是last error = 997

cy7c68013都搭配有eeprom,eeprom里面存的mou)cheng)序,上(shang)電(dian)啟(qi)動的時候,先把程(cheng)序從eeprom加載到內(na)部ram中,即0000-0x3FFF的區域,然後才開始(shi)運行;注意(yi)與(yu)USB相關的寄存器配置以及EP buffer都在上(shang)面0xE200-0xFFFF區域!!!這(zhe)個區域不huan)嵊諧cheng)序,也就(jiu)是說(shuo)程(cheng)序下載的時候不huan)岣哺塹秸zhe)片區域。初始(shi)程(cheng)序啟(qi)動後,對usb相關寄存器進行了配置,然後連上(shang)usb,驅動配合腳本自動下載固(gu)件,這(zhe)個固(gu)件被下載到0x0000-0x3FFF區域去執(zhi)行,不huan)岣哺xE200-0xFFFF區域的USB急(ji)促安琪和EP buffers,下載期間不huan)岫duan)電(dian)。新(xin)下載的固(gu)件啟(qi)動執(zhi)行,對USB regs 和EP buffers進行操作(zuo),但是只是改變指(zhi)定位的數據(ju),其他設置保留(liu)eeprom中初始(shi)程(cheng)序的USB寄存器設置,所以會發現,新(xin)固(gu)件的代(dai)碼功能並沒有提現出(chu)來或(huo)者說(shuo)不正常!!! 直接把程(cheng)序燒寫到eeprom就(jiu)可以了!!!

2.1.2.2.2 下載到附帶配套的eeprom芯片里

上(shang)電(dian)從eeprom加載程(cheng)序運行

下載程(cheng)序到eeprom中xing)zao)成USB通信異常的案例(li)
? 現象描(miao)述︰
一開始(shi)的時候,向CY68013的eepron里下載程(cheng)序,能和pc通信上(shang),只是數據(ju)有些不正常;
修(xiu)改mou)cheng)序以後,重新(xin)下載程(cheng)序到CY68013的eeprom中,再上(shang)電(dian),pc提示無(wu)法識別的usb設備

無(wu)法識別的USB設備

設備管理(li)器上(shang)顯示 unknown device
設備管理(li)器顯示

VID / PID 都沒有顯示
設備管理(li)器查看(kan)VID PID
usb根本沒有通信上(shang)!!!!

? 解決辦法
推(tui)測原因
最後一個版本的mou)cheng)序下載進去有問題,即eeprom里的mou)cheng)序有問題,
然後又每kan)問峭 eprom來啟(qi)動,
加載程(cheng)序運行,然後每kan)蚊毒俁疾懷曬Γ 韻允疚粗zhi)設備

最關鍵(jian)的是要擦除eeprom里的原程(cheng)序,然後更新(xin)為(wei)新(xin)程(cheng)序即可。

還好,在Crazy Bingo的博客上(shang)找ye)攪私餼齜fang)案︰
http://blog.chinaaet.com/crazybingo/p/34531
CrazyBingo CY68013 eeprom設計QTI1NikuPC9zdHJvbmc+PGJyIC8+CglFRVBST01zIHdpdGggZGVuc2l0aWVzIHVwIHRvIDI1NiBieXRlcyByZXF1aXJlIG9ubHkgYSBzaW5nbGUgYWRkcmVzcyBieXRlOyBsYXJnZXIgRUVQUk9NcyByZXF1aXJlIHR3byBhZGRyZXNzIGJ5dGVzLiBUaGUgRVotVVNCIG11c3QgZGV0ZXJtaW5lIHdoaWNoIEVFUFJPTSB0eXBlIGlzIGNvbm5lY3RlZCAmbWRhc2g7IG9uZSBvciB0d28gYWRkcmVzcyBieXRlcyAmbWRhc2g7IHNvIHRoYXQgaXQgY2FuIHByb3Blcmx5IHJlYWQgdGhlIEVFUFJPTS48L3A+Cgk8cD5UaGUgRVotVVNCIHVzZXMgdGhlIEVFUFJPTSBkZXZpY2UtYWRkcmVzcyBwaW5zIEEyLCBBMSwgYW5kIEEwIHRvIGRldGVybWluZSB3aGV0aGVyIHRvIHNlbmQgb3V0IG9uZSBvciB0d28gYnl0ZXMgb2YgYWRkcmVzcy4gQXMgc2hvd24gaW4gVGFibGUgMTMtMTEsIHNpbmdsZSBieXRlIGFkZHJlc3MgRUVQUk9NcyBtdXN0IGJlIHN0cmFwcGVkIHRvIGFkZHJlc3MgMDAwLCA8c3Ryb25nPndoaWxlIGRvdWJsZSBieXRlIGFkZHJlc3MgRUVQUk9NcyBtdXN0IGJlIHN0cmFwcGVkIHRvIGFkZHJlc3MgMDAxLjwvc3Ryb25nPjwvcD4KPC9ibG9ja3F1b3RlPgo8cD48aW1nIGFsdD0="CY68013 TRM eeprom配置說(shuo)明" src="http://www.it165.net/uploadfile/files/2016/1028/20161028192145347.png" title=""http://www.it165.net/pro/pkqt/" target="_blank" class="keylink">QTIsQTEsQTC+zcrH08PAtMXk1sO12Na3tcSjrDxzdHJvbmc+tvhmeDLWu8jPIDAwMSC1xLXY1rejrDwvc3Ryb25nPjxiciAvPgo8c3Ryb25nPta70qq4xLHkwctlZXByb221xLXY1rejrGVlcHJvbb7Nu+HKp9Cno6xmeDK+zc7et6i002VlcHJvbbzT1NizzNDyo6zWu8Tc07K8/rvYuLR1c2LH68fzPC9zdHJvbmc+PC9wPgo8cD48ZW0+MaOpz8i2zMK3SjEzo6zKubXDQTCx5LXNPC9lbT48YnIgLz4KPGVtPjKjqXVzYsGsvdO1vXBjo6y87LLitb11c2LJ6LG4o6zH/bavzt63qNfUtq+wstewPC9lbT48YnIgLz4KPGVtPjOjqcrWtq+wstewttTTprXEY3lwcmVzcyB1c2LH/bavPC9lbT48YnIgLz4KPGVtPjSjqbbPv6pKMTOjrMq5QTCx5LjftefGvTwvZW0+PGJyIC8+CjxlbT41o6m08r+qQ3lDb25zb2xlo6zPwtTYs8zQ8rW9ZWVwcm9to6xva6OsdXNizajQxbvWuLQ8L2VtPjwvcD4KPGg0IGlkPQ=="2123-a51文件的作(zuo)用(yong)">2.1.2.3 .a51文件的作(zuo)用(yong)

注意(yi),.a51的文件描(miao)述符是用(yong)來上(shang)報給(gei)pc機(ji)的,用(yong)庫函數獲取(qu)到jiang)拿miao)述符都是從這(zhe)個.a51里來的
相當于這(zhe)個文件決定了跟pc報告說(shuo)我有哪(na)些端shuo)悖 約岸說(shuo)愕拇笮br />.a51文件必須和fx2真正在運行時配置的端shuo)鬩恢zhi)才可以,否則會造(zao)成,上(shang)位huan)ji)調用(yong)庫函數和fx2通訊不上(shang)

HighSpeedConfigDscr里面需要改mou)個端shuo)愕模 er)且下面要寫4個端shuo)愕拿miao)述符!!
.a51配置

2.1.2.4 Max PktSize含義(yi)

最大只能發這(zhe)麼(me)多

端shuo)憒笮和 Max PktSize是不一樣的
端shuo)憒笮 腔捍媲拇笮。和6可以配置為(wei)512 和 1024兩種
4 和 8就(jiu)只能配置為(wei)512

Max PktSize可以設置為(wei)64,最大usb包長為(wei)64

2.1.2.5 芯片沒辦法軟件復位!!!!

如果端shuo)ifo滿了,仍舊連續發送,芯片會掛ye)悖 砑次幻揮杏yong),必須重新(xin)上(shang)電(dian),hard reset!!!
清空FIFO,在TD_Poll()中進行FIFO_RESET,嚴xi)ge)來說(shuo)是在outpkt_end後進行FIFO_RESET,然後再bulkout就(jiu)失敗了!!!!不知(zhi)道什麼(me)原因!!!

 //FIFO復位 SYNCDELAY; FIFORESET = 0x80;  // activate NAK-ALL to avoid race conditions SYNCDELAY;   // see TRM section 15.14 FIFORESET = 0x02;  // reset, FIFO 2 SYNCDELAY;   // FIFORESET = 0x04;  // reset, FIFO 4 SYNCDELAY;   // FIFORESET = 0x06;  // reset, FIFO 6 SYNCDELAY;   // FIFORESET = 0x08;  // reset, FIFO 8 SYNCDELAY;   // FIFORESET = 0x00;  // deactivate NAK-ALL SYNCDELAY;   // //清空usb殘留(liu),不讓usb殘留(liu)提交到slave fifo接口處 //這(zhe)樣fpga端在接收的時候不huan) 盞鉸luan)七八糟的數據(ju) //加了下面這(zhe)幾句(ju)話,再在這(zhe)個後面執(zhi)行FIFORESET就(jiu)不能bulkout了,不知(zhi)為(wei)何 OUTPKTEND = 0x82; // Arm both EP2 buffers to 'prime the pump' SYNCDELAY; OUTPKTEND = 0x82; SYNCDELAY; OUTPKTEND = 0x84; SYNCDELAY; OUTPKTEND = 0x84; SYNCDELAY;

上(shang)下兩段換(huan)一下先OUTPKTEND 然後再 FIFORESET就(jiu)會出(chu)現上(shang)面說(shuo)的問題

2.2 fpga

英发彩票官网

參考文檔︰

AN61345.pdf
CY69013A.pdf

截圖全(quan)部取(qu)自CY7C68013A的datasheet,不是TRM,TRM里面沒有標(biao)出(chu)來時間
IFCLK是fx2輸(shu)入腳的IFCLK,確實是qiao)shang)升沿去采樣的,

2.2.1.1 基本連接



2.2.1.2 時序分析

這(zhe)里只采用(yong)同(tong)步讀(du)寫的方(fang)式!!!
讀(du)︰



ToeOn 以後的數據(ju)才是有效的數據(ju)。

寫︰


最壞情況下,寫入以後,滿的FLAGS需要13.5ns才能出(chu)來,超(chao)過周期的一半(ban)了,得等(deng)到下降(jiang)沿以後才能檢測到IN FIFO滿

英发彩票官网

2.2.1.1 stream_in

2.2.1.1.1 上(shang)電(dian)後fpga發送了很多0x00回來

PC端從USB處收到很多的0x00
一開始(shi)以為(wei)是fifo里面有緩存,而(er)且因為(wei)配置的是512 x4大小,所以收到了512 x4的 0x00 實際上(shang)是fpga實際一直控制(zhi)在寫00 00
用(yong)萬(wan)用(yong)表來測量fx2的slwr腳一直顯示為(wei)0V!!!
後來發現,fpga管腳鎖錯了!!!!!!沒有把slwr腳鎖到對應的fx2的slwr腳,造(zao)成了slave fifo的異常寫入
心中千(qian)萬(wan)只草泥(ni)馬呼嘯而(er)過………………

2.2.1.1.2 fpga的短(duan)包發送出(chu)現問題

發送tou)貪﹫ kt_end信號腳,但什麼(me)時候拉低,某(mou)不知(zhi)名網友(you)說(shuo)︰

pkt_end <= slwr_n

然而(er),

pkt_end <= slwr_n 處理(li)短(duan)包,結(jie)果不對,完全(quan)不對!!!

才發到001D,就(jiu)寫了0x1D個數,flagd就(jiu)拉低了,顯示fifo滿了,但是fifo可是512bytes x4大小的!!!

嘗試pkt_end <= ‘1’; 每kan)蔚deng)齊512字(zi)節自動發送的話,這(zhe)樣子,flagd就(jiu)是正常的。
估計pou)kt_end的操作(zuo)有問題

重新(xin)翻(fan)看(kan)時序圖︰

短(duan)包發送時序圖

還有TRM里的一句(ju)說(shuo)明

then pulse the PKTEND pin,就(jiu)是slwr_n寫到fifo里面,然後都結(jie)束了,再拉低PKTEND一個周期就(jiu)可以了。

修(xiu)改後重新(xin)下載,實驗結(jie)果符合預期,能夠正常收到短(duan)包數據(ju),每kan)個16bit數據(ju);
Bulk in failed是故意(yi)嘗試只讓fpga發一次,pc機(ji)上(shang)請(qing)求(qiu)讀(du)取(qu)兩次中的第二次,返回失敗是正常的,因為(wei)fifo里確實沒有數據(ju)了。

另外注意(yi)一點,EP6FIFOCNT看(kan)起來一直為(wei)0,實際上(shang)含義(yi)不一樣,只要pkt_end以後,EP6FIFOCNT就(jiu)會被清0,說(shuo)這(zhe)些數據(ju)已經被打包出(chu)去了,但是實際還是佔用(yong)空間的,FIFO的flag該是Full還是full,所以會出(chu)現EP6 為(wei)Full,但是EP6FIFOCNT= 0。

超(chao)過512bytes用(yong)pktend發送出(chu)現問題︰
開啟(qi)短(duan)包發送,但是fpga發送超(chao)過512字(zi)節給(gei)pc的時候出(chu)現問題,會收到兩個512字(zi)節數據(ju),後面的512字(zi)節是一串亂(luan)碼
原因︰
fx2程(cheng)序中開了autoin,然後fpga發送tou)擻鐘kt_end拉低一個周期造(zao)成的矛(mao)盾,到了512字(zi)節已經autoin發送了,然後由pkt_end發送一遍(bian),第二遍(bian)的時候發送的不知(zhi)道是什麼(me)數據(ju)

2.2.1.2 stream_out

2.2.1.3 bulk_loopback

配置情況
fpga內(na)配置1024 x16bit的fifo
fx2 配置為(wei)
EP2OUT 512 x4
EP6IN 512 x4

連續發9個512byte過去,然後收到jiang)氖ju)並不完整,收到jiang)包,後面的數據(ju)就(jiu)沒有了(工程(cheng)關閉(bi)ep6 autoin,無(wu)論是長包還是短(duan)包,都是用(yong)pkt_end來驅動發送的)
ep6fifocnt 一直為(wei)2
通過chipscope觀察,發現死在了read_sig狀態
qqGjPC9zdHJvbmc+PC9wPgo8cD7Q3tX9uvOjrNa7xNy2wbW9N7D8yv2+3aOs1+6688G9uPbK/bu5sru21KOsseSzycHLMDg8YnIgLz4KPGltZyBhbHQ9"" src="http://www.it165.net/uploadfile/files/2016/1028/20161028192147372.png" title="" />

發現第7包的前兩個字(zi)節會丟
在第七包只發了兩個字(zi)節4C4B的情況下,什麼(me)也收不到
chipscope

dout能看(kan)到有4C4B說(shuo)明確實這(zhe)個值是寫入到fpga的fifo中的,但是從fifo中讀(du)出(chu)然後寫入到fx2的slave fifo中是有問題的。

關鍵(jian)的關鍵(jian)是,EP6IN fifo滿的時候,按(an)照檢測flagd然後控制(zhi)rden,又由fifo返回的valid信號來驅動slwr_n, 就(jiu)會造(zao)成少寫入一個數據(ju)到EPIN6 FIFO里面,但是這(zhe)個數據(ju)已經從fpga內(na)部fifo中讀(du)出(chu)來了,就(jiu)造(zao)成了丟失一個數據(ju)。歸根到jiang)祝 且蛭wei)valid信號和rd_en信號有一個時鐘周期的延(yan)時。
為(wei)了彌(mi)補這(zhe)一個數據(ju),需要在fx2中設置EP IN full的標(biao)志位提前一個單位告知(zhi)FIFO FULL,
EP6FIFOCFG = 0x41; // AUTOIN=0, WORDWIDE=1 , ZEROLENIN=0, INFM1 = 1,這(zhe)樣就(jiu)不huan)崧┤ju)了。

數據(ju)通路分析︰
EP2OUT 到 fpga內(na)部fifo︰
在往fpga內(na)部fifo寫的時候,fpga內(na)部fifo會提前一個單元給(gei)出(chu)fifo滿信號,這(zhe)樣會導致(zhi)有一個單元的數據(ju),這(zhe)里對應2bytes數據(ju),殘留(liu)在EPOUT FIFO中,得等(deng)到pc把EPIN fifo的數據(ju)讀(du)掉(diao)一些,然後fpga內(na)部fifo釋tou)懦chu)來一些空間,才會把EPOUT的殘留(liu)數據(ju)讀(du)出(chu)來寫入fpga內(na)部fifo。但是這(zhe)個並不影響最終pc接收的情況,因為(wei)看(kan)起來還是和原來一樣512bytes取(qu)出(chu)來。

fpga內(na)部fifo 到EP6IN︰
就(jiu)是前面關鍵(jian)的關鍵(jian)分析的

英发彩票官网

2.2.2.1 同(tong)步jiang)緶吠餉婕右徊ceng)邏輯電(dian)路保護,保證(zheng)不huan)崳蠖du)出(chu)來然後沒人接收

2.2.2.2 inout口處理(li)

fdata_in專門用(yong)作(zuo)輸(shu)入,真實值 或(huo)者 0
data_out專門用(yong)作(zuo)輸(shu)出(chu),真實值 或(huo)者 0

 --fdata_in作(zuo)為(wei)輸(shu)入 process (sloe) begin if (sloe)  --輸(shu)入  fdata_in <= fdata; else  fdata_in <= conv(0, 16); end if; end process; data <= fdata_in  --以後輸(shu)入就(jiu)從fdata_in去取(qu)就(jiu)行 --data_out作(zuo)為(wei)輸(shu)出(chu) process (sloe) begin if (sloe = '0')  --輸(shu)出(chu)  fdata <= data_out; else  fdata <= (whenothers=>'z'); end if; end process; data_out <= 'xxxxxxxxxx'; --以後輸(shu)出(chu)都給(gei)到data_out就(jiu)行 

2.2.2.3 高低字(zi)節序

從pc到fpga︰

fpga fifo
din 16
dout 64

din 按(an)順序寫入0xabcd, 0xefgh,0xijkl, 0xmnop
dout 0xabcd_efgh_ijkl_mnop (即先存入的為(wei)高16bit)

一個數 Num = 0x0102030405060708;
全(quan)部是以高字(zi)節在高地址來畫(hua)的表格(ge),字(zi)節數變大時間在後

路徑byte0byte1byte2byte3byte4byte5byte6byte7
inbuf0x080x070x060x050x040x030x020x01
slave fifo dout 16bit0x080x070x060x050x040x030x020x01
fpga fifo din 16bit0x080x070x060x050x040x030x020x01
fpga fifo dout 64bit0x020x010x040x030x060x050x080x07

讀(du)出(chu)來 Num2 = 0x0708050603040102

Num2 和 Num1 的關系為(wei),高低字(zi)節倒序排列(lie),然後每16bit內(na)部兩字(zi)節交huan)弧br />想要輸(shu)入Num 和 讀(du)出(chu)來的 Num2相等(deng),
必須先對 Num 作(zuo) 高低字(zi)節倒序排列(lie),然後每16bit內(na)部兩字(zi)節交huan)/strong>

從fpga 到 pc

fpga fifo
din 32
dout 16

din 0xab_cd_ef_gh
dout 按(an)順序讀(du)出(chu) 0xabcd, 0xefgh

同(tong)理(li)的,reg fifo out dout為(wei)32位, Num = 0x05060708;
byte3為(wei)最高字(zi)節

路徑byte0byte1byte2byte3
reg fifo out din 32bit0x080x070x060x05
reg fifo out dout 16bit0x060x050x080x07
slave fifo dout0x060x050x080x07
outbuf0x060x050x080x07

Num2 = 0x07080506

2.2.2.4 用(yong)modelsim仿真的時候會出(chu)現紅色線段

紅色線段表示非穩(wen)定狀態,數值di)刺 wei)未知(zhi),可能的原因如下
? 信號未賦(fu)予初始(shi)值
? inout口處理(li)不當,兩端同(tong)時進行out輸(shu)出(chu)造(zao)成不穩(wen)定狀態

2.2.2.5 chipscope無(wu)法捕獲信號

停留(liu)在轉圈圈的狀態,提示 waiting for core to be armed,slow or stopped clock

這(zhe)個問題肯定是因為(wei)輸(shu)給(gei)chipscope的時鐘yong)揮信芷鵠矗。。/strong>
有一些復位信號的原因,外部復位信號沒有鎖定也沒有賦(fu)值,可能就(jiu)接到pll的rst上(shang),導致(zhi)luan)恢痹詬次唬 敝泳jiu)沒有跑起來

時鐘最好me)ll的bufg之後接到chipscope上(shang)!!!

奇(qi)奇(qi)葩(pa)葩(pa)的問題︰
今天踫到一個很奇(qi)怪(guai)的nan)窒螅  吹墓?cheng)死活(huo)就(jiu)不行,fpga程(cheng)序一燒進去,就(jiu)收到一大坨數據(ju),EP6直接滿了,EP8也有數據(ju),特別奇(qi)怪(guai)!!!後來換(huan)了一個工程(cheng)就(jiu)好了

2.3 上(shang)位huan)ji)

英发彩票官网

fx2上(shang)位��huan)��ji)開發 vs2013配置1

fx2上(shang)位��huan)��ji)開發 vs2013配置2

剩(sheng)下的就(jiu)是

#include 'CyAPI.h'

就(jiu)可以使(shi)用(yong)了

2.3.2 Cypress 庫函數的使(shi)用(yong)

Cypress C++庫函數參考文檔

CyAPI.pdf

主要函數

2.3.2.1 open()
 Example CCyUSBDevice *USBDevice = new CCyUSBDevice(NULL); // Attempt to open device #0 if (USBDevice->DeviceCount() && !USBDevice->Open(0)) { USBDevice->Reset(); USBDevice->Open(0); }
2.3.2.2 EndPointOf( )
 Example UCHAR eptAddr = 0x82; CCyUSBDevice *USBDevice = new CCyUSBDevice(NULL); CCyUSBEndPoint *EndPt = USBDevice->EndPointOf(eptAddr); if (EndPt) EndPt->Reset( );
2.3.2.3 XferData( )

這(zhe)個函數 IN 和 OUT端shuo)愣伎梢雜yong)的, bulkin的話就(jiu)是接收,bulkout就(jiu)是發送

 Example CCyUSBDevice *USBDevice = new CCyUSBDevice(NULL); unsigned char buf[] = 'hello world'; LONG length = 11; if (USBDevice->BulkOutEndPt) USBDevice->BulkOutEndPt->XferData(buf, length);

2.3.2 調試

1)控制(zhi)端shuo)悴僮zuo)不成功

一個是因為(wei)地址不對,另一個是因為(wei)長度不對,length必須是LONG,然後如果有連續的函數套用(yong),必須把長度設成可更改的引用(yong),LONG &lenth,否則會返回失敗。

2)上(shang)位huan)ji)短(duan)包發送限制(zhi)

每一個短(duan)包實際上(shang)佔用(yong)了一個buffer緩沖,512x4 16bit的端shuo)閂渲茫 還簿jiu)只能發送4次短(duan)包就(jiu)會滿
如下圖所示︰

每kan)畏?2字(zi)節,只能發送4次,再發送就(jiu)失敗了!!!!
而(er)且一旦出(chu)現發送失敗,無(wu)論是軟件復位huan)故瞧淥裁me)的都不好使(shi)!!!必須重新(xin)上(shang)電(dian)才可以!!!

3)大小端順序

要注意(yi),無(wu)論是發還是收,都是小端序。
PC機(ji)先發0x03,再發0x04, 在slave_fifo里讀(du)出(chu)來是0x0403
另外pc機(ji)內(na)部于是小端序,所以

u8 outbuf[2];*(u16*)&(outbuf[0]) = 0x0403;  //outbuf[0]= 0x03, outbuf[1]= 0x04

然後outbuf發送,在fpga端收到jiang)木jiu)是0x0403,正好和tou)?偷氖焙虻氖ju)是一樣的!!!

fpga發送 0x0304, pc上(shang)先收到0x04,後收到0x03

 u8 inbuf[2]; regVal = *(u16*)&(inbuf[0]); //inbuf[0]= 0x04, inbuf[1]= 0x03; regVal = 0x0304

英发彩票官网

==It’s a secret!!!==

英发彩票官网

    • 英发彩票官网

    About IT165 - 廣告服務(wu) - 隱(yin)私聲(sheng)明 - 版權(quan)申明 - 免(mian)責條款 - 網站地圖 - 網友(you)投(tou)稿 - 聯系方(fang)式
    本站內(na)容來自于互聯網,僅供用(yong)于網絡技術學習,學習中請(qing)遵循(xun)相關法律法規
    英发彩票官网 | 下一页