2014-03-05 73 views
0

我使用嵌入式硬件(通過TI:Piccolo Control Stick xxx69),它使用FTDI USB至串行轉換器硬件。USB串行虛擬COM端口:讀取不工作,但寫入工作

在PC上,我有一個簡單的VC++應用程序,它試圖通過虛擬COM端口(VCOM:通常爲COM7)與硬件進行通信。

  • 我能夠正確連接到端口。

  • 我能夠從應用程序/ PC發送數據到硬件,並且它被正確接收。 (所以,PC上的Tx工作正常),應用程序首先使用createfile(... ... ...) API打開連接,然後使用writefile(.. ... ..) windows apis直接寫入端口。令人驚訝的是,我無法從串口讀取應用程序。當我打電話給readfile(... ... ...) api時,它將狀態返回爲TRUE,但讀取的是零字節。我嘗試使用API​​監視軟件,它顯示內核API Ntreadfile(... ... ...),返回錯誤爲STATUS_TIMEOUT" [0x00000102]。這是令人驚訝的,因爲寫作能夠讀取雖然數據在線沒有。

的數據就行了,因爲當我正常使用超級終端軟件,我能夠正確讀取數據形成控制器,它是可見的。 [在控制器方面,沒關係,因爲我們可以看到超級終端上的數據。

我不是Windows程序員,因爲我處理微控制器。因此,在追求這個問題方面有一些幫助會有很大的幫助。

最好的問候,

-Varun

這裏是一個Reference

+1

這是完全正常。程序員需要修改程序中的SetCommTimeouts()調用。 –

+0

Hans,SetCommTimeouts()未用於我的寫入功能。 [雖然我正在使用爲VC6開發的遺留代碼]。你認爲超時只適用於讀取...順便說一句,我增加了設備註冊表項的超時時間,然後調用等待指定的時間,但結果仍然是零字節讀取。請儘可能詳細說明你的提示! –

+0

註冊表項地點:HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Enum \ FTDIBUS \ VID_0403 + PID_A6D0 + TIU81CWRB \ 0000 \設備參數:MinReadTimeout –

回答

0

問題被解決。我不得不等待InQueue> 0(意味着接收緩衝區中至少有1個字節)或超時(作爲安全出口)結束。它會阻止通話,但目前對我的應用程序無影響。 waitComm()在我這裏工作不好。

示例代碼段:

while(1) 
    { 
     ClearCommError((HANDLE)*h_drv, (LPDWORD)&Err, &CST); 

     if((CST.cbInQue >0)||(count >1000000)) 
     break; 

     count++; 
    }