線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:3283
推到 Plurk!
推到 Facebook!

有關 release usb port 的問題

尚未結案
brian_chen
一般會員


發表:14
回覆:20
積分:6
註冊:2007-06-26

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-02-05 11:37:38 IP:59.120.xxx.xxx 訂閱
目前我偵測usb裝置連結的 function 有兩個

一個是在站上找到的程式 detectUSB
可以利用 pid / vid 來偵測 usb device 是否有連接上

另一個是 silicon lab 所提供的 function 叫 SI_GetNumDevices

現在的問題就是
當我程式在燒錄過程中,拔除usb device
此時會跳出 usb 拔除的錯誤訊息,然後我再將 usb device 插上 (程式還沒關閉)
重新燒錄還是可以

但如果我把軟體關閉之後再開啟
detectUSB 可以順利的找到 pid及vid
在裝置管理員中,也可以順利的找到已插入的 usb device

可是在用 silicon 所提供的 SI_GetNumDevices function 中
所回傳的 usb 裝置數是 0 (也就是沒找到)

而此時如果再重新插拔 usb device 就會順利的連接上

所以之前的想法是會不會在燒錄過程中的拔插動作導致 usb port hold 住
因此我想如果在程式中利用先將 usb 移除 再 連接 的功能是否可以解決掉此問題

在站上找了一些相關文章 (如安全的移除 usb 裝置等等...)
裡面提到的一些 function 如 SetupDiCallClassInstaller 及 CM_Get_DevNode_Status 我都有試過

CM_Get_DevNode_Status 感覺像是偵測 device node 的狀態
不過實際使用後,發現他的回傳值依然是 CR_SUCCESS

而 SetupDiCallClassInstaller 我使用 DIF_REMOVE
sleep(500) 之後 再下 DIF_UNREMOVE
確實是有移除掉,但沒有再連接上
而且變成我拔插後,電腦要重新再抓一次 driver
所以想請教一下不知道有沒有方式可以解決 usb port hold 住的問題
ikk
尊榮會員


發表:4
回覆:413
積分:768
註冊:2003-06-30

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-02-26 12:02:05 IP:140.116.xxx.xxx 訂閱

您提到的"我程式在燒錄過程中", 是燒錄什麼東西?
透過USB 的FIFO 將資料送入另一個裝置?
應該是open USB port handle 開啟後未釋放的結果.
在open 和close的function, 印出訊息檢查吧.


===================引 用 brian_chen 文 章===================
現在的問題就是
當我程式在燒錄過程中,拔除usb device
此時會跳出 usb 拔除的錯誤訊息,然後我再將 usb device 插上 (程式還沒關閉)
重新燒錄還是可以
------
FPGA驗證, FPGA開發平台, http://smims.com
brian_chen
一般會員


發表:14
回覆:20
積分:6
註冊:2007-06-26

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-02-26 13:26:09 IP:59.120.xxx.xxx 訂閱

是燒錄一個二進位檔到 ic 裡

不過我想在站上提供的 detectusb 小程式
在偵測的過程中是否就已經open USB port handle

還是在後來
我在燒錄前檔案前,利用 silicon 的 function -- SI_Open
下了這個指令才去 open USB port handle

另外在try catch中有設定
如果燒錄中被拔除,會下一個 SI_Close 的 function 來關閉
不知道這個是不是就算是釋放呢?

還是說
連在 detectusb 這個小程式中 也要順便釋放才行

謝謝。

===================引 用 ikk 文 章===================

您提到的"我程式在燒錄過程中", 是燒錄什麼東西?
透過USB 的FIFO 將資料送入另一個裝置?
應該是open USB port handle 開啟後未釋放的結果.
在open 和close的function, 印出訊息檢查吧.
pcboy
版主


發表:177
回覆:1838
積分:1463
註冊:2004-01-13

發送簡訊給我
#4 引用回覆 回覆 發表時間:2008-03-10 15:36:14 IP:61.220.xxx.xxx 訂閱
看看是否有幫助

[所有][發表] 偵測USB儲存裝置的插拔和磁碟代號(含SourceCode)
http://delphi.ktop.com.tw/board.php?cid=31&fid=79&tid=91493
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案!

子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問!
brian_chen
一般會員


發表:14
回覆:20
積分:6
註冊:2007-06-26

發送簡訊給我
#5 引用回覆 回覆 發表時間:2008-03-13 14:36:23 IP:59.120.xxx.xxx 訂閱
謝謝版主提供的連結
不過他主要的功能是 "用 WM_DEVICECHANGE 和 DBT_DEVICEARRIVAL 偵測 USB 儲存裝置的插拔"
這個我目前有加在onDeviceChange裡面做usb插拔的動作

只是重點是
在我上面敘述的問題中
"當我程式在燒錄過程中,拔除usb device
此時會跳出 usb 拔除的錯誤訊息,然後我再將 usb device 插上 (程式還沒關閉)
重新燒錄還是可以

但如果我把軟體關閉之後再開啟
detectUSB 可以順利的找到 pid及vid
在裝置管理員中,也可以順利的找到已插入的 usb device (代表有偵測到usb裝置)

可是在用 silicon 所提供的 SI_GetNumDevices function 中
所回傳的 usb 裝置數是 0 (也就是沒找到)
如果此時要燒錄ic,是沒辦法燒錄的

而此時如果再重新插拔 usb device 就會順利的連接上
silicon 及 detectusb 皆可偵測到
所以此時要燒錄ic,就可以
"

WM_DEVICECHANGE 和 DBT_DEVICEARRIVAL 從頭到尾都可以偵測到 usb 裝置的插拔動作
只是我在想,如果都知道 usb 裝置有插入
為什麼在 silicon 那邊會無法得知裝置已經插入
而導致無法將檔案燒錄到 ic 裡

===================引 用 pcboy 文 章===================
看看是否有幫助

[所有][發表] 偵測USB儲存裝置的插拔和磁碟代號(含SourceCode)
http://delphi.ktop.com.tw/board.php?cid=31&fid=79&tid=91493
系統時間:2017-10-19 20:47:41
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!