10

为什么短路的USB设备不会烧掉你的主板?著名的USB Killer又是怎么干掉主板的?

 3 years ago
source link: https://zhuanlan.zhihu.com/p/153254485
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

为什么短路的USB设备不会烧掉你的主板?著名的USB Killer又是怎么干掉主板的?

中央处理器 (CPU)话题下的优秀回答者

顽皮的女儿似乎有着无穷无尽的精力,这不,她又拿着一个小铁片,学我插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和地线:

如果不加保护,直接短接VBUS和地线必然会产生大电流而烧掉接口甚至USB控制芯片。同时USB口暴露在外,也要防止静电放电(ESD,Electrostatic Discharge)产生的瞬时大电流击穿晶体管,这就要求所有USB主设备(Host)和HUB必须带有过流保护。这种要求被写入了USB 2.0 Spec,从而所有主流USB主设备(如主板)都带有这种保护。但标准只定义了要求,却没有规定具体的实现方式,大家实现起来也千差万别。我们一起来看看Intel开源硬件Minnowboard是怎么做的,它的方案也广泛应用在几乎所有台式机、笔记本和服务器上。关于minnow的详情可以参考这篇文章:

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很容易找到[1]

可以看到它不但是保护过流,还有高温保护和防静电保护。这种芯片是双路保护,一个能保护两路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万美金的罚款[2]。那么,USB Killer是如何绕过过流保护,做到损害电脑主板的呢?

前面的过流保护有个前提条件,可以说是防君子不防小人的。不知道大家注意没有,被保护的只有VBUS,没有保护数据信号D+/D-。What if攻击的是数据信号呢?USB Killer恰恰就是这么干的,这货里面是这样:

长包的USB Killer

这些肿瘤般的小包是电容。USB Killer利用VBUS为它们充电到200V,然后反向将它们释放在数据信号上,瞬间击穿了PCH南桥芯片,造成永久的损坏。

USB口短路并不会烧掉大家的主板,大家尽可放心,只要移除短路,有些主板该USB口可以立刻恢复正常,而有些主板则需要重新启动一下。USB Killer虽然可怕,单最新的USB Type C已经加入对信号线的保护,相信过不了多久 USB Killer的威胁也会越来越小了。

欢迎大家关注我的专栏和用微信扫描下方二维码加入微信公众号"UEFIBlog",在那里有最新的文章。

用微信扫描二维码加入UEFIBlog公众号


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK