시리얼 (UART) 포트
UART
UART는 범용 비동기 송수신기(Universal Asynchronous Receiver/Transmitter)의 약자로 직렬 데이터를 교환하는 간단한 2선식 프로토콜입니다. 흔히 시리얼 통신이라고 불립니다. UART에 대한 자세한 내용은 여기를 참고합니다.
라즈베리파이에는 두가지 타입의 UART가 있습니다.
- Full UART (PL011 UART)
- Mini UART
Mini UART는 Full UART에 비해 더 낮은 성능과 일부 기능이 제외되어 있습니다.
Primary / Secondary
아래는 라즈베리파이 모델에 따른 Primary/Secondary UART의 종류를 나타낸 것입니다.
하드웨어 UART핀 GPIO 14, 15은 Primary UART 를 의미합니다.
라즈베리파이 모델 | Primary UART | Secondary UART |
---|---|---|
Raspberry Pi Zero | Full UART (UART0) | Mini UART (UART1) |
Raspberry Pi Zero W | Mini UART (UART1) | Full UART (UART0, 블루투스용) ¹ |
Raspberry Pi 1 | Full UART (UART0) | Mini UART (UART1) |
Raspberry Pi 2 | Full UART (UART0) | Mini UART (UART1) |
Raspberry Pi 3 | Mini UART (UART1) ² | Full UART (UART0, 블루투스용) ¹ |
Raspberry Pi 4 ³ | Mini UART (UART1) | Full UART (UART0, 블루투스용) ¹ |
² 라즈베리파이 3의 경우, GPU frequency scaling 기능으로 인해 Mini UART 통신에 문제가 발생할 수 있습니다.
³ 라즈베리파이 4에는 숨겨진 Full UART 4개 (UART2 ~ UART5) 가 존재합니다. 설정을 변경하여 UART 포트를 추가할 수 있습니다.
장치
UART는 라즈베리파이OS (리눅스)에서 장치로 인식하며 장치명은 아래와 같습니다.
UART | 장치명 |
---|---|
Full UART (UART 0) | /dev/ttyAMA0 |
Mini UART (UART 1) | /dev/ttyS0 |
라즈베리파이 모델에 따라 Primary UART의 타입이 다르므로 아래와 같이 Symbolic link 이름을 사용할 수도 있습니다.
UART | 장치명 |
---|---|
Primary | /dev/serial0 |
Secondary | /dev/serial1 |
Mini UART 대신 Full UART 사용하기 (라즈베리파이 3)
라즈베리파이3에서는 GPU frequency scaling 기능으로 인해 Mini UART (UART 1)를 사용한 시리얼통신에 문제가 발생할 수 있습니다. 다음 설정을 통해 Full UART (UART 0)를 시리얼 통신에 사용하도록 변경할 수 있습니다.
라즈베리파이 터미널을 실행시키거나 또는 SSH로 접속한 후 아래와 같이 입력합니다.
sudo nano /boot/config.txt
내용의 마지막에, 다음 내용을 추가합니다.
dtoverlay=miniuart-bt
Ctrl + O -> 엔터 -> Ctrl + X 를 눌러 저장하고 편집기를 종료합니다.
아래 명령으로 라즈베리파이를 재부팅합니다.
sudo reboot
이제 시리얼통신에 Full UART (UART 0)을 사용하므로 안정적인 통신이 가능합니다. 다만, 이제 블루투스 통신은 사용이 불가능합니다.
숨겨진 UART 사용하기 (라즈베리파이 4)
라즈베리파이 4에는 숨겨진 4개의 Full UART가 존재하며, 설정을 변경하여 사용할 수 있습니다. 라즈베리파이 터미널을 열고 아래와 같이 입력합니다.
sudo nano /boot/config.txt
내용의 마지막에, 사용하고자 하는 숨겨진 UART를 추가합니다. 여기서는 4개 모두 추가해봅니다.
dtoverlay=uart2
dtoverlay=uart3
dtoverlay=uart4
dtoverlay=uart5
추가 UART 포트의 GPIO 핀은 다음과 같습니다.
UART | TXD | RXD |
---|---|---|
UART 2 | GPIO 0 | GPIO 1 |
UART 3 | GPIO 4 | GPIO 5 |
UART 4 | GPIO 8 | GPIO 9 |
UART 5 | GPIO 12 | GPIO 13 |
아래와 같이 TX/RX 핀의 GPIO 번호를 직접 지정해줄 수도 있습니다.
dtoverlay=uart2,txd2_pin=16,rxd2_pin=17
Ctrl + O -> 엔터 -> Ctrl + X 를 눌러 저장하고 편집기를 종료합니다.
아래 명령으로 라즈베리파이를 재부팅합니다.
sudo reboot
다음을 입력하면 Full UART 타입의 ttyAMA1~ttyAMA4 가 추가된 것을 확인할 수 있습니다.
dmesg | grep tty
USB-TTL 컨버터

USB-TTL 컨버터를 이용하여 UART포트를 추가할 수 있습니다. 지원하는 대표적인 칩셋은 다음과 같습니다.
- FTDI FT232RL
- CP2102
- PL2303
- CH340
USB-TTL 컨버터를 라즈베리파이에 연결 후 터미널에 다음과 같이 입력합니다.
ls -l /dev/ttyUSB*
현재 연결된 USB-TTL 컨버터의 포트를 표시해줍니다. (ttyUSBx)

해당 포트이름으로 시리얼 통신을 사용할 수 있습니다.