Hi,

On 02-03-16 17:54, Hendrik wrote:
I am trying to get an Olimex A20-SOM running but I am experiencing strange 
problems on some of the GPIO pins on the device.

We are using (amongst others) pin PE6  as GPIO output but somehow there seems 
to be a change between U-Boot 2015.10 and 2016.01 in the default behaviour of 
these particular pins.

When generating a default config in 2016.01 (for example using 
'A20-OLinuXino-Lime_defconfig' or 'A20-Olimex-SOM-EVB_defconfig') and then 
booting the device with this config I can observe the following:

'gpio status -a PE6' tells me that the pin is INPUT and the value is sometimes 
0 and sometimes 1. When I measure the pin that is connected to 3V3 using a 10K 
pull up on my board, I measure 0.83V. That is strange because it should be 3.3V 
(as it is said to be an input).

'gpio set PE6' tells me that the pin is now OUTPUT and set to 1, so I should 
measure 3V3 on the pin but the pin Voltage is actually around 0.71V. Switching 
the pin low with 'gpio clear PE6' gives back a voltage of 0.83V. It seems that 
internally there is a pull down active or something although I cannot find this 
specifically set in the .config configuration file.

When using U-Boot 2015.10 the problem disappears completely (still using the 
defconfig). Although I'm fine with using U-Boot 2015.10, I think it is weird 
that the GPIO pin does not follow any of my instructions and seems to live its 
own life in 2016.01 and 2016.03-rc3.

So summarized, pin PE6 in U-Boot 2015.10 is OK:

     PE6 Set to input (default at startup) = 3V3 measured
     PE6 Set to output, high = 3V3 measured
     PE6 Set to output, low = 0V measured

In U-Boot 2016.01 and 2016.03-rc3 it's not OK

     PE6 Set to input (default at startup) = 0.83V measured
     PE6 Set to output, high = 0.83V measured
     PE6 Set to output, low = 0.71V measured

In addition to this; I'm booting a mainline kernel (not the special sunxi 
kernel). I can manage the GPIO pins there as well but the behaviour is the same 
(the same voltages measured). The kernel does not seem to have any specific 
runtime option for enabling or disabling pull ups or downs, but I didn't really 
look into this as u-boot already misbehaves and some of our peripherals won't 
start on boot because of this.

You can compare the drive-strength and internal pull-up/down
settings between versions by booting into Linux and then doing:

sudo ./pio -m PE6

This will show 4 numbers first number is the pinmux, second the
pull-up/down setting, third the drive strength
and last the value (read / driven out).

You can find the pio tool here:

https://github.com/linux-sunxi/sunxi-tools/blob/master/pio.c

I expect you to find that the values have not changed
between u-boot versions, more likely the board is using
some ldo or some such to provide PORTE with power, and
this commit is the culprit:

http://git.denx.de/?p=u-boot.git;a=commitdiff;h=02cc27c74f9b884b538bcd1b93342a4c05b5d608

You could try reverting that, or simply adding:

CONFIG_AXP_ALDO3_VOLT=2800
CONFIG_AXP_ALDO4_VOLT=2800

to the defconfig for your board

Regards,

Hans
_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to