도와주세요!!
안녕하세요.
저는 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
답변 부탁드리겠습니다.
감사합니다.
오래 전에 해결법을 터득해서 해결했는데, 이제 코멘트 달게 됐습니다.
기본적인 디바이스 드라이버 구현 방법을 몰라서 해맸던 것 같고, 안드로이드 패치된 커널이라서 해맸던 것 같습니다.
감사합니다.