1.8 技巧08获取更多的USB端口
树莓派实战秘籍
B型树莓派有两个专用的USB连接器端口,不过实际上,对于非常多的案例来说这确实不太够用,这里是如何获得更多USB端口的技巧。
通用标准总线(USB,Universal Standard Bus)已经成为计算机配件事实上的标准连接器。键盘、鼠标、硬盘驱动器、操纵杆、手电筒甚至泡沫导弹发射器都通过USB连接。树莓派(B型)配备了两个专用的USB 2.0端口让你去访问这个广阔世界的精品外设,但这些端口却一眨眼就用完了。在正常使用的情况下,键盘和鼠标会占用两个USB连接器,这样其他任何设备就都没有地方了!
对计算机用户来说这并不是个新问题,笔记本电脑通常也只配有1~3个USB连接器。即使只有一个USB主机控制器也可以支持很多设备在同一总线上同时运行(准确地说,最多可以支持127个设备)。本技巧就是通过使用USB集线器的方式来获得更多USB端口。
曾几何时,USB集线器价格高昂,不过那个时代早已过去。实际上,现在它们都是定期免费奉送的了,不过这些USB集线器都有一个问题,表现为两种形式:
总线供电
这种类型的USB集线器的所有供电都来自于主机的USB接口,你很可能是以免费赠品的形式或者是在电子商店中以很便宜的价格得到它们的。
外部供电
也被称为自供电。这种类型的USB集线器具有外部电源,并用它来给集线器上的每个USB连接器供电。
给USB 2.0分配的电流约为100mA(这个电流被称为单位负载),而每个端口最高可达500mA。这意味着,如果你采用的是总线供电的集线器,在最好的情况下(从主机获取500mA),它可以驱动4个设备。这是规范上的描述,因此肯定没错,对不对?但在现实世界中,这却并不尽然。
首先,USB集线器本身需要消耗一些电才能运行,因此它无法将从主机获取的500mA全部供给端口。甚至即使我们假定它是一个非常高效的设备(而它们通常并不是),那也只意味着它可以一次性供应4台设备,每台设备供给一个单位负载,但这还不是故事的全部。
USB规范是一个相当宽松的规范(部分是因为它无所不在的结果),以及大量、大量的设备的正常工作电流都要超过100mA—最值得注意的是,无线网络USB设备、带有花哨功能(LCD显示器、集成的USB集线器、背光以及blenders等)的键盘等,这些设备都被归类为高功率USB设备,每个端口可能使用的电流高达五个单位负载(500mA),但它们很少(如果有的话)这样标记,从视觉上看上去和低功耗(单个单位负载)设备并无两样。
最重要的是,树莓派上的专用USB连接器的每个端口只提供一个单位负载(100mA)而不是“正常”计算机所提供的5个单位负载。这个数字远远不能满足总线供电的集线器上的设备的供电需求,因此这些设备压根就无法为你工作。免费(或非常便宜)的USB 2.0集线器?它们总是由总线供电。抱歉,你将不得不买更好的东西。
这就是为什么如果你直接将一个高功率的USB设备连接到树莓派上,它要么试图工作在低功率模式(有时这些设备可以做到这一点),要么树莓派就干脆关机或检测不到设备。大多数高功率的设备可以在低功率状态下被检测到,但在投入使用时会消耗更多的电源(这在无线设备中尤为常见),从而导致状态异常。看上去设备好像在工作,Linux内核驱动也载入了,但它实际上并没有在可靠地、正常地工作。
解决树莓派这个问题的方案就是使用带有外接电源的USB集线器。你会希望使用一个质量好点的,因为这里面有很多可怕的选择。对这些USB集线器的制造商来说,偷工减料或者将集线器的供电设计成低安培数,这些都是很正常的现象。他们这样做的原因是因为他们认为你将要连上的大多数设备都是低功率的,而且你不会一次性的使用所有的端口。
七端口的集线器使用一个1A的电源,对于廉价的USB集线器来说这样的情况并不少见。如果这七个端口中的每一个都连接到高功率(5个单位负载,500mA)设备的话,那么这些设备总共就需要一个3.5A的电源。实际上需要更多,因为集线器本身也需要耗电。
为了安全起见,你应该和这些消减成本的厂商所做的假设相反,假定将要连接上树莓派的任何USB设备都是高功率的,而且你的USB集线器上的每一个端口都将会连接上高功率设备。这样确认一个USB集线器是否合适就成为了一个简单的数学问题:
1.获取USB集线器上的端口数,再加上1(考虑到USB集线器本身)。
2.用高功率负载(0.5)的大小乘以这个数字。
计算结果的单位是安培,这个大小的电源应该可以为你的USB集线器提供足够的电(至少)。
即使你使用了外部电源的USB集线器,当你将之用到树莓派上时仍然有可能遇到问题。有些集线器会通过USB连线(连接USB集线器到树莓派的线缆)传输功率,这被称为功率倒灌。
标准指出,集线器不应该这么设计,但实际上这样做的却屡见不鲜。功率倒灌可能导致的一种情况是,USB集线器比树莓派先有电(树莓派供电时通过标准的微型USB电源连接器),这将导致树莓派处于部分上电状态。而部分上电时,树莓派可能会在开始时不必要的对SD卡写入数据。
为避免这种情况,你可以将USB集线器的电源和树莓派的电源都插入到同一个电源板上,并使用电源板的开关让它们同时上电。
Pi Hut公司出售一种专为树莓派设计的理想的七口USB集线器1,它永远不会通过互联线缆倒灌电流,从而避免了需要小心处理上电顺序。但不幸的是,它只有一个2A的电源,这意味着你一次只能使用三个端口用于高功率设备(可以使用5个单位负载),还可以将剩余的功率供给集线器。尽管如此,这个集线器的设计不会倒灌电流,所以你永远也不必为此担心。
已知的还有一种四口集线器2也没有电流倒灌问题,尽管它也只有一个2A的电源,但是四口集线器显然比七口集线器上更不容易超过这个限制。
我们目前所看到的在树莓派上使用得最好的集线器是PIHUB3的产品,它有四个端口,外部供电并可支持3A电源,外形就像树莓派的Logo。在本书撰写之时,PIHUB还没有出美国版本,不过很快就会有了。