먼저 알아둘 용어
USB(Universal Serial Bus) 열거·포트(port) — USB 열거는 컴퓨터가 연결된 장치를 인식하고 정보를 읽어 사용할 준비를 하는 과정입니다. 전원이 들어왔다고 해서 이 과정이 완료되지는 않습니다.
USB(Universal Serial Bus)-UART(Universal Asynchronous Receiver/Transmitter)·COM(Communications Port) — USB-UART 변환기는 USB 연결을 직렬 통신으로 바꾸는 부품입니다. COM은 운영체제에서 직렬 포트를 표시하는 이름 중 하나이며 모든 보드(board)가 같은 방식으로 나타나지는 않습니다.
IDE(Integrated Development Environment)·부트로더(bootloader)·플래시(flash) — IDE는 코드를 작성하고 업로드하는 개발 도구입니다. 부트로더는 새 프로그램(program)을 받아들이는 초기 프로그램이며, 플래시는 프로그램을 저장하는 비휘발성 메모리입니다.
같은 보드와 포트에서 케이블 하나를 바꿉니다
전원 LED(Light-Emitting Diode)는 켜지지만 새 장치가 나타나지 않거나 업로드가 되지 않으면 충전 전용 케이블을 데이터 지원 케이블과 대조합니다. 충전이 가능하다고 해서 데이터 기능이 없다는 뜻은 아닙니다. 두 기능을 모두 지원하는 케이블도 많으므로 실제 다른 장치에서 데이터 통신이 되는 것으로 확인한 호환 케이블을 기준으로 삼습니다.
케이블 내부의 데이터 선이 없거나 끊어져도 전원 선은 연결될 수 있습니다. 따라서 LED 점등, 운영체제의 장치 인식, 업로드 성공을 세 가지 별도 결과로 적습니다. 데이터 경로를 확인하기 전에 드라이버(driver)와 여러 설정을 한꺼번에 바꾸면 원인을 분리하기 어렵습니다.
연결 전후 새 장치의 등장을 대조합니다
현재 보드와 컴퓨터 포트를 유지하고, 다른 장치에서 데이터 통신이 되는 것으로 확인한 호환 케이블로 바꿉니다. 연결 전후 운영체제의 장치 목록과 IDE의 포트 목록을 확인합니다. 포트 이름을 외우기보다 새 장치가 나타나고 분리하면 사라지는지를 대조합니다. 케이블 교체와 드라이버 설치를 동시에 하면 원인을 분리하기 어렵습니다.
새 케이블로 장치가 나타나면 원래 케이블·접속부를 조사합니다. 여전히 나타나지 않으면 컴퓨터 포트, 허브, 보드의 USB 단자·인터페이스(interface) 상태로 범위를 넓힙니다. 케이블을 흔들 때만 나타났다 사라진다면 데이터 지원 여부와 별도로 기계적 접속을 확인합니다.
USB 단자가 여러 개라면 기록 대상과 두 번의 장치 인식을 구분합니다
데이터 케이블이 정상인데 펌웨어 기록용 장치가 나타나지 않는다면, 케이블을 더 바꾸기 전에 지금 꽂은 단자가 기록할 마이크로컨트롤러에 연결되는지 확인하십시오. 한 제품에 주 컴퓨터와 별도의 키보드 제어용 칩이 있으면 USB-C 모양이 같은 단자도 서로 다른 칩으로 이어질 수 있습니다. 경로 전환 스위치가 있다면 그 위치도 회로도와 해당 기기의 설명서로 확인해야 합니다. 다른 제품에서 본 단자 위치나 버튼 이름을 그대로 적용하지 마십시오.
RP2040을 USB 저장장치 방식으로 기록하는 기판에서는 부트로더(bootloader, 새 프로그램을 받는 초기 기능)에 진입했을 때 컴퓨터에 RPI-RP2 저장장치가 나타날 수 있습니다. 이 방식에 쓰이는 UF2(USB Flashing Format)는 대상 칩에 기록할 데이터를 담은 파일 형식입니다. 기록 뒤 키보드 기능을 실행하는 제품이라면 HID(Human Interface Device)는 컴퓨터가 키보드 같은 입력 장치로 인식하는 USB 장치 종류를 뜻합니다. 부트 저장장치 인식과 실행 중인 HID 인식은 서로 다른 검사입니다. 이 절차는 RP2040의 해당 기록 방식과 키보드 펌웨어를 사용하는 기판에만 적용하며, 앞뒤 절의 USB–UART 변환 칩 검사와 혼동하지 않습니다.
- 실물의 기록 경로를 먼저 정합니다. 정확한 보드·펌웨어 버전과 대상 칩, USB 단자, 경로 스위치, 부트 진입 버튼을 기기 설명서 및 회로도와 대조합니다. 그 기기가 요구하는 전원 상태와 버튼 조작 순서를 따르고, 다른 장치에서 데이터 통신을 확인한 호환 케이블을 사용합니다.
- 부트 저장장치가 새로 나타나는지 봅니다. 연결 전후 컴퓨터의 장치·드라이브 목록을 비교합니다. 이 방식에서
RPI-RP2가 나타나지 않는다면 파일 복사를 시도하기 전에 케이블, 기기 쪽 단자, 스위치, 버튼을 누르는 시점, 대상 칩의 전원을 하나씩 다시 확인합니다. 버튼을 눌렀다고 해서 부트 진입이 성공했다고 간주하지 않습니다. - 대상이 맞는 UF2를 복사합니다. 저장장치가 보인 뒤에야 보드 변형과 펌웨어 버전에 맞는
.uf2파일인지 확인하고 복사합니다. 복사 후 드라이브가 사라지며 기기가 다시 연결될 수 있습니다. 드라이브가 사라졌다고 해서 새 펌웨어의 실행까지 성공했다고 판정하지 않습니다. - 재시작 뒤의 장치와 실제 기능을 검사합니다. 컴퓨터의 장치 목록에서 새 HID가 나타나는지 보고, 안전한 빈 입력 창에서 필요한 키 입력을 시험합니다. HID가 보이는데 입력이 없다면 키 배열 설정과 입력 회로를 조사합니다. HID 자체가 보이지 않는다면 대상 UF2, 재시작 상태, 평상시의 스위치·USB 경로를 먼저 확인합니다.
입력이 완전히 끊긴 경우와 키 입력은 되지만 배열만 달라진 경우를 구분합니다. 배열이 바뀐 것 같다면 펌웨어를 다시 기록하기 전에 현재 키맵과 해당 기기용 기본 키맵 자료가 있는지 확인합니다. 파일을 찾았다는 사실만으로 설정이 복원되지는 않으므로, 실제 적용 순서와 호환 버전을 확인한 뒤 입력을 다시 시험합니다. 예를 들어 PiBrick 키보드 제작자 문서는 기본 키맵 파일을 별도로 제공합니다.
기록에는 선택한 물리 단자, 스위치·버튼 상태, UF2의 정확한 대상과 버전, 부트 저장장치 등장, 재시작 뒤 HID 등장, 실제 입력을 각각 남깁니다. 첫 장치부터 보이지 않으면 USB 경로와 부트 진입을, 첫 장치는 보였으나 둘째가 보이지 않으면 기록 대상과 응용 펌웨어를 우선 조사할 수 있습니다.
키 입력이 정상인데 Linux 설정 도구만 접근하지 못할 때
키 입력은 정상인데 설정 도구에 Permission denied가 표시된다면, 케이블이나 UF2 기록 실패와 같은 증상으로 묶지 않습니다. Raw HID는 HID 보고서(report)를 직접 주고받는 통신을 가리킵니다. Linux에서는 설정 도구가 /dev/hidraw* 장치 파일을 통해 접근할 수 있으며, 이 파일 경로 자체가 Raw HID의 정의는 아닙니다. 입력 기능이 동작해도 설정 통신에 필요한 장치 접근 권한은 별도로 확인해야 합니다. Linux hidraw 문서와 제작자의 설정 도구 안내에서 이 경로를 구분할 수 있습니다.
먼저 오류가 난 도구가 어느 장치 파일에 접근했는지 확인하고, 그 파일에 대응하는 실제 USB 장치의 VID(제조사 식별자)·PID(제품 식별자)를 대조합니다. udevadm의 장치 속성 조회에서 부모 장치까지 살펴볼 때는 두 식별자가 같은 USB 부모에 속하는지 확인합니다. udev 규칙의 여러 부모 속성 조건도 같은 조상 장치에서 일치해야 하므로, 서로 다른 부모에서 읽은 값을 섞거나 다른 제작 사례의 식별자를 복사하지 않습니다.
uaccess 태그를 이용한 접근 허용은 systemd-logind가 관리하는 활성 로컬 세션과 좌석(seat)의 조건에 영향을 받습니다. 좌석은 화면·입력 장치 등을 함께 사용하는 로컬 작업 자리를 뜻합니다. systemd 로그인 세션 문서의 이 조건을 SSH 접속이나 systemd-logind가 없는 환경에도 그대로 적용할 수는 없습니다. 실제 기기·배포판·로그인 상태에 맞는 최소 권한 규칙을 확인하고, 모든 사용자에게 모든 HID 장치를 열어 주는 식으로 해결하지 않습니다. 권한을 고친 뒤에도 설정 도구의 연결과 실제 설정 읽기·쓰기를 따로 확인해야 합니다.
케이블을 바꿔도 포트가 없다면 변환 칩의 전원과 클록을 확인합니다
데이터 통신을 확인한 케이블을 사용했는데도 USB 장치가 나타나지 않는다면, 기판에 전원이 들어온다고 해서 USB 통신 회로까지 정상이라고 볼 수 없습니다. USB–UART 변환 칩(USB-to-UART bridge)의 공급 전압과 클록(clock, 칩의 동작 시점을 만드는 주기 신호)을 먼저 확인하면 케이블·커넥터 문제와 기판 내부 문제를 나눌 수 있습니다. 아래 순서는 외부 12 MHz 수정 진동자가 필요한 CH340G를 예로 듭니다. 같은 이름의 CH340 계열이라도 CH340C처럼 클록이 내장된 모델에는 외부 수정 검사를 적용하지 않습니다.
- 칩의 정확한 형번과 공급 방식을 회로도·실장 부품으로 확인합니다. CH340G를 3.3 V로 구동한다면 VCC와 V3가 함께 3.3 V 전원에 연결되어야 합니다. 5 V 구동에서는 VCC에 5 V를 공급하고 V3에는 데이터시트가 요구하는 접지 측 디커플링 커패시터(decoupling capacitor, 핀 가까이에서 전압 변동을 완화하는 부품)를 둡니다. 이때 V3를 5 V에 직결하는 방식으로 두 경우를 섞지 않습니다. 두 공급 방식 모두 VCC 핀과 접지 사이에는 데이터시트의 0.1 µF 전원 디커플링 커패시터가 가까이 있는지 확인합니다. 두 핀의 실제 전압을 접지 기준으로 측정하고, USB를 꽂은 직후와 인식 시도 중 전압이 유지되는지도 봅니다.
- CH340G의 XI·XO 클록 부품을 확인합니다. 데이터시트는 XI와 XO 사이의 12 MHz 수정(crystal resonator)과 각 핀에서 접지로 가는 발진 커패시터를 요구합니다. 부품의 정격과 실장, 접지, 짧은 배선을 회로도와 실제 기판에서 대조합니다. 수정 핀에 일반적인 측정 프로브를 대면 부하 용량이 바뀌어 발진을 방해할 수 있으므로, 파형 측정이 필요하면 적절한 저용량 프로브와 제조사가 권장하는 방법을 사용합니다. 클록이 없거나 불안정하면 USB 장치 열거가 실패할 수 있습니다.
- USB 데이터 경로를 별도로 확인합니다. 커넥터의 D+·D−가 CH340G의 UD+·UD−까지 뒤바뀌거나 끊기지 않았는지, 두 선 사이와 전원·접지 사이에 쇼트가 없는지 확인합니다. CH340 데이터시트는 이 칩의 USB 송수신부를 전제로 UD+·UD−에 별도 저항을 덧붙이지 않는 연결을 제시합니다. 다른 USB 회로에서 본 풀다운 저항값을 이 칩에 그대로 옮겨 붙이지 않습니다.
이 세 단계를 확인한 뒤 장치를 다시 연결해 운영체제에서 새 USB 직렬 장치가 나타나는지 봅니다.
포트가 생긴 뒤에는 어느 단계에서 실패했는지 확인합니다
USB 장치 인식, IDE의 포트 선택, 부트로더 진입, 실제 플래시 쓰기는 서로 다른 단계입니다. 포트가 보이는데 업로드가 실패하면 케이블만 계속 교체하지 말고 정확한 보드 선택, 업로드 절차와 메시지(message)를 확인합니다. 반대로 전원만 들어오고 장치 자체가 보이지 않는데 프로그램의 센서(sensor) 코드를 고치는 것은 이 데이터 경로를 시험하지 못합니다.
기판 쪽에서는 변환기의 TX·RX가 대상 마이크로컨트롤러의 RX·TX로 연결됐는지, 두 회로의 논리 전압이 맞는지, 리셋과 부트 모드 진입 신호가 의도한 순서로 바뀌는지 확인합니다. 예를 들어 ESP32 계열에서는 리셋이 풀릴 때 GPIO0의 상태가 부트 모드에 영향을 주므로, DTR·RTS 자동 업로드 회로가 있다면 실제 EN·GPIO0 파형을 함께 봅니다. 포트가 처음부터 없는데 이 부트 신호부터 고치는 것은 USB 장치 인식 실패의 원인을 확인하지 못합니다.
USB-UART 부품과 운영체제에 따라 필요한 드라이버 지원이 다를 수 있습니다. 정상 데이터 케이블로 바꾸었는지, 장치가 열거되었는지, 부트로더와 업로드 단계에서 어디까지 진행했는지를 나누어 기록하면 다음 조사를 정확히 선택할 수 있습니다.