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

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

顽皮的女儿似乎有着无穷无尽的精力,这不,她又拿着一个小铁片,学我插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的详情可以参考这篇文章:

老狼:Minnowboard MAX介绍zhuanlan.zhihu.com图标

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南桥芯片,造成永久的损坏。

知乎视频www.zhihu.com图标

结论

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

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

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

参考

  1. ^AP2172MPG Spec https://www.digchip.com/datasheets/download_datasheet.php?id=4572179&part-number=AP2172MPG-13
  2. ^USB Killer新闻 https://www.theverge.com/2019/4/17/18412427/college-saint-rose-student-guilty-usb-killer-destroyed-computers
编辑于 07-02

文章被以下专栏收录