안녕하세요, 그린탐입니다.
오늘은 조금 독특한 Feather 보드를 하나 소개해 보려고 합니다.
일반적인 마이크로컨트롤러 보드는 USB 장치(Device)로만 동작합니다. 즉, PC에 연결되어 데이터를 주고받는 역할을 수행하죠. 하지만 Adafruit Feather RP2040 with USB Type A Host는 이름 그대로 USB Host 기능을 지원하는 특별한 개발 보드입니다.

이 보드를 사용하면 키보드, 마우스, USB 메모리, 게임패드, 다른 마이크로컨트롤러 등 다양한 USB 장치를 직접 연결하여 제어할 수 있습니다. 특히 RP2040의 뛰어난 성능을 활용해 USB Host를 소프트웨어적으로 구현한 점이 매우 흥미로운 제품입니다.
이번 글에서는 이 보드의 주요 특징과 USB Host의 동작 원리, 그리고 활용 사례를 함께 살펴보겠습니다.
USB 포트가 두 개?
대부분의 Feather 보드는 USB 포트가 하나뿐입니다.
하지만 이 제품은 다음과 같이 두 개의 USB 포트를 제공합니다.
- USB Type-C
- USB Type-A Host
USB-C 포트는 일반 Feather 보드와 동일하게 사용됩니다.
- 프로그램 업로드
- 시리얼 디버깅
- 전원 공급
반면 보드 끝에 위치한 USB Type-A 포트는 USB Host 기능을 수행합니다.
즉,
- USB 키보드
- USB 마우스
- USB 메모리
- USB CDC 시리얼 장치
- 다른 USB 기반 MCU
등을 직접 연결할 수 있습니다.
주요 하드웨어 사양
RP2040 듀얼코어 MCU
이 보드에는 Raspberry Pi Pico에도 사용되는 RP2040이 탑재되어 있습니다.
주요 사양은 다음과 같습니다.
- ARM Cortex-M0+ 듀얼코어
- 약 133MHz 동작
- 3.3V 로직
듀얼코어 구조 덕분에 USB Host 처리와 사용자 프로그램을 동시에 안정적으로 실행할 수 있습니다.
메모리
보드에는
- 8MB SPI Flash
- 264KB SRAM
이 탑재되어 있습니다.
8MB의 플래시는 일반적인 RP2040 보드보다 넉넉한 편으로, 대용량 CircuitPython 라이브러리나 USB 관련 프로젝트를 실행하기에 충분한 저장 공간을 제공합니다.
크기
- 2.0 × 0.9 × 0.28인치
- 무게 약 6.3g
Feather 규격을 그대로 유지하므로 FeatherWing 확장 보드와도 호환됩니다.
RP2040에서 USB Host는 어떻게 구현될까?
흥미로운 점은 RP2040 자체에는 USB 컨트롤러가 하나뿐이라는 것입니다.
즉,
USB Device와 USB Host를 동시에 지원하는 전용 하드웨어가 존재하지 않습니다.
그래서 Adafruit는 상당히 독창적인 방법을 사용했습니다.
바로 PIO(Programmable I/O)를 이용한 소프트웨어 USB Host 구현입니다.
쉽게 말하면,
USB 신호를 전용 하드웨어 대신 PIO가 실시간으로 생성하고 해석하는 방식입니다.
두 번째 ARM 코어 활용
USB Host를 안정적으로 동작시키기 위해서는
- ARM Core 1
- PIO 한 개 전체
를 Host 전용으로 사용합니다.
즉,
한 개의 CPU 코어가 USB 통신만 전담하게 되는 것입니다.
덕분에 나머지 코어는 사용자의 애플리케이션을 계속 실행할 수 있습니다.
USB 핀 구성
USB Host는 다음 GPIO를 사용합니다.
- D+ → GPIO16
- D− → GPIO17
프로젝트 설계 시 이 핀들은 USB Host 기능을 위해 예약된다고 생각하면 됩니다.
Arduino와 CircuitPython 모두 지원
USB Host 기능은
- Arduino
- CircuitPython
모두 사용할 수 있습니다.
Arduino에서는 TinyUSB의 Dual Role 예제를 활용하며,
CircuitPython에서도 USB Host 라이브러리를 사용할 수 있어 비교적 쉽게 개발을 시작할 수 있습니다.
외부 USB 장치에 전원을 공급할 수 있을까?
USB Host는 단순히 데이터를 주고받는 것만으로는 충분하지 않습니다.
연결된 USB 장치에 안정적인 5V 전원을 공급해야 합니다.
이를 위해 이 보드에는
TPS61023 기반 1A Boost Converter
가 내장되어 있습니다.
배터리 전압을 안정적인 5V로 승압하여 USB 장치에 공급합니다.
GPIO로 전원 On/Off
더 흥미로운 점은
Boost Converter의 Enable 핀이 GPIO18에 연결되어 있다는 것입니다.
즉,
프로그램에서
- USB 전원 차단
- USB 전원 재인가
를 수행할 수 있습니다.
이를 이용하면
USB 장치가 응답하지 않을 때 소프트웨어적으로 Hard Reset을 수행하는 것도 가능합니다.
LiPo 배터리 충전 지원
이 보드는 휴대용 프로젝트를 고려하여 설계되었습니다.
따라서
- LiPo 충전 회로
- 충전 상태 LED
가 기본 내장되어 있습니다.
USB-C가 연결되면 자동으로 USB 전원을 사용하며,
연결이 해제되면 LiPo 배터리로 자연스럽게 전환됩니다.
별도의 전원 전환 회로를 설계할 필요가 없습니다.
GPIO 및 주변장치
보드는 총 21개의 GPIO를 제공합니다.
또한
- 4개의 12비트 ADC
- I2C ×2
- SPI ×2
- UART ×2
를 사용할 수 있습니다.
RP2040 기반 프로젝트 대부분을 그대로 구현할 수 있는 수준입니다.
STEMMA QT 지원
Adafruit의 장점 중 하나는 STEMMA QT 생태계입니다.
이 보드에도 STEMMA QT 커넥터가 내장되어 있어
- 온도 센서
- 거리 센서
- IMU
- OLED
- 환경 센서
등 다양한 I2C 장치를 납땜 없이 바로 연결할 수 있습니다.
프로토타입 제작 속도를 크게 높여주는 기능입니다.
LED 표시 장치
보드에는 두 가지 LED가 있습니다.
- 일반 상태 LED (Pin 13)
- RGB NeoPixel
NeoPixel은
- 상태 표시
- 연결 상태
- USB 이벤트
등을 직관적으로 표현하는 데 활용할 수 있습니다.
개발 편의 기능
보드에는
- Reset 버튼
- Bootloader 버튼
이 모두 제공됩니다.
프로그램 업로드를 위해 USB 케이블을 뽑았다 다시 연결할 필요 없이 버튼만으로 부트로더 모드에 진입할 수 있습니다.
어떤 프로젝트에 활용할 수 있을까?
USB Host 기능 덕분에 일반 RP2040 보드보다 훨씬 다양한 프로젝트를 만들 수 있습니다.
대표적인 예는 다음과 같습니다.
USB 메모리 데이터 저장
센서 데이터를 SD카드 대신 USB 메모리에 바로 저장하는 데이터 로거를 만들 수 있습니다.
키보드 리매퍼
USB 키보드의 입력을 받아 원하는 키로 변경하는 커스텀 키보드 인터페이스를 제작할 수 있습니다.
USB 마우스 변환기
마우스 입력을 가공하거나 특정 기능을 추가하는 HID 변환 장치를 구현할 수 있습니다.
USB CDC 통신
USB 시리얼(CDC)을 지원하는 다른 마이크로컨트롤러와 직접 통신할 수 있습니다.
레트로 컴퓨터
USB 키보드를 사용하는 휴대용 레트로 컴퓨터나 게임기 프로젝트에도 적합합니다.
마무리
Adafruit Feather RP2040 with USB Type A Host는
USB Host 기능을 소프트웨어적으로 구현하여 일반적인 마이크로컨트롤러에서는 구현하기 어려웠던 다양한 USB 프로젝트를 가능하게 만들어 줍니다.
특히 듀얼코어 RP2040, PIO 기반 USB Host, 1A 승압 회로, LiPo 충전 기능, STEMMA QT 커넥터까지 갖추고 있어 휴대용 USB Host 장치를 제작하려는 메이커에게 매우 매력적인 선택이 될 수 있습니다.
USB 키보드 인터페이스, 데이터 로거, USB 장치 제어 등 한 단계 발전된 RP2040 프로젝트를 계획하고 있다면 한 번쯤 살펴볼 만한 보드입니다.
'Adafruit' 카테고리의 다른 글
| Adafruit Feather M0 Adalogger 사용자 가이드 (1) | 2026.06.30 |
|---|---|
| Adafruit Feather nRF52 Bluefruit LE 사용 가이드 (1) | 2026.06.27 |
| DC 모터, 스태퍼 모터 제어용 Add-on 보드 (DC Motor + Stepper FeatherWing) (1) | 2026.06.24 |
| Adafruit STEMMA 토양 습도 센서 (1) | 2026.06.22 |
| Adafruit OV5640 카메라 브레이크아웃 가이드 (0) | 2026.06.20 |
