如何用U盤代替開機鍵?
有個想法不知如何實現
筆記本開機鍵通常位於鍵盤那面,也就是開機一定要打開蓋子。對於長時間接外接顯示器的電腦很不方便。是否可以做一個U盤,插在固定位置的usb上後即可開機,一方面解決了開蓋的問題,一方面可以作為鑰匙等類似的功能。
重新整理我的答案:
如果是USB的設備,我認為不存在「任何情況」下都通過USB可以直接開機設備,至少現有USB規範是不支持的。
如果放寬要求,在一定條件下能通過USB設備開機,那麼也是可能的,這些條件包括:
1. 主板、硬體都支持相關的特性。
2. USB設備必須是在系統關機前已經插在主機上的。
其中,第二條尤其重要,這也是我說的USB規範限制。
支持USB鍵盤開機的主板是有的,評論里就有人提到。但在關機狀態下插上USB設備,然後通過這個設備開機,這種情況目前是不支持的。
原因在於:
USB協議與網路協議不同的地方在於,USB協議里,所有請求都是host(主機)發起的,而網路協議是對等的(誰發起都可以)。USB設備不會主動向host(主機)發起任何請求(不要被USB協議里的名字迷惑,即使interrupt傳輸,也是polling的),USB設備的所有行為都受到host(主機)的控制。
USB喚醒系統的本質,是通過USB設備里有一個remote wake up的特性。而要想使用這個特性,必須首先讓host(主機)下發一個命令,告訴設備你可以這麼做。之後USB設備才會通過remote wake up特性,觸發一個USB中斷給主機,讓主機的USB控制器最終喚醒系統。
而主機要想下發命令,前提是設備先被枚舉出來,並且處於可用狀態。
於是,remote wake up的整個流程就是:
主機枚舉到USB設備-&>主機使能設備-&>設備正常工作-&>主機使能remote wake up-&>設備斷電掛起-&>設備被觸發時發送wake up中斷觸發主機喚醒。
這裡,所有的步驟都不能少,在設備斷電掛起之前的幾步中,主機必須處於工作狀態。
那麼,如果是斷電狀態下,前面幾步就不可能完成了,因為主機斷電,沒辦法枚舉設備(枚舉設備是一個複雜的過程,需要通過一系列指令完成,必須要CPU協助)。所以,如果在斷電情況下新插上一個USB鍵盤,是不能通過這個鍵盤喚醒系統的。
所以,不存在一種在任何情況下都能喚醒主機的USB設備。
那麼為什麼網卡和PS/2鍵盤幾乎可以在任何情況下喚醒主機?
因為網卡和PS/2鍵盤是能直接發送中斷給中斷控制器的,這類設備不需要像USB協議樣採用polling(輪詢)方式工作。PS/2鍵盤直接發送中斷和scan code,網卡之前的配置信息是寫在網卡的內部的存儲設備里,不管是否斷電過,這些配置和動作都是預先設計好的。所以網卡的WOL(wake on lan)和PS/2鍵盤的適應性更強。
當然實際情況中,在掉電再上電的情況下,網卡和PS/2鍵盤也有概率出現無法喚醒的情況。
--------------------------------------
補充:有人提到了WoC的特性,就是插入設備時喚醒,Windows休眠就有類似的機制。但這有個問題,WoC是不太能區分是什麼設備的,那麼有可能出現隨便一個設備都喚醒的情況。
有的電腦支持滑鼠/鍵盤喚醒
有的支持接入電源適配器開機
U盤開機的我暫時還沒見過@北極 的答案有失偏頗。他答案中提到remote wakeup 定義及解釋沒有問題,不過其實這個場景並不需要用到remote wakeup 即可實現,而是Wake on Connect (WoC)。
目標:實現通用的USB device插入電腦實現電腦的喚醒/重開機。
方案:這個依賴於host controller 的實現,以我比較熟悉的xHC來說明,其實root port/hub 裡面有一個特性WoC,可以做到這一點。
xhci spec 1.1, section 5.4.8, Port Status and Control Register
PORTSC bit 25: Wake on Connect Enable: Default = 『0』. Writing this bit to a 『1』 enables the port
to be sensitive to device connects as system wake-up events. Refer to section 4.15 for operational model.
如果某台PC的xHC能夠支持這個feature,那麼系統要滿足如下要求:
在斷電之後,USB PHY還是要必須保證有電的狀態(耗電極少,只有部分組合電路檢測電平變化),同時一般還會有一個spm(system power management) core活著。如果此時有USB device 接入,那麼PHY會檢測到D+上拉(HS設備)/ 遠端阻抗打開(SS設備),PHY此時會起一個中斷信號給spm,這樣spm才會叫醒主IC(AP),從而完成一次USB插入電腦開機的過程。
xHCI spec 中定義了auxiliary power 來作為系統掉電後backup power,來實現PHY在關機模式下保持一些組合電路的power。不過這一部分其實完全取決於IC designer的實現方式,如在我熟悉的嵌入式環境下,其實SOC會划出部分區域為AO (always on),這部分電路會會有特別的stand by mode,總共耗電也是微安級別的,只要PCB有接電源,那麼無論開關與否,這一部分都是有電狀態的。
另外WCE這個feature雖然是以xHC來舉例,但是我相信大部分的HC都應該支持這個特性,如之前使用的musb hdrc 也是可以支持的。
NOTE: 之前北極提到的remote wakeup,其實一般應該於如下場景:要求系統開機後不需要枚舉(enumeration)就可以直接使用,因為枚舉一般還是比較耽誤時間的。
常見的一個實際就是系統接了一個USB網卡,然後通過這個網卡是實現網路喚醒(Wake on WiFi)。
你要不要試試換個思路,改成網路喚醒?
台式機可以的……
我覺得還有個路子就是你把筆記本拆開開機鍵通常是獨立裝在c殼上的然後你把開機鍵鏈接主板的線延長出來焊一個小開關再在外殼上鑽一個小孔把線印出來
同筆記本外接顯示器,我的方法是買個支持手機APP控制的排插,筆記本設置為適配器通電自動開機(T440P支持此功能)。然後在手機APP上按一下開關,電腦就自動開機了
要是thinkpad的話買個dock,dock上有電源鍵,還有各種介面,筆記本當台式機使用必備品。
為啥要開機?不關機不就好了么?
可以。既然你已經準確的描述了你的需求,作為工程師,當然要考慮 如何低成本的實現方案拉。
拆開主機,把主板上開機對應的跳線改到usb介面上,u盤插上,通電,開機
可以考慮換一台側面開機鍵的本本!款式比較少就是了!
要是我有這需求我就自己把開機排線拔了接到外面,類似這樣的
可是我喜歡用雙顯啊,沒這個需求!
私人訂製個u盤,新增個按鍵,這個按鍵對應鍵盤的power key。插到支持並開始usb鍵盤開機的電腦上,按下這個按鍵即可實現題主的要求。
推薦閱讀:
※使用 USB 線連接電腦充電期間,會使電腦的總耗電增加么?
※哪些USB插座品牌值得推薦?為什麼?
※USB晶元到底完成了哪些工作?
※手機為何難以實現與電腦的usb3.0連接?
※20 米長延長線 USB 供電如何解決?