안녕하세요.

저는 Digi connectCore 8X SBC Pro(SoM은 NXP i.MX8QuadXPlus 사용)로 개발을 하고 있습니다.

GPIO0_IO05에 대한 GPIO mode와 direction을 설정하고 싶은데 잘 안돼서 문의 글 올려드립니다.


어떻게 하면 GPIO 제어를 할 수 있을까요?

 

지금까지 디바이스 트리를 통해 GPIO를 설정했던 방법을 공유드리오니, 

잘못되거나 놓치고 있는 점을 알려주시면 감사드리겠습니다


1) GPIO0_IO05에 대한 i.MX 8x pad 명을 검색

아래 웹 사이트를 통해 SoM의 관련 pad 명을 찾을 수 있었습니다.

https://www.digi.com/resources/documentation/digidocs/PDFs/90002295.pdf

 

ESAI0_TX1이라는 pad 명을 찾았고, 이는 Ethernet과 관련있다는 것을 알았습니다.

또한 ESAI0_TX1에 대한 pad macro들을 찾았습니다.

 

SC_P_ENET0_RGMII_RXD3_CONN_ENET0_RGMII_RXD3

SC_P_ESAI0_TX1_CONN_ENET1_RGMII_RXD3

 

2) GPIO pad에 대한 디바이스 트리 셋팅

아래 웹 사이트를 참고로 GPIO pad에 대한 디바이스 트리를 셋팅했습니다.

https://github.com/FrankBau/meta-marsboard-bsp/wiki/iMX6-Pad-Mux-and-Pad-Control

 

아래는 디바이스 트리 셋팅 내용입니다.

 

/* IOMUX */

&iomuxc {

        pinctrl-names = "default", "default";

        pinctrl-0 = <&pinctrl_expansion>;

        pinctrl-1 = <&pinctrl_hog>;

           /* Expansion Connector */

        pinctrl_expansion: expansiongrp {

                fsl,pins = <

                                 . . .

 

pinctrl_hog: hoggrp {

                fsl,pins = <

                                 /* (1<<3): output drive strength of 150 Ohm at 3.3V */

                        SC_P_ENET0_RGMII_RXD3_CONN_ENET0_RGMII_RXD3     8

                        SC_P_ESAI0_TX1_CONN_ENET1_RGMII_RXD3    8

                >;

        };

          

};

 

3) sysfs에서 GPIO 상태 확인

커널 부팅 후 sysfs에서 GPIO 상태를 확인했습니다.

GPIO0_IO05은 GPIO 커널 번호가 485인데, sysfs에서 해당 번호의 GPIO를 찾을 수 없었습니다.


아래 웹 사이트를 참고로 계산한 GPIO 번호 계산 식입니다. 

https://www.digi.com/resources/documentation/digidocs/embedded/android/pie/cc8x/bsp_r_gpio_8x

N = 480 – (32 * <port_index>) + pin

ex) GPIO0_IO05(port 0, pin 5) is: 480 + 5 = 485

 

아래는 sysfs에서 GPIO 확인 결과입니다.

ccimx8xsbcpro:/ # cat /sys/kernel/debug/gpio                                  

gpiochip9: GPIOs 204-223, parent: platform/mca-cc8x-gpio, mca-gpio, can sleep:

 gpio-210 (                    |ADC                 ) in  lo   

 gpio-211 (                    |ADC                 ) in  lo   

 

gpiochip8: GPIOs 224-255, parent: platform/58222000.gpio, 58222000.gpio:

 

gpiochip7: GPIOs 256-287, parent: platform/5d0f0000.gpio, 5d0f0000.gpio:

 

gpiochip6: GPIOs 288-319, parent: platform/5d0e0000.gpio, 5d0e0000.gpio:

 

gpiochip5: GPIOs 320-351, parent: platform/5d0d0000.gpio, 5d0d0000.gpio:

 

gpiochip4: GPIOs 352-383, parent: platform/5d0c0000.gpio, 5d0c0000.gpio:

 gpio-352 (                    |PCIe reset          ) out hi   

 gpio-353 (                    |PCIe CLKREQ         ) out lo   

 gpio-357 (                    |3v3_usb_sw          ) out hi   

 gpio-374 (                    |cd                  ) in  hi IRQ

 

gpiochip3: GPIOs 384-415, parent: platform/5d0b0000.gpio, 5d0b0000.gpio:

 gpio-393 (                    |mca-fw-update       ) out lo   

 gpio-394 (                    |BT power enable     ) out hi   

 gpio-395 (                    |PCIe DIS            ) out hi   

 gpio-396 (                    |epdev_on            ) out hi   

 gpio-397 (                    |3v3_eth0            ) out lo   

 

gpiochip2: GPIOs 416-447, parent: platform/5d0a0000.gpio, 5d0a0000.gpio:

 

gpiochip1: GPIOs 448-479, parent: platform/5d090000.gpio, 5d090000.gpio:

 

gpiochip0: GPIOs 480-511, parent: platform/5d080000.gpio, 5d080000.gpio:

 gpio-493 (                    |5v_display          ) out lo   

 gpio-494 (                    |3v3_audio           ) out lo   

 gpio-495 (                    |3v3_usb_hub         ) out hi   

 gpio-511 (                    |vcc                 ) out hi


답변 부탁드리겠습니다.

감사합니다.