天天看點

USB的挂起和喚醒(Suspend and Resume)

USB協定的第9章講到USB可見裝置狀态[Universal Serial Bus Specification, Section 9.1.1, Pg 239],分為連接配接(Attached),上電(Powered),預設(Default),位址(Address),配置(Configured)和挂起(Suspended)6個狀态。所謂可見,即USB系統和主機可見的狀态,其他狀态屬于USB裝置内部而不可見。其中有關電源的,大緻可分下面三類:

1. 連接配接狀态(Attached):裝置連接配接,但未提供電源。

2. 上電狀态(Powered):裝置被複位(Reset),或者說處于位址、配置狀态。(參見

​​USB枚舉過程​​,USB Specification, page 241)

3. 挂起狀态(Suspended):3 ms未見總線活動而處于省電狀态,裝置不可用,但仍然保持原有的USB位址和配置。

裝置的挂起

我們知道,在USB系統中,正常狀态下hub或root hub會一直周期性地發送SOF包(Start Of Frame,全速USB每1ms發送一個,高速USB則是125µs發送一個)。根據USB協定,如果USB線上一直處于空閑(Idle)狀态超過3ms,裝置應該把它當作一個挂起(Suspended)信号,要求裝置在10ms内進入挂起狀态,并把裝置所需的電流大小降到規定的值(對于low-power裝置,要求是500 µA,而對于high-power或支援遠端喚醒(remote wakeup)功能的裝置是2.5mA【Section 7.2.3, Pg176】)。在挂起狀态中,裝置必須繼續向資料項D+/D-的上拉電阻提供電壓以維持Idle狀态。而對于USB2.0高速裝置,還有些額外的要求:

1. 高速裝置在收到挂起信号(3ms空閑)後,應在0.125ms内切換到全速狀态,也就是說要把終端電阻移除,并在D+資料線上重新挂上1.5k上拉電阻。

2. 裝置在随後的100-875µs内檢測資料線上的狀态。如果該狀态是一個Full speed J,那麼說明host發下來的是一個挂起信号;如果此時該狀态是SE0,說明是host drive資料線D+到0,這是一個複位信号(複位信号會持續至少10ms時間)。

  要注意的是高速裝置在挂起狀态時處于高速模式,隻是所用的是全速信号。一旦從挂起狀态恢複回來,會馬上進入高速工作狀态而無需進行複位操作。

USB的挂起和喚醒(Suspend and Resume)

USB High Speed Suspend Signal

  如上圖所示,Host在a點停止發送SOF,系統處于SE0狀态,b點是3ms時間點,之後的125µs内,裝置移除終端電阻,并挂上1.5k上拉。此時如host發送的是suspend信号,那它就不會不drive D+資料線,導緻D+被裝置拉高,形成一個Full Speed J狀态。在c點之後100-875µs内裝置檢測此時host行為,發現是suspend信号,裝置内部進入低功耗的挂起(suspend)狀态。(假如hsot發送的是複位信号,那麼當裝置在c點挂1.5k電阻之後,由于host對D+線的drive作用,D+線無法被拉高,仍然處于SE0狀态,裝置在c點之後的檢測,發現的還是SE0狀态,等到10ms後就可判斷這是一個複位信号,進行裝置複位操作。)

裝置的喚醒

  裝置處于挂起狀态時,任何總線上的活動(非空閑信号)都可以把裝置喚醒/恢複,進而退出低功耗模式。(同樣,裝置也可以換醒host,比如電腦待機時通過USB鍵盤來換醒主機,這種功能稱之為“遠端喚醒”(remote wakeup),不在本文的讨論範圍内。)

  因為裝置挂起時處于全速信号,在當host需要把将裝置退出suspend狀态時,需要先發送一個持續時間超過20ms的Fulll Speed K狀态。裝置看到K狀态結束的1.3us内醒過來,而host需要在3ms内發送uSOF信号以維持正常的高速信号模式,否則裝置又将進入suspend。如下圖所示:

繼續閱讀