EZ USB韌體自動下載及ISO端點傳輸實驗 |
|
wjhsu
初階會員 發表:9 回覆:32 積分:48 註冊:2004-06-13 發送簡訊給我 |
各位好, 最近在玩FX2LP (CY7C68013A), 因為懶得每次手動用CyConsole.exe下載hex檔,
所以寫了一個自動下載的程式(順便練功), 大致說明如下: 附件解開後有兩個目錄, 分別代表兩個專案... A.\EZ_USB_AutoLoader\ 功能: 雖然可以用外掛EEPROM的方式, 讓EZ-USB自動重新列舉並下載HEX檔, 不過還是要經過一些 手續, 對韌體開發中而言, 不是很方便(主要是我也沒試過...),所以就想寫個這樣的程式... %%自動偵測EZ-USB裝置, 然後自動開啟CyConsole.exe, 並下載指定的Hex檔%% 說明: 1. 這個程式可以單獨執行(自動下載HEX檔), 或將主要的TFrame物件 "frAutoLoader", 加到自己的BCB專案中 當偵測到指定的裝置時, 就可以用frAutoLoader裏的Device物件, 對Endpoint做IN,OUT(可以參考另一個專案) 2. 對BCB Source Code有興趣的人, 說明一下:(不想看的就跳過吧...) 這個專案有兩個主要的類別, tComponent 及 TAutoLoader a. tComponent及它的衍生類別: 這是用來"玩"其它人程式所用的類別, 主要是用Form上面各元件的位置, 取得它的Window Handle, 然後讓程式可以模擬人的操作, 此專案就是用它來啟動CyConsole.exe並找到 要玩新其它人的程式,在第一次使用前, 要先用tForm::SaveConfiguration()來產生一個Form的資訊檔 "FormData_xxxx.ini" 然後繼承tForm, 並且Implement函式ConfigureForm(HWND TopForm, TStringList *List), 裏面主要就是 用tComponent::FindHandle(TopForm,List,index);來找到指定元件的Handle, 而index就是剛剛所提Form資源檔裏的索引值 可以參考TAutoLoader.h裏 TCyConsole 及 TCyInterface類別的用法... ** 雖然也可以用FindWindow()來找Handle, 不過對於沒有Caption或藏在Parent裏的元件, 就沒用了...所以統一用位置來找** b. TAutoLoader(BCB的TFrame類別) 這主要是利用Cypress的CyAPI.lib提供的功能來偵測EZ-USB, 偵測到之後, Open它, 然後利用tForm的衍生類別TCyConsole及TCyInterface來開啟CyConsole.exe並自動下載指定的hex檔(模擬手按 B.\ImageRetriever\ 功能: 這個最終是要用FX2LP的SlaveFIFO取得外部的CMOS影像, 不過現在還沒完成, 目前只是在實驗FX2LP的Isochronous端點的傳輸功能, 有一點成功... 說明: 這個專案將上面的frAutoLoader(TFrame物件)嵌到MainForm裏, 然後用它來自動偵測FX2LP, 並自動下載Hex檔, 當找到之後, 取得AutoLoader->Device物件, 然後用它來完成Endpoint的操作... 現在實驗的功能如下 (*** 要將PA0及PA1接腳接在一起 **): 1. PC端EP8(Bulk)送一個0到FX2LP -> 2. FX2LP收到後讓PA1=0(產生INT0的負緣中斷)-> 3. 在INT0的中斷函式裏設一個Send旗標 -> 4. 在TD_Poll()裏收到Send旗標後, 填滿EP2的Buffer(值每次累加1), 並commit到SIE 5. PC端接收到EP2(ISO)的資料後顯示在Memo 實驗結果: 1. 重新插拔usb, 讓程式自動下載HEX檔, 或按下Reconnect後, 都可以如預期的動作 (按一下bbIO, 收到1024Bytes的資料) 2. 若用手動再下載一次Hex檔, 動作會怪怪地, 變成要"按二下", 才會收到資料?? 但資料順序也沒亂掉.... 3. 所以若Hex檔修改後, 最好重新插拔一下USB, 然後下載Hex檔 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |