본문 바로가기

전자공학을 즐겁게/누구나 취미전자공학

라즈베리 파이에서 UART 사용하기

728x90
반응형

UARTUniversal Asynchronous Receiver Transmitter의 약자입니다. 기기 간 통신에 많이 사용되는 하드웨어입니다.
라즈베리 파이를 단순히 개인용 컴퓨터 용도처럼 사용하는 경우보다는 여러 가지 장치 구현이 많이 사용을 하게 되는데, 이때에도 UART는 가장 인기 있는 선택 중의 하나입니다. 이번 포스트에는 라즈베리 파이에서 UART를 사용하는 몇 가지 방법에 대하여 알아보겠습니다. 
 

USB-UART 브릿지 사용하기

USB-UART 브릿지는 USB 디바이스입니다. USB 포트에 연결을 하면, 직렬 포트를 하나 사용할 수 있게 해 주는 디바이스입니다. 아주 오래전엔 직렬 포트가 개인용 컴퓨터에 기본적으로 설치가 되어 있었지만, 요즘 개인용 컴퓨터에서는 사라졌죠. 이 직렬 포트의 기본이 되는 하드웨어가 UART입니다.
하지만, 간혹 이 직렬 포트를 사용할 필요가 있는 경우에 USB-UART 브릿지를 USB 포트에 연결하여 사용하게 되는 것입니다. 제가 사용한 것은 CP2104라는 USB-UART 브릿지의 평가 킷을 사용했습니다. 가장 쉬운 방법을 USB-UART 브릿지를 사용하는 것입니다.

USB-UART 브릿지 보드

 
USB-UART 브릿지를 USB 포트에 연결하면, Windows의 경우에는 COM? 포트가 하나 만들어지고, Linux의 경우에는 /dev 디렉터리에 ttyUSB?와 같은 디바이스 노드가 만들어집니다. Windows에서는 새로운 USB-UART 브릿지가 연결될 때마다 COM 뒤에 붙는 숫자가 증가합니다. Linux에서는 연결된 USB-UART 수 대로 ttyUSB0, ttyUSB1 등과 같이 디바이스 노드가 만들어집니다. 라즈베리 파이 OS도 Linux이기 때문에 /dev 디렉터리에 ttyUSB0와 같은 디바이스 노드가 만들어집니다.
 
라즈베리 파이에서는 이 디바이스 노드를 사용하여 UART를 사용할 수 있습니다. 
가장 간단하게는 BASH에서 다음과 같이 할 수 있습니다.

텍스트 송신

echo "Hello, world" > /dev/ttyUSB0

텍스트 수신

cat /dev/ttyUSB0

 
물론 시리얼 터미널 어플리케이션을 사용해도 됩니다. 라즈베리 파이와 같은 Linux 시스템에서 사용하는 minicom이라는 터미널 프로그램을 사용할 수 있습니다.
 

라즈베리 파이 Primary UART 활성화하기

라즈베리 파이에는 외부로 GPIO를 연결할 수 있도록 40핀 헤더가 있습니다. 
이것은 GPIO로만 사용하는 것이 아니라 UART의 RXD, TXD 신호도 연결할 수 있도록 되어 있습니다.

Primary UART의 위치

 
GPIO14와 GPIO15는 각각 TXD, RXD로 사용할 수 있습니다. 
 

raspi-config에서 UART 활생화 하는 방법

라즈베리 파이 설정의 많은 부분이 raspi-config를 통하여 이루어집니다. 잊지 말아야 할 것은 raspi-config는 항상 sudo를 사용하여 실행되어야 한다는 것입니다.

sudo raspi-config

 
raspi-config를 실행하면 Interface에 Serial Port라는 것이 보입니다. 

raspi-config의 Serial Port 설정 메뉴

 
이 설정으로 들어가면 먼저 Serial Port로 Serial Console을 사용할 것인지 묻습니다.
Yes를 선택하면, Serial Console과 Serial Port 하드웨어, 즉 UART가 모두 활성화됩니다. Serial Console은 라즈베리 파이 OS의 터미널을 Serial Port를 통하여 사용하는 것을 말합니다. 그러니까, Windows의 TeraTerm에나 Linux의 minicom과 같은 프로그램을 사용하여 라즈베리 파이의 터미널을 사용한다는 의미입니다. 호스트 컴퓨터에서 라즈베리 파이를 SSH 접속 없이 사용할 수 있게 합니다.
No를 선택하면, Serial Port는 활성화할 것인지를 묻습니다. 이 물음에 Yes를 선택하면 Serial Console은 활성화하지 않고, Serial Port만 활성화합니다. 
 
이렇게 활성화된 Serial Port는 Primary UART입니다. Primary UART는 실제 디바이스 노드를 /dev/serial0로 Symbolic Link 하게 됩니다. 앞서 언급했던 /dev/ttyUSB0와 동일하게 사용할 수 있습니다. 라즈베리 파이 4에서는 /dev/ttyS0가 Symbolic Link 됩니다.
그래서 라즈베리 파이 4에서 다음 두 가지는 동일한 동작입니다.

echo "Hello, world" > /dev/serial0
echo "Hello, world" > /dev/ttyS0

 
raspi-config는 터미널 환경에서 사용할 수 있기 때문에 많이 사용되긴 하지만, 데스크탑 환경이라면 Raspberry Pi Configuration이라는 GUI 프로그램을 사용해도 됩니다. GUI이기 때문에 훨씬 직관적입니다.

ᅟᅟRaspberry Pi Configuration GUI

 
Raspberry Pi Configuration GUI를 실행하면, 윗줄에 탭들이 있고, raspi-config에서 Interface 메뉴가 있는 것처럼, Interface 탭이 있습니다. 
 

/boot/firmware/config.txt를 직접 수정하는 방법

라즈베리 파이 OS에는 부트와 관련된 펌웨어나 설정 파일들이 /boot/firmware 디렉터리에 모여 있습니다. 이 중에서 /boot/firmware/config.txt는 주로 하드웨어 설정과 관련된 파라미터를 설정하는 파일입니다. raspi-config에서 설정한 내용도 여기에 적용이 됩니다. raspi-config를 통하지 않고, 이 파일을 직접 수정하여 UART를 활성화시키는 것도 가능합니다.
이 파일을 수정할 때에는 sudo를 사용하여 실행하여야 합니다.

sudo nano /boot/firmware/config.txt

 
UART를 활성화시키기 위해서는 파일의 가장 아래로 갑니다. 

/boot/firmware/config.txt에서 enable-uart=1로 수정하면 UART를 활성화 시킬 수 있습니다.

 
Primary UART가 활성화되어 있지 않는 상태라면, 다음과 같이 되어 있을 것입니다.

enable_uart=0

 
이것을 수정하면, UART를 활성화시킬 수 있습니다.

enable_uart=1

 
수정한 후에는 반드시 재부팅하여야 합니다.

sudo reboot

 
 
다음 영상에서 라즈베리 파이의 UART를 활성화시키는 과정, 동작을 단계별로 확인할 수 있습니다.

https://youtu.be/8jEcu0Y0nJc

 

728x90
반응형