USB 集線器從 USB 轉串行適配器丟棄數據

USB 集線器從 USB 轉串行適配器丟棄數據

我目前正在設計一個系統,需要接收串口設備(主要是ARM板)的資料。為了實現這一點,我使用了一些 USB 轉串口 (FTDI232) 轉接器。我編寫了一個簡單的環回程式(9600 波特)來測試設置,刷新了 ARM 板,並成功接收了我發送的所有內容,沒有任何資料遺失。

然而,該系統最終需要與許多板進行通訊。因此,我將 USB 集線器連接到 USB 端口,並用它來連接更多的板。然而,幾天後我們發現了一些問題。首先,我們似乎有一些小小的翻轉。然後事實證明,當我們從板上接收訊息時,甚至整個位元組都會被丟棄。當我們將這些適配器連接到普通 USB 連接埠(中間沒有集線器)時,問題就消失了。

我們假設這是一個緩衝問題。也許串行控制器或設備發送資料的速度太快。因此,我們在串列埠端安裝了RTS/CTS流控。同樣,這些位元組是由 USB 集線器丟棄的,而不是當串列適配器直接連接到 PC 時丟棄的。

我們將 USB 集線器更換為更昂貴的集線器,但它並沒有改變任何東西。我們換了電腦,但也沒有解決問題。此外,令人困惑的是集線器不會丟棄我們發送到串行適配器的資料包,而只會丟棄串行適配器發送的資料包。

有誰知道我該如何解決這個問題,或者問題是由什麼造成的?我們認為是 USB 集線器造成的。然而,我們依賴它,因為我們必須連接許多設備。因此,在我們創建自己的串行處理解決方案(基於專用 FPGA 或 Pi)之前,我想問這裡是否有人知道發生了什麼?是否有 Linux 設定文件,可以允許更快的輪詢(如果是輪詢問題)?我認為串行適配器不是這裡的問題。

答案1

為了實現這一點,我使用了一些 USB 轉串口 (FTDI232) 轉接器

取得使用 USB 2.0 HS 協定的更好轉接器。 HS 集線器上的 FS 設備的一件事是主機必須使用分割事務協議,該協議由於極其複雜而因實施困難而聞名。我不敢打賭分割事務引擎曾經在大量蹩腳的 FS UART 橋上進行過測試。

另一件事是許多 USB 2.0 集線器只有一個 TT,因此整體效能很差,緩衝/調度必須非常小心。再次強調,隨著疾病預防控制中心瘋狂的民調協議,所有的賭注都應該落空。獲得更好的 USB-UART 橋接器,基於 FT232H 的東西。

直接主機連接和透過 USB 集線器的連接之間的區別在於,在主機情況下,事務直接在本機 FS 協定中執行,而透過集線器的連接需要一個處理分割事務的特殊驅動程式。您的拆分事務驅動程式可能較弱。

答案2

混合使用 USB2 和 USB3 裝置和介面時請小心。由於這種混合,可能會出現一些問題。此外,請記住,有些 USB 集線器根本就是垃圾。

相關內容