USB的掛起和喚醒 (Suspend and Resume)
1. 連接狀態(tài)(Attached):設(shè)備連接,但未提供電源。
2. 上電狀態(tài)(Powered):設(shè)備被復(fù)位(Reset),或者說處于地址、配置狀態(tài)。(參見USB枚舉過程,USB Specification, page 241)
3. 掛起狀態(tài)(Suspended):3 ms未見總線活動而處于省電狀態(tài),設(shè)備不可用,但仍然保持原有的USB地址和配置。
本文引用地址:http://www.ex-cimer.com/article/201612/329062.htm設(shè)備的掛起
我們知道,在USB系統(tǒng)中,正常狀態(tài)下hub或root hub會一直周期性地發(fā)送SOF包(Start Of Frame,全速USB每1ms發(fā)送一個,高速USB則是125μs發(fā)送一個)。根據(jù)USB協(xié)議,如果USB線上一直處于空閑(Idle)狀態(tài)超過3ms,設(shè)備應(yīng)該把它當(dāng)作一個掛起(Suspended)信號,要求設(shè)備在10ms內(nèi)進(jìn)入掛起狀態(tài),并把設(shè)備所需的電流大小降到規(guī)定的值(對于low-power設(shè)備,要求是500 μA,而對于high-power或支持遠(yuǎn)程喚醒(remote wakeup)功能的設(shè)備是2.5mA【Section 7.2.3, Pg176】)。在掛起狀態(tài)中,設(shè)備必須繼續(xù)向數(shù)據(jù)項D+/D-的上拉電阻提供電壓以維持Idle狀態(tài)。而對于USB2.0高速設(shè)備,還有些額外的要求:
1. 高速設(shè)備在收到掛起信號(3ms空閑)后,應(yīng)在0.125ms內(nèi)切換到全速狀態(tài),也就是說要把終端電阻移除,并在D+數(shù)據(jù)線上重新掛上1.5k上拉電阻。
2. 設(shè)備在隨后的100-875μs內(nèi)檢測數(shù)據(jù)線上的狀態(tài)。如果該狀態(tài)是一個Full speed J,那么說明host發(fā)下來的是一個掛起信號;如果此時該狀態(tài)是SE0,說明是host drive數(shù)據(jù)線D+到0,這是一個復(fù)位信號(復(fù)位信號會持續(xù)至少10ms時間)。
要注意的是高速設(shè)備在掛起狀態(tài)時處于高速模式,只是所用的是全速信號。一旦從掛起狀態(tài)恢復(fù)回來,會馬上進(jìn)入高速工作狀態(tài)而無需進(jìn)行復(fù)位操作。
設(shè)備的喚醒
設(shè)備處于掛起狀態(tài)時,任何總線上的活動(非空閑信號)都可以把設(shè)備喚醒/恢復(fù),從而退出低功耗模式。(同樣,設(shè)備也可以換醒host,比如電腦待機(jī)時通過USB鍵盤來換醒主機(jī),這種功能稱之為“遠(yuǎn)程喚醒”(remote wakeup),不在本文的討論范圍內(nèi)。)
因為設(shè)備掛起時處于全速信號,在當(dāng)host需要把將設(shè)備退出suspend狀態(tài)時,需要先發(fā)送一個持續(xù)時間超過20ms的Fulll Speed K狀態(tài)。設(shè)備看到K狀態(tài)結(jié)束的1.3us內(nèi)醒過來,而host需要在3ms內(nèi)發(fā)送uSOF信號以維持正常的高速信號模式,否則設(shè)備又將進(jìn)入suspend。如下圖所示:
評論