In a previous article of mine I was suggesting that one could use the USB ports off a computer to power up the Raspberry Pi.
Knowing that each port USB 1.1/2.0 can provide up to 500 mA I was suggesting that a Y cable would be able to provide 1 A to the Pi which, for the majority of cases, would be enough to power it appropriately.
My friend Enrico pointed out though that this is true but only when, during the initial negotiation, the device would request 500 mA to the the hub. If there is no negotiation the hub provides only 100 mA. Far from the 1 A I suggested, I could just squeeze 200 mA from the Y cable!
It seems as though standards are more flexible than how they have been strictly defined. An interesting read from Maxim Integrated admit just that: “In USB 2.0, it is not strictly legal to draw power without enumerating, although much of present-day hardware does just that, and in violation of the spec.“.
The document goes on clarifying a lot of interesting facts about the standards and in the end it is clear that according to the those to draw more than 100 mA there should be a negotiation.
The USB port on the Pi only uses the two pins dedicated to provide power.
So in that sense the Pi is just a dumb device like a USB fan or a USB light. No negotiation happens when it is plugged in hence 100 mA is all it’ll get from each USB port.
There is no way to change this and play by the rules without placing something between the hub and the device requiring to be powered up.
After looking for quite a while for a hack or a work around, I came across this guide which claimed that an FTDI chip can be reprogrammed to “convince” the hub to guarantee 500 mA. Fantastic!
All I needed was to download a program called MProg from FTDI plug a board with an FTDI chip on it, reprogram it and job done.
I had on of these boards that I use for my XBees
but you can get boards with FTDI chip for much less, down to £3/4.
Following the guide is really straight forward and it all very much boils down to this windows
Max power gets changed from the original 90 mA to 500 mA, you hit program, unplug and replug the FTDI and job done.
Sure enough I could see the changes immediately just by looking at device management in my Windows box. This is before
and this is after reprogramming the chip
Up until now my Pi has worked without the need for this trick and I suspect it has done so because of those “flexible rules” I mentioned above. This however is a better approach and despite being probably a bit less “elegant” I will certainly add it in my toolbox.