標籤:
轉自:http://m.blog.csdn.net/blog/luckywang1103/25244091
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 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。如所示:
USB的掛起和喚醒(Suspend and Resume)【轉】