# UART Troubleshooting

**What you’ll do**
- USB Serial(UART) 연결 문제를 진단합니다.

**Prerequisites**
- {doc}`Linux Port Setup </page/Setup_Test/linux_port_setup>` (Ubuntu)
- {doc}`Dashboard Test </page/Setup_Test/dashboard_test>`

**Next**
- {doc}`Quick Start </page/Setup_Test/quick_start>`
- {doc}`UART Protocol Reference </page/Protocol/uart_protocol>`

---

## 1. 장치가 인식되지 않는 경우 (`/dev/ttyKMC` 없음)

- USB-UART가 인식되는지 확인: `lsusb`
- 커널에 포트가 잡히는지 확인: `ls -l /dev/ttyUSB*`
- udev 규칙의 VID/PID가 맞는지 확인: {doc}`Linux Port Setup </page/Setup_Test/linux_port_setup>`

---

## 2. 권한 오류(`Permission denied`)

Ubuntu 환경에서 `Permission denied` 오류는 대부분 사용자 계정이 시리얼 포트 사용 그룹(`dialout`)에 포함되지 않아 발생합니다.

- 현재 권한 확인: `ls -l /dev/ttyKMC`
- udev 규칙과 그룹 설정 확인: {doc}`Linux Port Setup </page/Setup_Test/linux_port_setup>`
- 설정을 바꿨다면 로그아웃/로그인 후 다시 확인

---

## 3. 연결은 되지만 데이터 수신이 안 될 때
포트는 열리지만 데이터가 들어오지 않거나 끊기는 경우, 하드웨어 설정(Flow Control, Baudrate) 불일치가 주원인입니다.

### a) RTS/CTS 플로우 컨트롤 확인
본 하드웨어는 데이터 신뢰성을 위해 **RTS/CTS**(Hardware Flow Control) 방식을 사용합니다.

시리얼 터미널이나 코드 설정에서 **RTS/CTS** 옵션을 반드시 활성화(Enable) 해야 합니다.

### b) Baudrate 동기화 및 초기화
본 하드웨어는 Auto Baudrate를 지원하지만, 이미 연결된 상태에서 Baudrate를 변경하면 차량 내부 제어기와 통신 속도가 엇갈릴 수 있습니다. 통신이 되지 않는다면 다음 방법으로 초기화를 진행하십시오.
- **USB 재연결 후 10초 대기**: USB 케이블을 분리하고 최소 10초 이상 대기합니다. (10초간 USB 응답이 없으면 하드웨어의 내부적으로 UART 설정이 초기화됩니다.)
- **하드웨어 리셋**: 보드의 리셋 버튼을 눌러 차량 제어기를 초기화합니다.
- **대시보드 테스트**: SDK나 ROS2를 실행하기 전에, {doc}Dashboard Test </page/Setup_Test/dashboard_test> 도구로 기본 통신이 되는지 먼저 검증하십시오.

- {doc}`Dashboard Test </page/Setup_Test/dashboard_test>`에서 연결 유지/수신 여부를 먼저 확인한 뒤, SDK/ROS2로 넘어가면 원인 분리가 쉽습니다.

---
## 4. 고속 통신 불안정 ($921{,}600\,\mathrm{bps}$ 이상)
높은 전송 속도($921{,}600\,\mathrm{bps}$ 이상)에서는 케이블 품질이나 시스템 부하에 따라 통신이 불안정할 수 있습니다.

- **부하 분산**: 명령 입력 주기나 상태 요청 주기를 낮추어 통신 여유를 확보합니다
- **속도 하향 조정**: 통신이 계속 불안정하다면 속도를 표준 속도인 $115{,}200,\mathrm{bps}$로 낮춰서 테스트할 것을 권장합니다.
- **하드웨어 점검**: 고속 통신의 안정성은 USB 케이블, 허브, 포트의 품질에 크게 좌우됩니다.
