Page 1 of 1

Invalid Channel

Posted: Thu Jan 14, 2021 10:52 pm
by fnouguie
Hi everyone,

I just bought a stereopi and tried my first tests on it. I want to play with stereo capability and stepper motors.
While I was waiting for the stereopi board delivery, I played with a stepper motor (and its controler) on a regular Raspberry pi 3 and it was working just fine.
I wired the motor on the stereoPi card (taking care of the 180 deg rotation of the GPIO pins) but wasn't able to make it running properly.

While initiating the pins to use (7,11,13,15, 31,33,35,37):
>> GPIO.setmode(GPIO.BOARD)
>> GPIO.setup(pin, GPIO.OUT)

I get first a warning for pin #7:
"RuntimeWarning: This channel is already in use, continuing anyway. Use GPIO.setwarnings(False) to disable warnings."
then an error when setting up pin #31:"The channel sent is invalid on a Raspberry Pi"


I tried to change GPIO.BOARD to GPIO.BCM in GPIO.setmode() but it did not help.
Any clue ?

Thanks in advance
Fred

Re: Invalid Channel

Posted: Wed Jan 20, 2021 2:51 pm
by stereomaton
It seems that the GPIO you want to use is used by another program/driver.
It is quite strange since there is nothing special there that could a priori be in conflict, though I do not have the original image on my StereoPi to compare.

The linux kernel has a special file to see what GPIO are in use by the drivers: /sys/kernel/debug/gpio
If it does not exist (I do not have the original image in my StereoPi to check), you may have to mount the debugfs filesystem: mount -t debugfs none /sys/kernel/debug/

For example, on my current system I have:

Code: Select all

pi@raspberrypi:~ $ sudo cat /sys/kernel/debug/gpio
gpiochip0: GPIOs 0-53, parent: platform/3f200000.gpio, pinctrl-bcm2835:
 gpio-3   (                    |sysfs               ) in  hi IRQ

gpiochip2: GPIOs 100-101, brcmvirt-gpio, can sleep:
 gpio-100 (                    |led0                ) out hi    

gpiochip1: GPIOs 504-511, parent: platform/soc:firmware:expgpio, raspberrypi-exp-gpio, can sleep:
We see that GPIO 3 ("BCM notation") is used by sysfs (the driver that allows to control the GPIO in user programs) and that the GPIO 100 is used by the led driver (the led is showing activity on SD card).

To know which program uses the GPIO through a sysfs driver, you can run fuser $(realpath /sys/class/gpio/gpio3/value) (for GPIO 3 here) This gives the process ID of the program, which you can then pass to other programs to retrieve details, for example ps u -p 486 (for process ID 486 here)

This can be a first step to see what is going on.