昊明有态度|为什么短路的USB设备不会烧掉你的主板?

顽皮的女儿似乎有着无穷无尽的精力 , 这不 , 她又拿着一个小铁片 , 学我插U盘的样子 , 一边不停地折磨着我笔记本可怜的USB口 , 一边流着口水憨笑着 。 我被她的呆萌的样子逗笑了 , 多么简单而纯粹的快乐!老婆却冲过来 , 急匆匆的抱走了她 , 将她安顿到了一个“安全的”角落 。 这才过来兴师问罪:“你不但不帮忙带娃 , 看见她玩电不阻止还笑 , 有你这种爸爸吗!”作为一个资深宅男兼科普爱好者 , 这种侮辱不能忍:“USB口只有5V电压 , 科学证明低于19V的对身体没有影响 。 而且USB3.0最大才900mA的电流 , 没事 。 ”一连串的数字似乎很有说服力 , 老婆张了张嘴 , 欲言又止 。 不一会 , 表情从怒其不争换成了关心体贴:“你新买的电脑 , 弄短路烧掉了就不好了 , 我是关心你 。 ”我机智地脱离了战场 , 多年的斗争经验保护了我 , 没有杠精附体 , 自寻死路 。 但一个声音始终回荡在脑子里:“可惜不会 , USB有Over-Current保护!”
很难想象一个没有USB接口的电脑会有消费者购买 , 尽管我们拥有大量USB设备 , 但似乎大多数人都不知道所有USB口都有过流保护 , 完全不必担心短路会烧掉主板 。 在古老的USB2.0Spec中就描述了USBHost和HUB必须具有OC(过流 , Over-Current)保护:
Over-currentProtectionThehostandallself-poweredhubsmustimplementover-currentprotectionforsafetyreasons,andthehubmusthaveawaytodetecttheover-currentconditionandreportittotheUSBsoftware.
没有OC保护的USB口是不合格的 , 但标准语焉不详的“haveaway”究竟是什么way , 还是让人想一探究竟 。 今天我们就从占市场主流的Intel方案来看看过流保护是怎么做到的 , 再了解一下令人不安的著名USBKiller是如何击穿这层保护的 。
过流保护的硬件基础
USB2.0的接口有好多种 , 但无论形状怎么样 , 核心的连线无非是一对差分信号D+/D- , 和一对电源线VBUS和地线:
昊明有态度|为什么短路的USB设备不会烧掉你的主板?
文章图片
如果不加保护 , 直接短接VBUS和地线必然会产生大电流而烧掉接口甚至USB控制芯片 。 同时USB口暴露在外 , 也要防止静电放电(ESD , ElectrostaticDischarge)产生的瞬时大电流击穿晶体管 , 这就要求所有USB主设备(Host)和HUB必须带有过流保护 。 这种要求被写入了USB2.0Spec , 从而所有主流USB主设备(如主板)都带有这种保护 。 但标准只定义了要求 , 却没有规定具体的实现方式 , 大家实现起来也千差万别 。 我们一起来看看Intel开源硬件Minnowboard是怎么做的 , 它的方案也广泛应用在几乎所有台式机、笔记本和服务器上 。
昊明有态度|为什么短路的USB设备不会烧掉你的主板?
文章图片
Intel的南桥PCH或者和其类似的SouthComplex中集成了USB控制器 。 其中无论USB2.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连着USBVcc , 是不是猜出什么了?是的 , 这个芯片就是个过流保护芯片 , 而且是双路的 , 芯片spec很容易找到: