題 如果我笨拙地連接它,為什麼Windows會顯示“此設備可以執行更快”的通知?


我注意到在Windows XP和7(分別是2台不同的計算機)上我可以設法得到“如果你將它連接到高速USB 2.0端口,這個設備可以更快地執行”通知如果我連接電纜就彈出非常緩慢(或者用一隻手掙扎一下)。如果我用雙手足夠快或正常連接,則沒有通知。在任何一種情況下,所有這些設備似乎都能正常工作。

我認為發生的事情是,在慢速/笨拙的連接期間,線路之間的接觸會被中斷足夠的時間,USB控制器認為它不是2.0而是更慢。但為什麼這麼認為呢?或者為什麼它不只是說“你不好連接電纜,請拔下電源並再試一次”?


74
2017-10-01 15:19


起源


設備是否連接到USB加密狗而不是直接連接到您的盒子?如果是這樣,嘗試直接連接設備而不是第三方可以這麼說。
它連接到桌面塔的背面電纜端口,因此主板和另一端的設備之間不應該有任何東西。 - user1306322
誰在地球上用雙手插入USB設備? - pandalion98
@ Cunningham'sLawyer: 單手情景:usb插頭(或按鍵)在嘗試一側時將筆記本電腦推到桌子周圍,轉動它,再次嘗試,轉動它以最終將其插入。 兩隻手的情景:相同數量的翻轉,但秒針仍然保持筆記本電腦。 - WoJ
等等,這些筆記本電腦上有USB 1端口嗎? 0_0 - rahuldottech


答案:


該消息指的是協商12Mbit / s的舊全速(FS)數據速率,而不是480Mbit / s的高速(HS)數據速率。從USB2端口獲取此效果一定非常困難。 USB2.0 HS協議在設備和主機之間進行相當複雜的協商後建立,因為最初每個HS設備都充當FS設備。

正常流程如下:

  1. 具有HS功能的器件在通過1-1.5kΩ電阻到3.3V獲得VBUS信號後上拉D +線。就像FS設備一樣。

  2. 主機端口檢測到D + =高電平,在最小100ms去抖動延遲後,主機在總線上置位USB_RESET狀態,用45Ω驅動器將D +和D-線驅動到地,持續10或50ms。

  3. 如果設備是FS,它什麼都不做,等待直到USB_RESET結束。

  4. 如果器件是HS,它將使用HS驅動器(18mA源)驅動D-高約1ms。這將產生一個振幅約為800mV(18ma至45Ω負載)的脈衝,稱為“Chirp-K”;

  5. 在檢測到Chirp-K的END時,如果主機能夠進入HS模式,它會將此信號驅回(相同的18mA進入自己的45Ω負載),現在大約50μs。如果它是FS主機,它將忽略Chirp-K,並繼續作為FS。

  6. 然後,如果主機能夠進入HS模式,則將其驅動器切換為D +線,形成“Chirp-J”,再次持續50μs;

  7. 主機在USB_RESET狀態的整個持續時間內重複這種交替的50μs模式(集線器端口上10ms,根集線器端口上50ms);

  8. 在三個交替的chirp-K / J之後,設備識別出主機是HS,並且本身切換到HS模式。這意味著在器件端開啟HS端接,這使得總線電阻達到22Ω,啁啾信號幅度降至400mV,達到標準HS信號電平。

  9. 主機繼續進行HS幀起始(SOF)分組,並以HS模式開始枚舉過程。

現在,任何人都猜測擺動的哪一部分確實打破了這個協議,並讓主機將端口標記為FS。


76
2017-10-01 17:54



縮略語: FS 是“全速”(USB 1.0,12 Mbit / s),HS 是“高速”(USB 2.0,480 Mbit / s)和 SS 將是“SuperSpeed”(USB 3.0,5 Gbit / s)。 - isanae
在過去的16年中處理USB設備,我不得不承認我第一次看到從HS到FS的下降。正常的驅動程序級協議在枚舉過程中至少再使用兩次嘗試來斷言USB_RESET。在第一次插入時最糟糕的情況是,在所描述的協議之後將會有一個或兩個額外的USB_RESET,因此後退永遠不會發生在用戶級別。然而,一些現代主機正在使用“電壓驅動”信號而不是經典的電流驅動,因此各種閾值檢測水平的所有經典組合都會被搞砸,事情可能會發生。 - Ale..chenski
@isanae我想知道什麼時候設備規範創建者會有先見之明來稱之為“慢速”。 - wizzwizz4
@ wizzwizz4當他們有意和故意地希望他們的產品因消費者接待不良而失敗時。 - Dan Neely
@isanae - USB 1.0也支持“低速”1.5 Mbits / s。 - Michael Karas


當您插入USB2端口中的設備時,計算機首先嘗試使用USB2數據協議協商連接。
當失敗時,它會再次嘗試使用USB1數據協議。

我最好的猜測是,在USB2協商期間,物理連接(由於擺動觸點)不穩定。因此,即使該設備是USB2設備,它也會回退到USB1。

足夠有趣的Windows確實意識到該設備應該具有USB2速度(從驅動程序獲取的信息),因此Windows得出結論,您插入的USB端口是一個慢USB1端口。 Windows似乎沒有檢查端口本身是否支持USB2。
這就是為什麼你得到一些有誤導性的錯誤信息。

附:我自己用Windows 10機器嘗試過:在那裡效果相同。


32
2017-10-01 15:46



USB3端口中的USB3設備偶爾會發生同樣的事情...... - davidbak
不可以。在進入任何數據協議之前,USB端口的速度由硬件決定。 - Ale..chenski
@AliChen如何確定? - gronostaj
看到我的完整答案。軟件僅在看到“端口連接”位(來自它的中斷)時啟動端口復位命令;其餘的都是用硬件完成的。 - Ale..chenski
來自維基百科:“USB 2.0設備在復位期間使用特殊協議,稱為啁啾,與主機/集線器協商高帶寬模式。首先連接HS [USB 2.0]的設備作為FS [USB 1.0]設備連接( D +拉高,但在接收到USB RESET(主機D +和D-驅動低電壓持續10到20 ms)時,它將D-線拉高,稱為啁啾K. - Nathan Osman


可能是你插入它的速度足夠慢以至於Windows已經完成了控制器的握手過程,那時USB 2.0通信所需的聯繫人沒有接觸到。這可能導致Windows將USB 2.0設備誤認為1.1設備,因為標記為僅存在於USB 2.0及更高版本的軌道上沒有響應。


0
2017-10-01 15:32



這是<2.0版本usb設備的常見情況,它仍然可以識別連接並且不會選擇失敗嗎? - user1306322
在USB3端口中的USB3設備可能會發生這種情況,其中USB1 / 2引腳首先連接。但我不知道USB1 / USB2會發生什麼。兩者都只使用4個引腳,一對用於電源,一對用於數據。 - Hennes
@hennes我同意。它們在USB 1和2之間沒有物理區別。 - Tonny
@Tonny我很確定我在一些模糊的品牌USB 1.1和2.0設備上看到了一些差異。但我承認,我可能錯了。 - Stefan
@Stefan在早期的USB中,周圍有很多廉價的仿冒連接器,它們的觸點尺寸很小。我已經看到插頭中的每個插針都有不同的長度和厚度。當我們討論有關訂購廉價拆卸電纜的專業人士和騙子時,我仍然會在辦公室裡留下幾個人向人們展示。 - Tonny