D3-P 보드 Dts 내부 풀업 설정 관련 질문드립니다

안녕하세요, RAPA 교육생입니다.
현재 D3-P 보드에서 gpc-4(GPIO65), gpc-29(GPIO90) 핀을 리미트 스위치(INPUT)으로 사용하고 있으며, 해당 핀들에 대해 DTS 상에서 내부 풀업을 설정했음에도 불구하고 전기적으로 풀업이 되지 않고 있어서 문의를 드립니다. dts는 아래와 같이 작성하였고,

물리적으로 풀업 저항을 연결했을 경우 정상 동작함을 확인했습니다. 즉, DTS 상의 내부 풀업 설정이 제대로 되지 않았다는 것을 확인할 수 있었습니다.

해당 핀들에 대한 내부 풀업이 적용되지 않는 원인이 있을지, 물리적 연결을 해야 하는 상황일지 문의드립니다.

topst/build-main/tmp/work/tcc8050_main-telechips-linux/linux-telechips/5.4.159-r0/git/arch/arm64/boot/dts/tcc/tcc8050-linux-topst-d3-pre-v0.1.dts 의 pinctrl 부분
```
window_limit_pins: window_limit_pins {

telechips,pins = “gpc-4”, “gpc-29”; // 리미트 스위치

telechips,pin-function = <0>;

telechips,bias-pull-up;

telechips,input-enable;

};
```

보드에서 pinmux 관련 결과

root@telechips-tcc8050-main:~# cat /sys/kernel/debug/pinctrl/*/pinmux-pins | grep gpc
pin 61 (gpc-0): 16900000.spi (GPIO UNCLAIMED) function gpsb15_bus_spi group gpsb15_bus_spi
pin 62 (gpc-1): 16900000.spi gpioc:62 function gpsb15_bus_spi group gpsb15_bus_spi
pin 63 (gpc-2): 16900000.spi (GPIO UNCLAIMED) function gpsb15_bus_spi group gpsb15_bus_spi
pin 64 (gpc-3): 16900000.spi (GPIO UNCLAIMED) function gpsb15_bus_spi group gpsb15_bus_spi
pin 65 (gpc-4): window gpioc:65 function window_limit_pins group window_limit_pins
pin 66 (gpc-5): (MUX UNCLAIMED) (GPIO UNCLAIMED)
pin 67 (gpc-6): (MUX UNCLAIMED) gpioc:67
pin 68 (gpc-7): (MUX UNCLAIMED) (GPIO UNCLAIMED)
pin 69 (gpc-8): (MUX UNCLAIMED) (GPIO UNCLAIMED)
pin 70 (gpc-9): (MUX UNCLAIMED) (GPIO UNCLAIMED)
pin 71 (gpc-10): 16600000.serial (GPIO UNCLAIMED) function uart18_data group uart18_data
pin 72 (gpc-11): 16600000.serial (GPIO UNCLAIMED) function uart18_data group uart18_data
pin 73 (gpc-12): (MUX UNCLAIMED) (GPIO UNCLAIMED)
pin 74 (gpc-13): (MUX UNCLAIMED) (GPIO UNCLAIMED)
pin 75 (gpc-14): 12400000.dpv14_tx (GPIO UNCLAIMED) function dp_hpd_gpio group dp_hpd_gpio
pin 76 (gpc-15): (MUX UNCLAIMED) (GPIO UNCLAIMED)
pin 77 (gpc-16): 16610000.serial (GPIO UNCLAIMED) function uart20_data group uart20_data
pin 78 (gpc-17): 16610000.serial (GPIO UNCLAIMED) function uart20_data group uart20_data
pin 79 (gpc-18): 16610000.serial (GPIO UNCLAIMED) function uart20_rtscts group uart20_rtscts
pin 80 (gpc-19): 16610000.serial (GPIO UNCLAIMED) function uart20_rtscts group uart20_rtscts
pin 81 (gpc-20): 16310000.i2c (GPIO UNCLAIMED) function i2c15_bus group i2c15_bus
pin 82 (gpc-21): 16310000.i2c (GPIO UNCLAIMED) function i2c15_bus group i2c15_bus
pin 83 (gpc-22): (MUX UNCLAIMED) (GPIO UNCLAIMED)
pin 84 (gpc-23): (MUX UNCLAIMED) (GPIO UNCLAIMED)
pin 85 (gpc-24): (MUX UNCLAIMED) (GPIO UNCLAIMED)
pin 86 (gpc-25): window gpioc:86 function window_motor_pins group window_motor_pins
pin 87 (gpc-26): 16620000.serial (GPIO UNCLAIMED) function uart22_data group uart22_data
pin 88 (gpc-27): 16620000.serial (GPIO UNCLAIMED) function uart22_data group uart22_data
pin 89 (gpc-28): 16030000.pwm (GPIO UNCLAIMED) function pwm64_out group pwm64_out
pin 90 (gpc-29): window gpioc:90 function window_limit_pins group window_limit_pins

감사합니다.

안녕하십니까. TOPST 매니저입니다.

혹시 진행하고 계신 프로젝트에서 풀업이 어떠한 경유로 필요한지 알 수 있을까요?

또한, 전기적으로 어떻게 풀업 상황을 검증하셨는지도 말씀부탁드리겠습니다.

저희가 상황을 구체적으로 인지하면 더 정확한 가이드를 드릴수 있을 것 같습니다!

감사합니다.

안녕하십니까,

저희 프로젝트 내에서 리미트 스위치가 눌렸는지 / 아닌지를 판단하여 제어를 수행해야 하는 경우가 있습니다. 리미트 스위치의 핀에-GPIO 핀을 연결하여, 해당 핀 값을 읽어 판단하는 방식으로 내부 로직을 구현해 두었습니다.

KW-10R 리미트 스위치를 사용하고 있고, 스위치가 눌리지 않았을 때 (open) floating 상태이기 때문에 풀업 저항을 달아주어 ‘1’ 즉 눌리지 않은 상태를 보장하고자 하였습니다.

아래 그림처럼 실제 물리적인 저항을 달아 회로를 구상하였을 때는 스위치가 잘 동작함을 확인했습니다.

따라서 GPIO 핀에 pull up 설정을 해주고 싶었고, 이에 따라 dts 수정을 해서 내부 풀업을 구현하고자 하였습니다.

감사합니다.

넵. 말씀 감사합니다.

혹시 보고계신 Schematic 문서가 따로 있으실까요?

사용하시고자 하는 핀이 보드에서 어느핀인지도 말씀부탁드립니다

네, 공식 사이트에 올라와 있는 문서(위 캡쳐본) 기준,
GPIO 65, GPIO 90 입니다.
gpc-4, gpc-29 이며, 아래 캡쳐와 같이 dts 변경으로 핀이 등록된 것은 확인하였습니다. 풀업 설정을 하는 부분에서 어려움을 겪고 있습니다.

추가로 참고하고 있는 문서는

여기 사이트와 github에 올라와 있는 D3-P schematic입니다.

안녕하세요 TOPST 매니저입니다.
DTS 부분은 현재 제가 테스트 해보고 있습니다.
제가 생각하기에는 수정하신 부분에서 단순하게 선언만 해두셔서 설정이 제대로 되지 않은 것으로 파악됩니다.
tcc8050-subcore.dtsi 파일을 열어보시면

다음 이미지와 같이 핀 선언과 함께 여러 선언을 해야 하는 것으로 보입니다.
해당 부분은 제가 확인 및 테스트 해보고 다시 답변 드리겠습니다.

우선 커널 내부에서
$ echo “83” > /sys/class/gpio/export
$ echo “out” > /sys/class/gpio/gpio83/direction
$ echo 1 > /sys/class/gpio/gpio83/value

다음과 같이 선언하시면 출력 값이 1인 상태로 변경되게 됩니다.
우선 이렇게 사용하시는 걸 추천드립니다~

감사합니다.

안녕하세요, 답변 감사드립니다.

우선 echo 명령을 통해 GPIO 출력 값을 1로 변경할 수 있다는 점은 확인하였습니다.
다만, TOPST 보드에서 echo 1 방식은 GPIO를 출력 모드로 설정한 뒤 High 신호를 출력하는 것으로,
입력 모드 상태에서 기본적으로 High 상태를 유지하는 pull-up 설정과는 다소 차이가 있는 것 같아 보입니다.

현재 저희는 리미트 스위치 입력 핀을 GPIO 입력 모드로 설정한 상태에서,
스위치가 눌리지 않았을 때에도 안정적으로 High 상태를 유지하기 위해 pull-up 설정이 필요한 상황입니다.

이에 따라 tcc8050-linux-topst-d3-pre-v0.1.dts 파일에서 다음과 같이 설정을 추가하였습니다:

// model 하단
window {
	compatible = "telechips,window-driver";
	status = "okay";

	limit-upper-gpio = <&gpc 4 GPIO_ACTIVE_LOW>;
	limit-lower-gpio = <&gpc 29 GPIO_ACTIVE_LOW>;
	in1-gpio = <&gpg 6 GPIO_ACTIVE_HIGH>;  
	in2-gpio = <&gpc 25 GPIO_ACTIVE_HIGH>;  

	pinctrl-names = "default";
	pinctrl-0 = <&window_limit_pins &window_motor_pins>;
};

//&pinctrl 블록 내부

	window_limit_pins: window_limit_pins {
		telechips,pins = "gpc-4", "gpc-29";  // 리미트 스위치
		telechips,pin-function = <0>;
		telechips,bias-pull-up;
		telechips,input-enable;
	};

위 설정에서 telechips,bias-pull-up; 구문이 내부 풀업을 활성화하기 위한 올바른 방식인지, 제가 수정하고 있는 dts 파일이 올바른지 궁금합니다.
만약 내부적으로 해당 설정이 적용되지 않거나 제한이 있다면, 물리적인 외부 풀업 저항을 사용하는 방식으로 전환하겠습니다!

감사합니다.

우선 외부 풀업 저항을 사용하는 방식으로 하시는 걸 추천드립니다.
감사합니다.

네 그렇게 진행하도록 하겠습니다.

답변 감사드립니다! :grinning_face:

1 Like

안녕하세요,

pinctrl 노드 내부에,

핀을 등록한 후 telechips,pull-up; 설정을 추가해 주었을 때

해당 핀 내부 풀업이 정상적으로 적용되는 것을 확인하였습니다.

신경써서 확인해 주셔서 감사합니다.

1 Like