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