[RPI-PICO] UART 신호를 USB로 보내서 시리얼 모니터로 출력 메시지 확인하기

Posted on

라즈베리파이 피코를 쓰다보면 UART 신호를 USB로 보내서 시리얼 모니터로 출력 메시지를 확인해야 하는 경우가 있습니다. 이를 간편하게 하려면 UART to USB (아마존에서는 보통 USB to TTL로 검색이 되네요) 모듈을 구해서 써야 합니다.

라즈베리파이 피코에서 제공하는 uart0의 GP0과 GP1에 연결해서 쓰거나 uart1의 GP16, GP17에 연결해서 설정을 잘 해두면 외부 터미널 프로그램을 PC에서 실행해서 출력 메시지 확인이 되게 됩니다.

설비시 유의할 것은 모듈의 UART 핀에서 TX와 RX가 라즈베리파이 피코에는 교차로 연결해야 한다는 것입니다. 모듈의 TX 핀은 피코의 RX에, 모듈의 RX핀은 피코의 TX에 연결하구요. 3v3 연결도 필요하고, GND 연결도 필요합니다.

전 익스텐더를 써서 모듈을 여러개 달아 쓰는데요. 우선 전원 공급량이 적정한지, 핀 연결은 겹치지 않는지를 보고 설비하면 됩니다. 보통 타모듈이 I2C 연결도 한다면 UART 핀과 겹치기도 하구요. 겹치게 설비하면 시리얼 모니터에 표시되는 문자열이 깨지는 것 같애요. 제 경우 오디오 모듈이 I2C인데, 핀이 겹치지 않게 해두니 작동합니다. UART to USB 모듈이요.

우선 USB to TTL을 지원하는 모듈을 구해서 GPIO에 잘 설비하고, USB로 PC에 연결합니다. 제 모듈은 Silicon Labs의 CP2102를 장착한 모듈인데요.

https://www.silabs.com/developers/usb-to-uart-bridge-vcp-drivers

에서 드라이버를 다운로드하고 설치하니 작동합니다. 해당 모듈을 PC에 연결하면 윈도우 11의 경우 느낌표가 붙어서 장치 관리자에 표시가 되는데 해당 항목을 오른쪽 클릭해서 위에 링크에서 다운로드한 드라이버를 설치하면 가상의 COM 포트로 설치가 됩니다.

해당 COM 포트를 오른쪽 클릭해서 포트 설정 탭으로 이동한후 아래처럼 설정을 합니다.

비트/초: 9600
데이터 비트: 8
패리티: 없음
정지 비트: 1
흐름 제어: 없음

그리고 명령행 프롬프트에서 아래 명령어를 실행합니다.

이 경우 git이 설치된 환경임을 가정했습니다.

그리고나서 생성된 SerialBridge 디렉토리를 vscode로 불러오세요. SerialBridge 프로젝트의 루트 디렉토리에 저장된 CMakeLists.txt를 열어서 UART_PARITY를 NONE으로 설정합니다. 대략 아래와 같구요. 위에 장치 관리자에서 설정한대로 하면 됩니다.

하드웨어 설비는 위에 말한대로 주의해서 하면 되구요. SerialBridge 프로젝트의 기본값인 TX 핀은 GP0에 RX핀은 1에 대응됨을 확인해서 잘 연결하면 됩니다. 교차로 연결해야 하니 GP0에 모듈의 RX를 GP1에 TX를 연결하면 됩니다.

설비가 다 되면 컴파일후 uf2 파일을 피코에 심구요.

테라텀이나 YAT등의 터미널 에뮬레이터를 실행해서 위에서 설정한 사양대로 정보를 입력하면 시리얼 모니터에 적절한 메시지가 뜸을 확인할 수 있습니다. uf2 심고나서 USB 연결을 빼고, CP2102 모듈을 각각 피코와 PC USB에 연결하면 전원공급도 되고 UART 신호가 PC에 잡히게 됩니다.

피코에서 UART를 통해서 시리얼 모니터를 에뮬레이션하는 핵심 코드는 C SDK인 경우 아래와 같은 형태입니다.

pico/stdlib.h에서 정의한 stdio_init_all()
GPIO핀을 UART 용도로 지정하는 함수들
hardware/uart.h에서 정의한 uart 관련 초기화 함수들

이 세가지 함수로 UART를 설정해두면 그다음 라인부터는

printf() 문처럼 stdout에 표시하는 C 함수를 써서 시리얼 모니터에 표시를 하게 됩니다.

일단 이정도로 정리해둡니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다