2012-05-04 110 views

回答

11

這取決於你的意思是「連接」。我會首先解決最不準確但最簡單的含義。

存在端口

如果你的意思是,以找出是否端口本身是存在於系統中,那麼你可以檢查已加載模塊將支持它的存在,檢查是否存在(如/ dev/ttyS0或/ dev/ttyUSB0,)驗證您是否可以打開它(例如,我在實際上沒有該硬件的系統上存在/ dev/ttyS0設備文件) 。 USB轉換器可以被熱插拔,所以今天你可以看到實際的「串行端口」在一個正在運行的系統中進出。

「調制解調器」控制/狀態信號

另一種可能性是,你要找出是否有任何電纜連接到端口。這不是系統必須知道的事情。有一個外設可以斷言的調制解調器控制和狀態信號,你可以閱讀。但是,外設並不需要使用這些,甚至在調制解調器時代曾經有意義的方式使用它們。您可能發現自己連接的許多系統僅使用接收和發送數據線和接地。

通過接收數據

剩餘的可能性是,有可能是沒有辦法知道如果端口被連接時,比通過尋找從它數據等檢測。有些外設可能會定期自動生成數據,因此您可以嘗試閱讀並查看是否有任何數據。對於其他人,你可以發送一個查詢(希望沒有不希望的副作用),並看看你是否得到預期的迴應。例如,如果您發送字符串「* IDN?\ n」,那麼大約實施SCPI標準的儀器可能會回覆一些識別信息。

另一個主要的問題是你必須使端口和外設配置爲兼容的波特率和字格式。否則,您可能會看到隨機數據。你可能在某些情況下能夠從實現的UART引擎中讀取幀錯誤位(你必須檢查驅動程序是否暴露了這種情況),並將其用作可能存在某種東西的指示,但是在錯誤的波特率率。

通過對硬件和期望數據進行細粒度控制,也可以編寫自動波特率檢測程序,但通常在「外設」端而不是「主機」上執行。

+0

非常感謝您的詳細解釋,感謝您的幫助。 –

+0

@RajeshSO plz接受答案,如果你滿意。這將有助於其他人。 – Raulp

相關問題