USB modem power issues 

June 2014

Since some months I have a 3G USB dongle from Huawei connected to my Raspberry Pi. Together with Asterisk it acts as GSM gateway using chan_dongle. A couple of USB devices were already connected to the RPi: 2.5" HDD, WLAN stick, DVB-S receiver.

To supply all this and to power the Pi I energize a USB hub by a Goobay 5 Volts/3 Amperes power supply. Since I had connected the USB modem, the Raspberry Pi was in trouble: USB dropped out entirely a few seconds or several hours after reboot and sometime the Pi crashed and was not even accessible by serial console anymore. I have tried two HUAWEI internet sticks: E160 and E1550. Also I have tried three different USB hubs but nothing worked. If the RPi survived the USB crash, I could collect a bunch of error messages from kern.log (the messages differed from time to time, hub to hub, stick to stick):

raspbian kernel: smsc95xx 1-1.1:1.0 eth0: Failed to read reg index 0x00000114: -110
raspbian kernel: NYET/NAK/ACK/other in non-error case, 0x00000002
raspbian kernel: option1 ttyUSB0: option_instat_callback: error -71
raspbian kernel: smsc95xx 1-1.1:1.0 eth0: unexpected urb length 0
raspbian kernel: ERROR::handle_hc_chhltd_intr_dma:2591: handle_hc_chhltd_intr_dma: Channel 2, DMA Mode -- ChHltd set, but reason for halting is unknown, hcint 0x00000012, intsts 0x04000001
raspbian kernel: hub 1-0:1.0: port 1 disabled by hub (EMI?), re-enabling...
raspbian kernel: usb 1-1: USB disconnect, device number 2
raspbian kernel: usb 1-1.1: USB disconnect, device number 3
raspbian kernel: smsc95xx 1-1.1:1.0 eth0: unregister 'smsc95xx' usb-bcm2708_usb-1.1, smsc95xx USB 2.0 Ethernet
raspbian kernel: Unable to handle kernel NULL pointer dereference at virtual address 00000034

...followed by a lot of messages by device drivers complaining that USB hardware disappeared.

Due to the 'EMI' message I connected the USB modem with a 5 meter active extension cable but nothing changed.

Based on many power issues with USB on Raspberry Pi reported around the world, I added one 1000 µF capacitor directly to the HUAWEI stick to stabilize voltage during high current peaks. This was advised in several USB modem threads ... but nothing changed.

Then I checked the voltage (better late than never): Only 4.86 Volts arrived at the UMTS stick! So I grabbed an old wall power plug with USB port, labeled with 5.1 Volts/1 Ampere, and divided power and data path (see picture). To improve stability I added also 2 x 1000µF low-ESR capacitors (that might be overkill).



That's it! Now the system runs stable since weeks. Looks like the power issues reported with USB modems are mainly caused by voltages below 5 Volt and not by insufficient power supplies (even if small power supplies causes volatage drops during current peaks). The USB specification allows 4.75 - 5.25 Volts but my sticks are not capable to deal with the lower end.

Note that in the picture all connections share a common ground. Even if USB uses differential signaling on data lines, there is some communication relatively to ground, too. It does not work if ground is not connected at the upper cable. There is no need to interconnect the shieldings, so you should not do it until you have a good reason.

And do not use a long USB cable between Raspberry Pi and modem. Even with a high quality cable I got USB disconnects every few seconds when using a 5 meter long cable. This cable worked fine with my notebook but not with the Pi. With a 3 meter cable it runs stable.

Have fun!