How to use PocketBeagle analog inputs 5-7?

I can read analog inputs 0-4 from /sys/bus/iio/devices/iio:device0/in_voltageN_raw but I can’t get analog inputs 5-7 to work. Inputs 5 and 6 don’t have analog as a choice in config-pin:

$ config-pin -l P1_2
default gpio gpio_pu gpio_pd pruout pruin

Analog input 7 (P2_36) doesn’t have any other function, but it ignores any analog input voltage.

Is there a trick to using inputs 5-7 or is support under development?

Ken

Hi Ken
some time ago I could read the analog inputs with:
cape_enable=bone_capemgr.enable_partno=BB-ADC
in uEnv.txt
But it was another kernel.

Since 5-7 ADC's are shared with a normal pin, you need to stick the
gpio in gpio mode with config-pin.. (no pull-up, no pull-down) then it
might work..

Haven't personally tried this yet..

Regards,

I can read analog inputs 0-4 from
/sys/bus/iio/devices/iio:device0/in_voltageN_raw but I can’t get analog
inputs 5-7 to work. Inputs 5 and 6 don’t have analog as a choice in
config-pin:

$ config-pin -l P1_2
default gpio gpio_pu gpio_pd pruout pruin

Analog input 7 (P2_36) doesn’t have any other function, but it ignores any
analog input voltage.

Is there a trick to using inputs 5-7 or is support under development?

Since 5-7 ADC’s are shared with a normal pin, you need to stick the
gpio in gpio mode with config-pin… (no pull-up, no pull-down) then it
might work…

Haven’t personally tried this yet…

I tested all 3 inputs as part of the board bring-up/validation process, but I was using a different device tree. I’m trying to get back to it with what Robert ships in the latest images, hopefully in the next day or so, but I’d like to provide some notes that might be of some use:

For 5 and 6, yeah, Robert’s right on making sure the GPIO is set to input mode (should be default?) and that there is no pull-up/pull-down enabled on the pin. Do note, however, that there is a 10k pull-down due to the resistor divider on the input. All voltages on the ADC will be half of what they are on the headerpin.

For 7, there is an analog mux, but it should default to the status of the pin. There are some voltages internal to the PMIC that could be read, put the header pin status should be the default.

Thanks Robert and Jason. For pin 5 and 6, your solution works:

Pin 5:
$ config-pin P2_35 gpio

$ echo in > /sys/class/gpio/gpio86/direction

$ cat /sys/bus/iio/devices/iio:device0/in_voltage5_raw
1571

Pin 6:

$ config-pin P1_2 gpio

$ echo in > /sys/class/gpio/gpio87/direction
$ cat /sys/bus/iio/devices/iio:device0/in_voltage6_raw

1571

Because of the voltage divider, the values are half of the “normal” values.

But I still can’t get pin 7 to work:
$ while [ 1 ]; do cat /sys/bus/iio/devices/iio:device0/in_voltage7_raw; done

This gives me a sequence of values starting around 1600 dropping by about 10 every second, unrelated to my input, slowing down to about 658. Sort of like the voltage if you were discharging a capacitor.

So analog input 7 seems to be measuring something, but I don’t know what. Maybe some PMIC thing?

(I’m using Linux beaglebone 4.4.91-ti-r133 #1 SMP Tue Oct 10 05:18:08 UTC 2017 armv7l GNU/Linux)

Ken

Thanks Robert and Jason. For pin 5 and 6, your solution works:

Pin 5:
$ config-pin P2_35 gpio

$ echo in > /sys/class/gpio/gpio86/direction

$ cat /sys/bus/iio/devices/iio:device0/in_voltage5_raw
1571

Pin 6:

$ config-pin P1_2 gpio

$ echo in > /sys/class/gpio/gpio87/direction
$ cat /sys/bus/iio/devices/iio:device0/in_voltage6_raw

1571

Because of the voltage divider, the values are half of the “normal” values.

But I still can’t get pin 7 to work:
$ while [ 1 ]; do cat /sys/bus/iio/devices/iio:device0/in_voltage7_raw; done

This gives me a sequence of values starting around 1600 dropping by about 10 every second, unrelated to my input, slowing down to about 658. Sort of like the voltage if you were discharging a capacitor.

So analog input 7 seems to be measuring something, but I don’t know what. Maybe some PMIC thing?

I’m not sure how to check the status of the analog mux. Someone posted a driver patch on the TI e2e forum to change the status. Maybe we should carry that patch or help submit to mainline?

https://e2e.ti.com/support/arm/sitara_arm/f/791/t/256567

Out of curiosity, can you try:

sudo i2cset -y -f 0 0x24 9 5

sudo i2cget -y -f 0 0x24 9

sudo cat /sys/bus/iio/devices/iio:device0/in_voltage7_raw

I pulled the magic numbers from the patch and the files it references.

1 Like

Thanks, Jason. Your magic i2cset commands worked and now I can use analog input 7.

Ken

Hi All, trying to get analogue7 working on pocketbeagle. Jason’s magic i2cset commands work for me, but I’m stuck trying to write the equivalent commands into C++. So far I have the code below, which fails on the ioctl. i2cdetect shows the pmic at address 24 with a ‘UU’ and I can see an entry at /sys/bus/i2c/devices/i2c-0/0-0024. Seems like some conflict with the linux driver for the PMIC not allowing me to access through ioctl. Any clues?

if((i2cfile=open(“/dev/i2c-0”, O_RDWR))<0){
rt_printf(“failed to open internal i2c bus\n”);
} // works ok
if(ioctl(i2cfile,I2C_SLAVE,0x24)<0){
rt_printf(“i2c slave address failed\n”);
} // fails

Hey Rich, you figured it out…:wink: use I2C_SLAVE_FORCE

seems a pretty hacky way to get analogue input 7 working, am I missing something?

if(ioctl(i2cfile,I2C_SLAVE_FORCE,0x24)<0){
	rt_printf("i2c slave address failed\n");
}
char writeBuffer[2]={0x09,0x05};
if(write(i2cfile,writeBuffer,2)!=2){
	rt_printf("failed to write to i2c\n" );
}