Saturday, June 16, 2012

Increasing the Raspberry Pi's USB Host current limit (polyfuse mod)

UPDATE: As of later revisions, the Raspberry Pi designers choose to remove the polyfuses. Therefore, this article is only valid for the first revision boards only. You can identify your board revisions by searching the Raspberry Pi forums. However, the USB hot-swap issue still remains thus the second half of the article can be useful to some Raspi hackers. 

As many of you might already know, the USB host ports of the Raspberry Pi are current-limited to 140mA per port. I find this absolutely ridiculous for such a revolutionary device to have that kind of limitation. The 'official' way around this is using a powered USB hub, but I hate the idea of adding unnecessary complexity to a project.

My way around this is to bridge the polyfuses(F1,F2) seated next to the USB ports.

This surprisingly simple mod will allow you to feed higher powered devices like certain wlan adapters directly from the RasPi's power supply line without throwing a kernel panic every 33.5 seconds. With a 5V 3A power supply, I even managed to get an external hard disk(yes, of the spinning kind) powered directly off the USB port, although I had to bridge the main 700mA polyfuse to get reliable operation and use a SHORT  data cable. [Short cables will minimize steady-state voltage drops due to cable resistance in high-current applications]

On the "Voltage Droop" issue

What is "Voltage Droop"? (hint: NOT voltage drop)

This issue is particularly annoying if you try to hot swap higher current devices, as it causes the SoC to reset due to a sudden voltage sag.

USB allows users to plug and unplug USB devices while the PC is still in operation. When an USB
device is plugged into a port, inrush current occur as the newly plugged device’s internal bypass capacitor
charges to its full potential. This current is drawn from the USB VBUS power plane of the motherboard and
causes the VBUS to sag momentarily.

(520mV sag upon device connection = more kernel panics + random restarts)

That temporary sag you see above will occur even with an overpowered power supply.

Therefore, an additional mod that could improve the hot swapping performance of high-current USB devices (like hard disks) is to use an additional low ESR capacitor between the power lines of the ports. If you look closely at the schematic, the bypass bulk-storage capacitor C32 is only 47uF. This is way too low for spec 2.0 compliance. I quote a whitepaper from "In accordance to the USB Specification Revision 2.0, the VBUS power lines must be bypassed with no less than 120µF capacitance of low-ESR capacitance per USB port." Thus, if your high-current device still behaves erratically even when you bridged the fuses and used a 2A power supply, try to place a 150uF cap between the Vusb and Gnd. If things still don't work, you can then safely proceed to blame it on the software guys.

Sticky note:
  1. If you don't know why the fuses were installed in the first place, please do not attempt this mod. 
  2. Obviously, to take advantage of the polyfuse mod, you need to have a power supply that can match up the total system power consumption at full load. (For what it's worth, I've had wlan adapters peaking at 480mA during Tx...)

Additional info: 


  1. Why did'nt you solder straight over the fuses but crossed (from one side F1 to other side F2), is it better this way?


  2. Nope. it's equivalent to the 'straight over' method.

    I did the cross thing because I cut the wires just a tad too long and I had no extra wire to redo the cutting.

  3. What's the maximum draw each port can do then? Wouldn't it just be 200mah due to the 500 mah the system requires? The main 700mah polyfuse is still limiting your system, are you planning on replacing it?

  4. True, it would have been 200mA if I didn't remove the main 700ma fuse. But since I removed it, my limiting factor is basically the current handling capability of the micro-usb port. (My PSU's 50W btw..)

  5. How dangerous is it to remove the 700ma fuse? I'd be concerned over causing some issues, yet at the same time I will not accept the 100ma per port that there currently is.

  6. As long as you dont purposely short something out on the board, you should be fine. Absolute worst case scenario you'll blow up the power supply. And 5V 1A power supplies blow up very silently(most of the time) without causing much damage.

  7. In addition to the 47uF cap on the schematic right by they USB output fuses, the 220uF capacitor located by the input USB jack also is connected to the same 5V0 line so they're within spec. That doesn't mean it works properly, just that they do meet the minimum spec! I don't know if either are low-ESR parts though.

  8. There are other devices onboard that need bulk-storage capacitance and the placement of the 220uf cap suggests it's for those devices rather than the usb subsystem.

    Also, it has been EXPERIMENTALLY verified that adding capacitance will not produce kernel panics during hot swapping. (at least for the devices I tested)

  9. What did you use for a power supply? Did you use any heat sinks to bypass the fuses, or did you just solder directly to the board? Additionally, for the 700mA polyfuse, did you remove it, or did you bridge it as well?

  10. I bypassed all fuses with wires to keep everything reversible.

    Heatsinks dissipate heat - they dont bypass fuses.

  11. What did you use for a power supply?

  12. Neat post, one question, where did you get the heat sink?

  13. Can we see a picture of the bridged 700mA fuse?

  14. Power supply: Used my laptop's usb port. Surprisingly, it works.

    Heatsink: Got it from an old router. You'll find them on the SoC.

  15. I'm using the PSP Go with 1.5A power supply, I think it should be enought for now.
    Nice guide, I have a extra hub with 5v input that I will use just to not bypass these fuses now.

  16. Just to verify, the 5V on the USB ports is not re-regulated on-board? I thought I heard it was.
    The USB 5V is connected to the 5V supply input directly ...with only the poly-fuses in series?

  17. Nope, no additional regulation. It makes sense to assume that the 5v a user will supply thru the micro usb will be already regulated. It's just a matter of standards I guess.

  18. The 47uF "Bypass Capacitor" C32 should be replaced by a 150-220uF.
    A nother design flaw is that the "Bypass Capacitor" C32 should have been placed after the 140mA "Over Current Protection" F1 & F2.

  19. Thank you. But can you please add more photos how you connect red wires for lamers like me.

  20. I have this message when connect RaspberryPi board with two 200 mA devices to my mac USB port.

  21. Macs are usually current limited to about 1A, so getting this message is normal. Use a phone charger rated at least 2A and you should be fine.

  22. Can we see a picture of the bridged 700mA fuse? Thanks for the usefull post

  23. "C32 should have been placed after the 140mA "Over Current Protection" F1 & F2"

    Would it be possible to solder another Cap after F1 & F2? Or maybe use a Cap to bridge F1 & F2 instead of red wires?

  24. I think revision 2 of the Raspberry Pi has removed the USB fuses (and put a mounting hole in their place). Would you care to update your article to comment on how this changes things?

  25. @Daniel:

    The article will be updated. However, the hotswap issue still remains - the raspi will still restart if you hotswap power hungry devices from the usb ports. It is not an 'issue' per se, as the board was clearly not designed to be USB hot swap friendly.

  26. Thanks for this article. I've bridged F1 and F2. Then tried out the external HDD.
    It's made already some noise :-) but not working. So I went head on to bridge the 700mA fuse near to the power in.
    And now my external hdd works, but only when it is connected already before powering the R-Pi.
    Unfortunatelly I don't have near to me any 150uF capacitor, so I cannot correct the hot swap issue right now.


  27. To bypass the 700ma problem of the main polyfuse, try this mod - it bypasses it completely and gives full power of incoming PSU to the USB ports,and you DONT need to bridge the USB polyfuses.

  28. Hello. I removed the usb poly fuses and bridged them. I also added a 1500uf capacitor like you did. It did not seem to help with the hot plugging issues. it still dies and reboots and when wifi is active I can see th e power led flickering. indicating that its really drawing a chunk of power? Got a 2A power supply. Any advice?

  29. @Piotre

    Firstly, make sure that the capacitor you used are "Low ESR" types.

    Secondly, bypass the fuses with a 0.1 Ohm resistor instead of wires.

    You could try another wifi adapter too as some have 'out of spec' current draws.

  30. OK- I took a capacitor out of a power supply (from reading it seems you cant just easily identify the esr but I know PSU need low ESR type capicotrs) - But if I go and buy a 4700uf will that help? :) Why a resistor? I cannot really see how you made your wires. Why is F1 + going to F2 - and F2 + to F2 - ? I am sure if i just remove the poly fuse and have no bridge- and put 5v direct on the F1- ,F2 - that will power the USB independently? (i know fuse does not have +/- it is just easier to say it since i cant drawy it :) ) I noticed that the +5v is connected to PRTCTL on the LAN chip- if there is an overcurrent then this signal goes low- I think thats what causes (triggers) the Pi to reset. I tried 4 different wifi modules- they connect. then 30 seconds later dead and wont reconnect. Thanks

  31. If you want a more robust solution I would recommend the
    They power the Pi through the GPIO port 5V 2A.
    I have it running on my WD passport, web cam device and WiFi.
    You cant power the Pi and USB devices with the wimpy micro USB connection.
    Its like I have a real standalone Linux computer.

  32. I have a 2A power supply connected on the GPIO pins already. Still resets. I think i need to the extra resistor.