Why won't my GPIO read anything other than 0?

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

Why won't my GPIO read anything other than 0?

Jump to solution
1,211 Views
joshbarnheiser
Contributor I

Hi,

I have a custom iMX6 board with multiple GPIO pins on it being used. All of the GPIOs that I am using as outputs work and all but one of my inputs work. The input that is not working has the same voltage divider and filtering capacitors as the other inputs, so the circuitry is the same. For some reason GPIO7_IO01 always reads 0 regardless of whether the input pin is at 0V or 3.3V. I use the below commands to read the input:

echo 193 >> /sys/class/gpio/export

echo in >> /sys/class/gpio/gpio193/direction

cat /sys/class/gpio/gpio193/value

In my device tree, I have tried with the pin not specified as anything and throwing in pinctrl_hog set as below:

 MX6QDL_PAD_SD3_DAT4__GPIO7_IO01            0x0001B0B0

In both cases, 0 is always read. The SD3 pins are not being used for an SDIO interface. I am using four of the SD3 pins for my two CAN interfaces (CMD, CLK, DAT0 and DAT1). Some of the other pins are being used for GPIO (DAT6, DAT7 and RST) and they work. The other GPIO are not specified in the device tree.

I am really at a loss for this one, any ideas?

Thanks,

Josh

Labels (2)
Tags (1)
0 Kudos
1 Solution
982 Views
igorpadykov
NXP Employee
NXP Employee

Hi Josh

one can check if that pad was used in uboot. Seems most

simple way to attach jtag debugger (or add printfs) and look at

GPIO registers described in Chapter 28 General Purpose Input/Output (GPIO)

i.MX6DQ Reference Manual
https://www.nxp.com/docs/en/reference-manual/IMX6DQRM.pdf

Best regards
igor
-----------------------------------------------------------------------------------------------------------------------
Note: If this post answers your question, please click the Correct Answer button. Thank you!
-----------------------------------------------------------------------------------------------------------------------

View solution in original post

0 Kudos
3 Replies
983 Views
igorpadykov
NXP Employee
NXP Employee

Hi Josh

one can check if that pad was used in uboot. Seems most

simple way to attach jtag debugger (or add printfs) and look at

GPIO registers described in Chapter 28 General Purpose Input/Output (GPIO)

i.MX6DQ Reference Manual
https://www.nxp.com/docs/en/reference-manual/IMX6DQRM.pdf

Best regards
igor
-----------------------------------------------------------------------------------------------------------------------
Note: If this post answers your question, please click the Correct Answer button. Thank you!
-----------------------------------------------------------------------------------------------------------------------

0 Kudos
982 Views
joshbarnheiser
Contributor I

Thanks Igor,

You were correct, uboot was setting it as an SDIO pin, which affected it in some way. I removed that part from my uboot and it reads correctly now. 

As a more detailed explaination of what I had to do, in the .c file for my board I commented out the lines setting the gpio pins as SDIO and one other line setting another SD3 pin to an output. They are the below lines.

/*MX6_PAD_SD3_DAT4__SD3_DATA4 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
MX6_PAD_SD3_DAT5__SD3_DATA5 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
MX6_PAD_SD3_DAT6__SD3_DATA6 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
MX6_PAD_SD3_DAT7__SD3_DATA7 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
MX6_PAD_NANDF_D0__GPIO2_IO00 | MUX_PAD_CTRL(NO_PAD_CTRL),*/ /* CD */

.....

//gpio_direction_input(USDHC3_CD_GPIO);

I'm not using SD3 on my board so this worked for me.

Josh

0 Kudos
982 Views
fabio_estevam
NXP Employee
NXP Employee

Hi Josh,

In order to set SION bit in your device tree:

 MX6QDL_PAD_SD3_DAT4__GPIO7_IO01            0x4001B0B0

(Need to set bit 30)

Hope this helps.

0 Kudos