可以在 Linux 中更改 USB 協定嗎?

可以在 Linux 中更改 USB 協定嗎?

我一直在嘗試找到一種方法,讓微控制器通過USB 直接與計算機通信,而無需使用uart 轉USB 橋接器,我想我可以通過禁用USB 端口的USB 協議並將該端口用作常規串行端口來實現這一點。然而,我被告知你無法關閉 USB 部分。不過,我還聽說 Linux 作業系統的許多內部運作方式都可以進行更改。 Linux 是否允許更改 USB 協定並將 USB 連接埠變成常規序列埠?

答案1

從任何意義上講,USB 都不是與舊的 RS-232 串列埠標準(也稱為 EIA/TIA-232)相符的「串列埠」。您無法透過「關閉額外要求」將 USB 轉換為 RS-232。

與經典的 RS-232 序列埠不同,USB 使用差分訊號:實際上有點(非常少)像 RS-485,儘管訊號電平和其他電氣特性非常不同。

RS-232 可使用高達 +/- 15 伏特的訊號電壓:USB 在 USB 1 模式下使用 <0.3V 的邏輯低電平和 2.8-3.6 伏特的邏輯高電平;在 USB 2 高速模式下,電壓甚至更小。

即使在 RS-232 中使用 TTL 邏輯電平 (0..5V),USB 發送器也無法可靠地產生 RS-232「空間」(=較高電壓狀態)訊號。這些標準之間的訊號電平不匹配:USB 發射器的訊號對於 RS-232 UART 接收器來說太微弱,而 RS-232 輸出訊號會使 USB 接收器過載。

您也無法透過簡單的電平轉換器電路來解決不相容性問題:USB 收發器處理的是資料包,而不是僅發送一個起始位,然後發送一個位元組的數據,然後發送一個或兩個停止位。在封包的開始處,必須有一個同步序列(USB 1 為 8 位元;USB 2 高速傳輸為 32 位元),然後傳輸幾個位元組,最後是不會匹配的封包結束訊號正常的「邏輯低”或“邏輯高”狀態。所有這些都可以在硬體中實現以提高效率,並且由於通常沒有理由做任何不同的事情,因此可能沒有任何規定可以繞過它以在直接軟體控制中「位元敲擊」實際數據線。

比較訊號範例RS-232USB 1.1在維基百科中。

總結一下:不,問題在於USB和RS-232在實際硬體層面的差異太大。

相關內容