CyUSB.dll的调用经验介绍
最近一直在做EZ-USB的數據傳輸方面的東西,今天是撿起了多年沒用過的VS并用C#編寫了上位機部分的界面。今天的工作是建立在前幾天的痛苦的經歷上的。
??之前一直想用Labview制作這個界面,因為labview這軟件太惹人喜歡了,不需要寫代碼就能把工作做完,我先花了一天多去學了點LV的基本的操作,然后試著用它去調用cypress公司給的USB 的驅動程序(CyUSB.dl)可是問題來了,首先是LV不能識別這個驅動,說必須用32位版的LV才行。
??我重新裝了一個32位的,接下來更痛心的是,驅動是能識別了,可是里面的程序調用不了,根本不顯示里面的程序。也許真的能調用只是我LV水平不夠,不過如果在花大量的時間去學LV,估計也不是太可能了。進行到這一步,感覺很無奈,難道要我放棄這么好用的軟件LV并且花了這么長時間研究的東西,去用別的軟件來實現。
??最終還是痛下決心,使用VS并用C#來編寫,結果看來這個選擇是對的,使用C#編寫界面也很簡單,而且編出來的界面要比LV要細致,畢竟是微軟公司自己的軟件在自家的平臺上運行,做出來的界面我感覺還算滿意把。然后就說說我編寫是調用DLL文件的一些體會把。
??要想調用DLL中的程序首先得清楚里面的函數才行,這一點最好辦,cypress公司把所有相關的東西都做成了文檔,下載下來看就行,而且這文檔簡直就是源代碼啊,稍做修改就可以在程序中直接使用。其實好多公司都在這么做,這樣的文檔會極大的減輕工程師的工作。
?多了不說,說說文檔中的函數還有作用,由于全是英文的,看起來稍微費點勁,有些解釋的不到位的歡迎指正。
?對于文檔中給出的這么多的函數和類,首先抓住其中最重要的一個類:USBDevices
?這個類是CyUSB中的核心類,它會動態的呈現出當前已經連接到電腦的CyUSB設備,通過它可以單獨的找出某個設備(通過設備的VID和PID)并與這個設備進行通信。這個類的使用舉例如下:
USBDeviceList usbDevices = new USBDeviceList(CyConst.DEVICES_CYUSB);
myDev = usbDevices[0x04B4, 0x8613] as CyUSBDevice;// 獲取第一個設備號為VendorID == 0x04B4 and ProductID == 0x8613的設備
??然后很重要的一個函數就是:CyUSBDiceves
??這個函數是連接CyUSB.sys驅動文件的一個關鍵類,通過它可以和USB設備進行各種通信,它里面的額函數暫且先不介紹,后面用到時再說。
??然后最讓我上心的就是CyControlEndPoint部分了,這部分是讀寫端點RAM時主要用到的東西。接下來且聽細說。
??說函數之前說說里面最重要的幾個屬性:Index,Target,ReqCode,ReqType,Value和Direction。最后的Direction調用時基本不會用到,后面會細說。
??首先Index是與Target配套用的,如果Target設置的是TGT_ENDPT屬性的話(一般如此),Index只的就是ENDPOINT的接口號。例如index = 2;說明當前使用的是EP2。
??然后是ReqCode與ReqType是配套使用的。ReqCode是用來向USB設備聲明有一條命令需要被執行(這是翻譯過來的很拗口)說白了就是想USB請求執行命令,這個看名字也能猜個差不多。ReqType是向USB指示它該如何譯碼ReqCode從而控制數據的轉移。也就是說不同的譯碼方式對應這不同的代碼,不同的代碼控制USB做不同類型(方向)的數據轉移。
如果ReqCode為REQ_STD,則ReqCode的可能值可以在USB2.0的說明文檔里面找(底層協議)。
如果ReqCode為REQ_CLASS,則ReqCode的可能值是被記錄在設備的USB類中。
如果ReqCode為REQ_VENDOR,則ReqCode將會為設備聲明一個針對不同廠商的專門的代碼。
??接下來說說這個類中的函數:Read();Write();XferData();
??bool?Read(ref byte[] buf,ref int len)
??這個函數的返回值是bool類型,true表示讀操作成功。
??buf存儲了當前讀回的數據
??len表示讀回了多少byte的數據
??需要注意的是在調用這個函數前必須先設置CyControlEndPoint類中的必要的屬性,之前已經提到過了。
??bool Write(ref byte[] buf,ref system.int32 len)
??跟Read()類似此處不詳述。
??XferData()這個函數會在Read()和Write()函數中被內部調用,可以不顯式出現。如果必須要用到是必須使用Direction屬性指明方向,前面說Direction不常用就是這個原因。
這個DLL 中的函數太多,我們需要抓住我們需要的函數和類,然后依次往后倒,看在使用這個函數和類時又調用了什么,一次往下看,不能閑煩,看懂了也就這么些東西。這里我也沒有說全,先寫這么多,如果有在做這個的,可以找我一塊討論。
原文:https://blog.csdn.net/belvey/article/details/47361411?
?
總結
以上是生活随笔為你收集整理的CyUSB.dll的调用经验介绍的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2005年全球H.264编解码器荟萃
- 下一篇: 公司管理项目管理中的技巧