QMK 컨트롤러를 RP2040을 사용하기로 결정하고, 트랙포인트를 연결 과는 과정에서 “PAL_MODE_OUTPUT_OPENDRAIN”이 발생했습니다.

QMK PS/2 문서 도입부를 보면 QMK에서 PS/2 마우스를 사용하기 위해서는 아래와 같이 “USART, interrupts, busywait” 중에 하나를 사용하는 것으로 나와있습니다.

There are three available modes for hooking up PS/2 devices: USART (best), interrupts (better) or busywait (not recommended).

RP2040에서도 “USART, interrupts, busywait” 중에서 써야 하는 것으로 생각하고 해결 방법을 찾으려고 검색을 많이 했었는데, 해결 방법은 의외로 간단했습니다.

RP2040 PIO Version
The PIO subsystem is a Raspberry Pi RP2040 specific implementation, using the integrated PIO peripheral and is therefore only available on this MCU.

문서를 읽어 나가다보면 RP2040에 대해서는 따로 설명이 되어 있는데, RP2040에서는 PIO 시스템을 사용하기 때문에 드라이버가 “USART, interrupts, busywait” 가 아닌 “vendor” 로 되어야 한다는 것이 소스코드에만 추가되어 있기 때문에 저 같은 초보자는 알아보기 힘들었던 것이었습니다.

    "ps2": {
        "clock_pin": "GP1",
        "data_pin": "GP0",
        "driver": "vendor",
        "enabled": true,
        "mouse_enabled": true
    }

QMK에서는 info.json의 사용을 권장하는 것 같지만, rp2040 사용 시 PIO 정의를 config.h에 해야 하기 때문에 주석 사용이 가능한 rules.mk에 아래와 같이 설정 했습니다.

BeforeAfter
rules.mkPS2_MOUSE_ENABLE = yes
PS2_ENABLE = yes
PS2_DRIVER = usart
PS2_ENABLE = yes
PS2_MOUSE_ENABLE = yes
PS2_DRIVER = vendor

개발자분들이야 손쉽게 알 수 있는 내용이었겠지만, 저처럼 맨땅에 헤딩해야 하는 분들 중에 rp2040 사용 시 “PAL_MODE_OUTPUT_OPENDRAIN” 에러를 접하셨을 때 도움이 되었으면 합니다.