Category (Click)
개발보드 덕질하기

[NUCLEO-F103RB] 누클레오 개발보드에서 USB 사용하기 (USB CDC VCP 테스트)

 차완기 - @7/27/2023, 10:33:00 PM
최근 들어 STM32 MCU의 DFU 기능을 사용해 보려하고있습니다.
지금 당장 가지고 있는 STM32 개발보드 중 가장 만만한 게 STM32F103이니 이걸로 테스트해 보려 했는데요, 문제가 하나 있다면 MCU의 D+, D-와 연결된 USB 포트가 없다는 것이었습니다.
따라서 DFU고 뭐고 간에 우선 누클레오보드에 USB 포트부터 만들어 주어야 했습니다. USB 포트를 만들고 간단히 CDC VCP로 테스트하면 되겠네요.

CubeMX 세팅

여기에서는 STM32CubeMX와 Visual Studio Code + STM32 VS Code Extension 조합으로 개발환경을 설정하였습니다. 이와 관련해서는 아래 내용을 참고해 보세요.
NUCLEO-F103RB 개발보드로 프리셋을 설정한 후 USB Device를 Enable,
USB DEVICE 설정을 CDC로 선택하였습니다.

펌웨어 작성

1초 간격으로 “test” 문자열을 출력하도록 해보았습니다.

USER CODE BEGIN Includes

USER CODE BEGIN 2

USER CODE BEGIN WHILE

배선 준비

아래 준비물이 필요합니다.
USB 브레이크아웃 보드
1.5 k 저항 x1 (없다면 1 k 3개)
5.1 k 저항 x2 (USB Type-C인 경우, 없다면 10 k 4개)
브레드보드, 점퍼 케이블
다음으로 배선입니다.
앞서 언급했듯이 NUCLEO-F103RB 개발보드에는 USB 포트가 존재하지 않습니다. 그렇다면 헤더 핀 단자에 USB를 꽂아 직접 만들어주면 되는데요, 아래 두 가지 주의해야 할 부분이 있습니다.

일부 MCU: DP Pull-up

Schematic of Nucleo-64
Nucleo-64의 Schematic을 참고해 보면 USB의 두 디퍼런셜에 해당하는 PA11과 PA12에 아무런 핀이 연결되어 있지 않은 것을 확인할 수 있습니다.
이때 USB 2.0 스펙에서는 FS(full-speed)로 동작하기 위해 DP를 1.5k 저항으로 Pull-up 해야 하는데요, 제가 사용하는 NUCLEO-F103RB에는 MCU 내장 USB Pull-up 저항이 없기 때문에 추가적인 배선이 필요합니다.
AN4879에서는 1.5 k 저항을 이용해 GPIO와 연결하라고 하네요. USB 스펙에 따라 USB의 연결 여부를 감지한 후에 DP 라인을 Pull-up하도록 하는 것 같습니다.
어차피 여기에서는 테스트 목적으로 회로를 구성하기 때문에 개발보드의 3.3 V 출력에 저항을 직결해도 큰 문제가 없어보입니다.

USB Type-C: CC1, CC2 Pull-down

다음으로 USB Type-C 한정 추가적인 배선이 또 필요합니다.
중 10.1
USB 장치의 모드를 인식하는 단자인 CC1과 CC2를 USB 2.0 규격에 맞게 Pull-down해주어야 합니다. 만약 그러지 않으면 PC에서 VCP가 인식되지 않습니다.

배선

가지고 있는 막대 저항이 기본적인것들뿐이라 1 k 저항을 직, 병렬하여 DP Pull-up을 위한 1.5 k 저항을 구성하였고, 10 k 저항을 각각 병렬로 구성해 CC1, CC2의 Pull-down 해주었습니다.
이렇게 해도 잘 인식되네요.

테스트

VCP가 잘 인식되고 동작 역시 문제 없는것을 확인할 수 있었습니다.
브레드보드에 대충 연결해두어 안정적일지는 알 수 없지만.. 테스트하는 당분간 통신 오류 해결은 PC 몫으로 미뤄보겠습니다