為什麼短路的USB設備不會燒掉你的主板?

頑皮的女兒似乎有著無窮無盡的精力,這不,她又拿著一個小鐵片,學我插U盤的樣子,一邊不停地折磨著我筆記本可憐的USB口,一邊流著口水憨笑著。我被她的呆萌的樣子逗笑了,多麼簡單而純粹的快樂!老婆卻衝過來,急匆匆的抱走了她,將她安頓到了一個“安全的”角落。這才過來興師問罪:“你不但不幫忙帶娃,看見她玩電不阻止還笑,有你這種爸爸嗎!”作為一個資深宅男兼科普愛好者,這種侮辱不能忍:“USB口只有5V電壓,科學證明低於19V的對身體沒有影響。而且USB 3.0最大才900mA的電流,沒事。”一連串的數字似乎很有說服力,老婆張了張嘴,欲言又止。不一會,表情從怒其不爭換成了關心體貼:“你新買的電腦,弄短路燒掉了就不好了,我是關心你。”我機智地脫離了戰場,多年的鬥爭經驗保護了我,沒有槓精附體,自尋死路。但一個聲音始終迴盪在腦子裡:“可惜不會,USB有Over-Current保護!”

很難想象一個沒有USB接口的電腦會有消費者購買,儘管我們擁有大量USB設備,但似乎大多數人都不知道所有USB口都有過流保護,完全不必擔心短路會燒掉主板。在古老的USB 2.0 Spec中就描述了USB Host和HUB必須具有OC(過流,Over-Current)保護:

Over-current Protection The host and all self-powered hubs must implement over-current protection for safety reasons, and the hub must have a way to detect the over-current condition and report it to the USB software.

沒有OC保護的USB口是不合格的,但標準語焉不詳的“have a way”究竟是什麼way,還是讓人想一探究竟。今天我們就從佔市場主流的Intel方案來看看過流保護是怎麼做到的,再瞭解一下令人不安的著名USB Killer是如何擊穿這層保護的。

過流保護的硬件基礎

USB 2.0的接口有好多種,但無論形狀怎麼樣,核心的連線無非是一對差分信號D+/D-,和一對電源線VBUS和地線:

為什麼短路的USB設備不會燒掉你的主板?

如果不加保護,直接短接VBUS和地線必然會產生大電流而燒掉接口甚至USB控制芯片。同時USB口暴露在外,也要防止靜電放電(ESD,Electrostatic Discharge)產生的瞬時大電流擊穿晶體管,這就要求所有USB主設備(Host)和HUB必須帶有過流保護。這種要求被寫入了USB 2.0 Spec,從而所有主流USB主設備(如主板)都帶有這種保護。但標準只定義了要求,卻沒有規定具體的實現方式,大家實現起來也千差萬別。我們一起來看看Intel開源硬件Minnowboard是怎麼做的,它的方案也廣泛應用在幾乎所有臺式機、筆記本和服務器上。

為什麼短路的USB設備不會燒掉你的主板?

Intel的南橋PCH或者和其類似的South Complex中集成了USB控制器。其中無論USB 2.0和3.0控制器,每個port都有一個單獨的引腳,叫做OC#。Minnow的原理圖是開源的,我們看看這個OC# Pin是怎麼連接的:

為什麼短路的USB設備不會燒掉你的主板?

Minnow的Baytrail只有兩個USB控制器,只有兩個OC# Pin:USB_OC_00和USB_OC_11,電路圖它們名字上面的橫線表示OC引腳是低有效的。OC引腳為低電平時,意味著告訴USB控制器,有什麼東西讓USB電流過載了

。OC信號分別從SOC_USB_HOST_OC0和SOC_USB_HOST_OC1連接過來。以SOC_USB_HOST_OC0為例,它又在哪裡呢?

為什麼短路的USB設備不會燒掉你的主板?

它從一個叫做AP2172MPG的芯片上引出。這個芯片IN連著VBUS,OUT連著USB Vcc,是不是猜出什麼了?是的,這個芯片就是個過流保護芯片,而且是雙路的,芯片spec很容易找到 :

為什麼短路的USB設備不會燒掉你的主板?

可以看到它不但是保護過流,還有高溫保護和防靜電保護。這種芯片是雙路保護,一個能保護兩路USB port,而minnow也剛好只有兩路,好方便!對大多數臺式機,因為USB port很多,另一種TI的過流保護芯片應用的更加廣泛。

從電路圖中可以看出,如果發生短路等情況導致過流,該芯片會掐斷USB的VBUS電源,保證電路不會損壞,並通過OC引腳通知USB控制器發生了過流情況。這時候,USB port電力自動被切斷,只有等OC不再發生才會恢復通路。但用戶怎麼知道發生了過流,以及哪個USB port發生了過流呢?這就要靠BIOS和操作系統驅動來幫忙了。

過流保護的軟件輔助

BIOS主要負責兩件事:

1:現代PCH USB OC引腳一般有8個。但因為PCH管腳緊張,這8個引腳往往不得不和GPIO引腳複用(MUX)。BIOS要根據實際主板情況,將連出來的OC引腳設置成Native,而不是GPIO。

2:這8個引腳,具體對應哪個port,是主板電路連接決定的。BIOS需要根據實際情況,設置OCPinMapping來正確映射這種關係,讓正確的USB port得到通知。

而操作系統裡面的USB驅動會檢查USB port的控制寄存器,得到哪個port發生過流,並通過dmsg或者彈窗,警告用戶,讓用戶解決過流問題。

USB Killer

從前面的文字,大家一定決定歲月靜好,高枕無憂了。不知道大家聽說過一個叫做USB Killer的東西,插上它,很大幾率大家的主板都要立刻返修。美國有個好事者學生,用它搞壞了學校的電腦,被判10年監禁和5.8萬美金的罰款 。那麼,USB Killer是如何繞過過流保護,做到損害電腦主板的呢?

前面的過流保護有個前提條件,可以說是防君子不防小人的。不知道大家注意沒有,被保護的只有VBUS,沒有保護數據信號D+/D-。What if攻擊的是數據信號呢?USB Killer恰恰就是這麼幹的,這貨裡面是這樣:

為什麼短路的USB設備不會燒掉你的主板?

長包的USB Killer

這些腫瘤般的小包是電容。USB Killer利用VBUS為它們充電到200V,然後反向將它們釋放在數據信號上,瞬間擊穿了PCH南橋芯片,造成永久的損壞。


<script>/<script>


結論

USB口短路並不會燒掉大家的主板,大家儘可放心,只要移除短路,有些主板該USB口可以立刻恢復正常,而有些主板則需要重新啟動一下。USB Killer雖然可怕,單最新的USB Type C已經加入對信號線的保護,相信過不了多久 USB Killer的威脅也會越來越小了。


分享到:


相關文章: