2013-03-03 125 views
4

我正在致力於嵌入式設備的通信設備類(CDC)驅動程序,實現USB 2.0的全速。 COM端口設置爲115200,8位,無奇偶校驗,1個停止位,無流量控制。我們的PC應用程序(32位,Windows 7,.NET 2.0)通過虛擬COM端口與目標設備進行通信,目標設備上的虛擬COM端口可以連接到FTDI(USB-SCI橋接)芯片或集成USB外設在微控制器中,取決於應用程序選擇哪個端口。虛擬COM通信問題

這兩個虛擬COM端口在使用Realterm時都沒有任何問題。但是,儘管我們的桌面應用程序使用通過FTDI芯片連接的虛擬COM端口,但在嘗試使用通過微控制器的集成USB外設連接的虛擬COM時,它會掛起。

當通過使用集成USB的虛擬COM端口連接時,應用程序在第二次調用SerialPort.Write(...)時始終掛起。使用Serial Monitor from HHD Software我可以看到數據在第一次調用時發送到SerialPort.Write(...)。但是,目標設備永遠不會收到該數據。

這很奇怪,因爲我在以前的項目中看到類似問題的唯一原因是總線每一側的流量控制設置不匹配。

附加信息...


這是在運行我們通過集成的USB外圍設備連接到目標設備的PC應用程序從不同的端口監控工具捕獲的數據。任何洞察力將不勝感激。

對於那些有興趣,我使用的CodeWarrior 10.2與MCF51JM128飛思卡爾。


任何想法或建議,將不勝感激。謝謝。

+1

您是否試圖追蹤Realterm的行爲?必須有差異應該表明解決方案。 – jeb 2013-03-03 08:54:09

+0

@jeb我該怎麼做?它是Realterm的特色之一嗎?我承認我只熟悉其一小部分功能。 – 2013-03-03 19:07:18

+0

不,但是像sysinternals/microsoft的[portmon](http://technet.microsoft.com/de-de/sysinternals/bb896644.aspx)這樣的工具可以顯示一個端口的所有動作,打開/關閉以及讀/寫而對於像Realterms和你自己的其他程序 – jeb 2013-03-03 21:46:32

回答

3

從日誌中可以明顯看出,您正在犯一個沒有照顧硬件握手信號的經典錯誤。這隻會偶然發生,像Realterm這樣的終端模擬器絕對不會犯這個錯誤。

您必須將DtrEnable屬性設置爲true。這會打開數據終端就緒信號。這很重要,因爲RS-232是一個未端接的總線,所以當電纜斷開或電源關閉時會受到電子噪音的影響。 DTR使設備確信它實際上已連接到受電設備。這在你的情況當然是模擬的,但驅動程序或固件通常仍然會實現RS-232行爲。

RtsEnable屬性很重要,用於與設備握手,並防止應用程序未及時清空緩衝區時接收緩衝區溢出。您應該將Handshake屬性設置爲Handshake.RequestToSend,這是設備實現它的最常見方式。然後,它還負責打開RTS。如果你必須使用握手。沒有出於某種原因,那麼你通過設置RtsEnable爲true來打開它自己。

這應該採取的問題。如果仍有問題,請使用PortMon監視Realterm初始化驅動程序的方式。將您看到的命令與SerialPort類發送的命令進行比較。確保它們是一樣的。在價值中,不是按順序。

+0

漢斯,那是問題!感謝您的洞察力,讓我回到正確的軌道! – 2013-03-07 20:11:41