특정 GPIO 핀을 내보낼 수 없습니다. GPIO 핀의 용도를 확인하고 레지스터에 액세스하는 방법은 무엇입니까?

특정 GPIO 핀을 내보낼 수 없습니다. GPIO 핀의 용도를 확인하고 레지스터에 액세스하는 방법은 무엇입니까?

저는 i.mx6 보드(yocto(jethro))를 사용하고 장치 트리를 구성하고 있습니다. dts 파일을 변경하고 dtb 파일을 부팅 파티션에 배치했습니다. dts 파일에 GPIO4_IO19를 다음과 같이 설정했습니다.

&iomuxc {
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_hog_1>;
imx6ul-evk {
pinctrl_hog_1: hoggrp-1 {
fsl,pins = <
...
MX6UL_PAD_CSI_VSYNC__GPIO4_IO19 0x0000B0B0
...
>;
};
...

원래 MX6UL_PAD_CSI_VSYNC__GPIO4_IO19는 다른 그룹(usdhcgrp)에 정의되었지만 주석 처리했습니다.

부팅 후 설정에 따라 gpio가 성공적으로 결정되었는지 확인합니다. 밝혀지다

echo 115 > /sys/class/gpio/export
-sh: echo: write error: Device or resource busy

그래서 이것을 확인해봤습니다.

cat /sys/kernel/debug/gpio

    GPIOs 0-31, platform/209c000.gpio, 209c000.gpio:
    gpio-10 (phy-reset ) out lo
    GPIOs 32-63, platform/20a0000.gpio, 20a0000.gpio:
    GPIOs 64-95, platform/20a4000.gpio, 20a4000.gpio:
    gpio-68 (ft5x06_irq_gpio ) in hi
    GPIOs 96-127, platform/20a8000.gpio, 20a8000.gpio:
    gpio-109 (? ) out lo
    gpio-115 (cd ) in lo
    gpio-116 (? ) out lo
    gpio-117 (? ) out lo
    gpio-118 (sysfs ) in hi
    GPIOs 128-159, platform/20ac000.gpio, 20ac000.gpio:
    gpio-128 (phy-reset ) out lo

CD는 gpio-115를 사용합니다. 어쩌면 이것은 카드 감지를 의미할 수도 있습니다. 상태를 읽기 위해 sysfs로 사용하고 싶습니다. 읽는 다른 방법이 있나요? 또한 gpio-10, 68, 109, 116, 117은 다른 장치에서 사용됩니다. sysfs를 통해 어떻게 사용할 수 있나요?

내가 해야 할 일은 레지스터에 올바른 값이 설정되어 있는지 확인하는 것이라고 생각합니다. 레지스터 값이 내가 설정한 값과 다르면 다른 프로세스에서 핀 제어를 설정하는 것이라고 추측합니다. 그런데 등록부에 접근하는 방법을 모르겠어요.

제가 gpio115에 대해 알고 있는 내용은 다음과 같습니다.

 mux_reg address: 0x01DC and the value.
 conf_reg address: 0x0468 and the value.
 input_reg address: 0x0000 and the value.

다른 GPIO와 동일합니다.

0x01DC에 액세스한 다음 linux(yocto)에서 값을 얻는 방법은 무엇입니까?

도와 주셔서 감사합니다.

답변1

핀 상태만 알고 싶다면 /sys/kernel/debug/gpio에 이미 표시되어 있습니다.

gpio-115 (cd ) in lo

입력으로 구성되어 있으며 현재 낮은 값을 가지고 있습니다. 슬롯에 카드를 삽입/제거하면 값이 변경됩니다!

레지스터 값에 직접 액세스하고 싶거나 액세스해야 하는 경우 유틸리티 devregs를 확인해 보세요!

관련 정보