USB power cycling poblem on RPI

Login or Register for Dates, Times and to Reply

 
Thread Tools Search this Thread
Special Forums Hardware USB power cycling poblem on RPI
# 1  
USB power cycling poblem on RPI

I am having a problem with cycling USB bus power on the RPI B+ (3.18.7+).

Each time I power the USB bus off and on, a device plugged into it gets a higher Device number, and eventually the bus crashes (does not enumerate new devices any more)

As a demonstration, I wrote the python script at the bottom, which just turns the bus on and off and runs lsusb in an infinite loop.
I had trouble with a USB GSM modem, but even when I plug a simple TI launchpad (MSP430 experimenter board) in the bus, it will disappear after some cycles.

I have the impression that the USB controller or software thinks there are 82 devices on the bus, which is probably why it crashes.
Is there a way to completely reset the USB bus software/hardware so it will start counting from zero again?
Another solution would be a command that removes the device from the bus before I turn it off, so it would probably get the same Device number when it is switched on again.
I have tried without success:
- Increasing the sleep times in the script
- Running "/etc/init.d/udev restart"
- turning the entire hub off and on with "hub-ctrl -h 0 -p 0/1"
- “echo '1-1' | tee /sys/bus/usb/drivers/usb/unbind” (and re-bind afterwards)


The output of the python script when it starts to fail (after about 80 cycles) is:

Code:
Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp.
Bus 001 Device 081: ID 0451:f432 Texas Instruments, Inc. eZ430 Development Tool
Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp.
Bus 001 Device 082: ID 0451:f432 Texas Instruments, Inc. eZ430 Development Tool
Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp.
Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp.
Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub


the script itself is:

Code:
#!/usr/bin/python
from subprocess import call
import time

while True:
call(["hub-ctrl", "-h", "0", "-P", "2", "-p", "0"]) # turn off the USB modem
time.sleep(1)
call(["hub-ctrl", "-h", "0", "-P", "2", "-p", "1"]) # turn off the USB modem
time.sleep(2)
call(["lsusb"]) # print


When it (the modem) fails, I get the 4 lines below in the /var/log/messages file after unplugging and re plugging the device ONCE:
Code:
Feb 19 15:32:43 aardbei kernel: [ 8195.531922] usb 1-1.5: new full-speed USB device number 82 using dwc_otg
Feb 19 15:32:43 aardbei kernel: [ 8195.991933] usb 1-1.5: new full-speed USB device number 83 using dwc_otg
Feb 19 15:32:43 aardbei kernel: [ 8196.451884] usb 1-1.5: new full-speed USB device number 84 using dwc_otg
Feb 19 15:32:44 aardbei kernel: [ 8196.951966] usb 1-1.5: new full-speed USB device number 85 using dwc_otg

Posts: 20Joined: Wed Mar 05, 2014 9:32 am

Last edited by Don Cragun; 02-21-2015 at 04:07 AM.. Reason: Add CODE and ICODE tags.
# 2  
It may be possible, if you compile your USB controllers etc. drivers as modules. Then you could rmmod them and modprobe them to reload.

I know it's difficult to get a listing of a crash from the kernel after it's crashed, but it would be interesting to see it if you could manage a photograph.

Most USB controllers can't do this, I'm not surprised there are bugs or pitfalls. Perhaps there's something that needs to be done first, before you force it off.
# 3  
...and you certainly do not need all of Python to do this. Just do this:

Code:
#!/bin/sh

while true
do
        hub-ctrl -h 0 -P 2 -p 0
        sleep 1
        hub-ctrl -h 0 -P 2 -p 1
        sleep 1
        lsusb
done

# 4  
Linux USB cycling problem

Thanks for the help,
The kernel doesn't crash, only the USB part does (not detecting new devices that are plugged in).

I thought of using modules as well, but then I have to get the sourcecode, recompile the kernel and on the next RPI upgrade the problem will reappear.
I think it is unavoidable that I will have to reboot each time this happens (which will probably be about once a day)

I always thought the advantage of Linux over windows was that you didn't have to reboot to resolve silly problems like this...
# 5  
Can you even do this in Windows?

Anyway, you know a method that may help and refuse to use it. And don't seem to be reporting the bug to kernel.org either, which would be another thing that might help.
Login or Register for Dates, Times and to Reply

Previous Thread | Next Thread
Thread Tools Search this Thread
Search this Thread:
Advanced Search

Test Your Knowledge in Computers #273
Difficulty: Easy
In December 1939, Turing solved the essential part of the naval indicator system, which was easier and less complex than the indicator systems used by the other services.
True or False?

7 More Discussions You Might Find Interesting

1. IP Networking

Is bond0 ready and a bonding interface? - 4G Bonding Router Problems (RPI)

HI all, First post on the forum, and my first proper project on the Paspberry Pi, so sorry if this is in the wrong place. I am trying to turn my Pi in to a 3G/4G Bonding router. I have been researching and trying this for a week or so now. The basic plan is to have up to 6 ZTE MF823 USB... (0 Replies)
Discussion started by: elliottlc
0 Replies

2. UNIX for Dummies Questions & Answers

USB-USB cable between linux and windows computers

Is there an easy way to setup a cross-over cable (USB-USB) between a linux box and a windows PC? My 2 machines are next to each other but I really do not want to keep transfering my files using my USB drive. Thanks! (4 Replies)
Discussion started by: Xterra
4 Replies

3. Shell Programming and Scripting

WGET cycling on an updating page

Hello, I am experiencing an issue while downloading a few pages using wget. All of them work without a problem except one which is a page that does a tail on the log and as a result is constantly getting updated. wget here seems to run endlessly and needs to be manually killed. I wanted to... (0 Replies)
Discussion started by: prafulnama
0 Replies

4. Shell Programming and Scripting

KSH switches editin modes when cycling through history. Why?

Hello all, Working in KSH using Solaris, the default editor is VIM. So, per session, I run a small rc script which calls export editor=emacs This works for commands at the prompt. But if I cycle through command history (Using the up arrow) the command line editor defaults to VIM. How can I... (2 Replies)
Discussion started by: eggmatters
2 Replies

5. Solaris

Poblem with libX11.so.4

good evening everyone i am getting this library problem with intel platform architec :confused: after installing the entire sun-5.10 with a hard configuration intel945chipset core2dual processor & 2GB ram with disk sapace of 40gb. after install the entire os my machine is rebooting... (1 Reply)
Discussion started by: ravinder singh
1 Replies

6. AIX

How to tell Power 4/5/6

I'm looking for a way - from the command line - to tell whether a given AIX system I have is a Power5, Power4 or Power6 machine - it seems like there would be an option to 'uname' but I couldn't find one. Thanks! (3 Replies)
Discussion started by: thomn8r
3 Replies

7. UNIX for Dummies Questions & Answers

Power Cycling

Hello Friends , I have been reading some of the Sys Admin notes when i came across a term "Power Cycling" Can anybody please explain what this means Thank You (1 Reply)
Discussion started by: DPAI
1 Replies

Featured Tech Videos