A Raspberry Pi and High Power USB Devices
18th Oct 2012, 10:16:49
After some faltering attempts to use my Raspberry Pi model B as a media centre, I repurposed it as a take-anywhere 3G router and general wireless swiss army knife. To do so, I needed to be able to use high power USB devices which the Raspberry Pi is not designed for. I (re)learned a bit about electronics in the process.
The first thing to know is that there are presently three versions of the Raspberry Pi knocking around out there. By far the easiest way to identify a board is to boot it and look at:
# cat /proc/cpuinfo | grep Revision Revision : 0002
This is the revision number of the Broadcom chip, not the revision number of the board, but it's possible to match up the two like so:
Key:
Broadcom revision number | System revision number |
---|---|
0002 | Revision 1.0, 1st production board. |
0003 | Revision 1.0, but with removal of components D14, F1 and F2. |
0004 0005 0006 | Revision 2.0 |
The revision number is somewhat important because it determines how much current can be drawn from the USB ports.
Polyfuses or polymer PTC fuses are actually non-linear thermistors. They act like circuit breakers, (and can be reset unlike true fuses) but their mechanism of action is different. When the load on a polyfuse exceeds its rating, it changes from low resistance to high resistance, effectively chopping the power to whatever it is supplying. The inclusion of these was a good decision, since it reduces the likelihood of someone frying their power supply and board with a short. If (like me) you just connected up some high power USB devices, you'll have blown the fuses. Don't worry, just leaving the Pi unplugged for a while will allow the polyfuses to reset.
All revisions are fitted with fuse F3, which sets a limit of 1.1A. This fuse restricts the total power draw through the micro USB socket on the board. My Raspberry Pi is a 0002 revision 1.0, one of the initial batch that hit the shelves in May 2012. Bad news, because this means in addition to F3 it is fitted with polyfuses F1 and F2. These limit the maximum current of the USB A ports to 140mA, which is a very low limit.
So, what are the options?
Using a powered USB hub seems like an obvious solution, but this uncovered two problems for me. Some hubs supply 'back power' down the USB interface which is used to connect to the computer. This seemed to make my Pi highly unstable, in fact it wouldn't boot at all. Anecdotally, I've heard this isn't a problem with rev 2 boards, but I've not had chance to test this for myself. Other hubs that don't supply back power seem to draw more than the 140mA limit and blow polyfuse F1/2. Maybe bypassing F1 and F2 would prevent this, but I didn't try. Further, this has the problem that you'll need two power supplies, one for the Pi and one for the USB devices. Messy.
If you have fuses F1 and F2, it's definitely a good idea to simply bridge over these with a length of wire. This is effectively the same as the Raspberry Pi foundation have done with rev 2 of the board, except they achieve it by replacing the fuses with 0 ohm blanks. If you want to draw more than 1A however, it's necessary to take fuse F3 out of the equation:
I did this by soldering the power pins of the USB A sockets to the inputs of F3 and D17. Some people have removed F1 and F2 from the board as well as doing this. I haven't done so and have noticed no negative effects.
Of course, all this assumes that your power supply will allow you to draw 1A or greater, which the majority will not. I was using a power supply which claimed to be capable of 1.5A, however when I measured the voltage across TP1 and TP2 with a multimeter, it was dropping to around 4.5V, which is below acceptable levels. I elected to assemble my own power supply based around one of these DC-DC step down modules. Coupled with an 18V/1A wall wart I found, this does the job nicely. Given that Power = Volts x Amps, this gives much more juice than a 5V 1A supply would. As a bonus, I can now connect any sufficiently beefy DC power supply as long as it's between 5 and 24V, so the Pi can now run off alkaline batteries if needs be.
Not exactly compact, but hey, it works. Even with a 3G dongle and a hefty USB 802.11b/g/n wireless module connected, so far I've had four hours runtime out of these batteries. I expect they might give a full day's use given that each cell has a 18,000mAh capacity (although this will be much reduced at a 1A load).