기존 이솝 임베디드 포럼의 지식인 서비스가 게시판 형태로 변경되었습니다.
안녕하세요.
저는 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
답변 부탁드리겠습니다.
감사합니다.
i.mx 시리즈가 key 설정이 꽤 어렵다라고 듣기는 했는데, 내일 간단하게 물어봐서 답이 나오면 댓글 써 놓도록 하겠습니다.(뭔가를 많이 해야 한다라고 하더군요)
요즘은 워낙 이런 문제에 대해 설명이 없더라고요...ㅠ.ㅠ