很難想象一個沒有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和地線:
如果不加保護,直接短接VBUS和地線必然會產生大電流而燒掉接口甚至USB控制芯片。同時USB口暴露在外,也要防止靜電放電(ESD,Electrostatic Discharge)產生的瞬時大電流擊穿晶體管,這就要求所有USB主設備(Host)和HUB必須帶有過流保護。這種要求被寫入了USB 2.0 Spec,從而所有主流USB主設備(如主板)都帶有這種保護。但標準只定義了要求,卻沒有規定具體的實現方式,大家實現起來也千差萬別。我們一起來看看Intel開源硬件Minnowboard是怎么做的,它的方案也廣泛應用在幾乎所有臺式機、筆記本和服務器上。
Intel的南橋PCH或者和其類似的South Complex中集成了USB控制器。其中無論USB 2.0和3.0控制器,每個port都有一個單獨的引腳,叫做OC#。Minnow的原理圖是開源的,我們看看這個OC# Pin是怎么連接的:
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為例,它又在哪里呢?
它從一個叫做AP2172MPG的芯片上引出。這個芯片IN連著VBUS,OUT連著USB Vcc,是不是猜出什么了?是的,這個芯片就是個過流保護芯片,而且是雙路的,芯片spec很容易找到 :
可以看到它不但是保護過流,還有高溫保護和防靜電保護。這種芯片是雙路保護,一個能保護兩路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的東西,插上它,很大幾率大家的主板都要立刻返修。美國有個好事者學生,用它搞壞了學校的電腦,被判10年監禁和5.8萬美金的罰款 。那么,USB Killer是如何繞過過流保護,做到損害電腦主板的呢?
前面的過流保護有個前提條件,可以說是防君子不防小人的。不知道大家注意沒有,被保護的只有VBUS,沒有保護數據信號D+/D-。What if攻擊的是數據信號呢?USB Killer恰恰就是這么干的,這貨里面是這樣:
長包的USB Killer
這些腫瘤般的小包是電容。USB Killer利用VBUS為它們充電到200V,然后反向將它們釋放在數據信號上,瞬間擊穿了PCH南橋芯片,造成永久的損壞。
<script src="https://lf6-cdn-tos.bytescm.com/obj/cdn-static-resource/tt_player/tt.player.js?v=20160723"></script>
USB口短路并不會燒掉大家的主板,大家盡可放心,只要移除短路,有些主板該USB口可以立刻恢復正常,而有些主板則需要重新啟動一下。USB Killer雖然可怕,單最新的USB Type C已經加入對信號線的保護,相信過不了多久 USB Killer的威脅也會越來越小了。
行發來一華碩主板,版號:P8H61-M LX R2.0,USB過流15秒斷電,這種問題一般來說很簡單,華碩都有這個問題。多是USB_OC#電壓不正常導致的,換掉822排阻都能解決。但是這次卻是個例外!最后依然完美搞定!
問餅哥要了點位圖,餅哥每天都很忙,但是每次要圖紙、BIOS都是必回的,從不后悔加入強大的實地。打開點位圖,搜索USB_OC#是搜不到的,需要搜索S_USB_OC#就可以搜到。
通過點位圖很輕松的就找到USB_OC連接的兩個排阻,472和822形成的串聯分壓,看到822不用多說,直接替換了822和472排阻,結果還是一樣報過流關機,一般換掉822就可以的,這次既然不行。接下來測量電壓,測量后發現了問題。
看點位圖,USB_OC正常應該為3.3V,下面UR61的5 7腳正常,可是1 3腳居然為0V,問題就是這里。當量到電阻另一頭也發現了問題,電阻的2 4腳5V也是0V,通過華碩點位圖顯示相連元器件,發現此5V電壓來源于一個綠色保險電阻。
如圖所述,此保險電阻量過是好的,兩端的5V全部都是正常的,打對地阻值兩端沒有短路,那只有一種可能,那就是斷線了。
不用飛線,一坨錫就可以搞定。
開機測試,進系統正常,再也沒有報USB過流錯誤。其實這個維修很簡單,就看看思路就好,主板有斷線,并不是短路,短路就不可以這樣做了,不然會把電阻另外兩腳5V也拉低了。
華碩主板經常會有斷線的維修,但是這里的斷線我也是第一次遇到,馬上年底了過年了,平時修的基本都是同行的,現在都是各種收賬中,大家在評論區也說說今年收獲吧!
此案例由迅維實地培訓學員(pengzijin)提供。
明明白白修電腦,上迅維快修!
車了,USB口全失靈。
這是個反修機,什么意思?當時的故障是點不亮,修好后測試完發給客戶了,他收到也不知道對USB口干了什么,反正現在所有USB口都失靈了,有一組數據線還短路了。客戶就一句話:你沒修好,能怎么辦?
本來想在料板拆個芯片測試一下,芯片拆下來傻眼了,沒有這種鋼網,于是又買了個鋼網。錢沒賺到幾塊,東西卻越來越多了,大大小小的各種規格。廢話不多說了,開整。