본문 바로가기
Embedded Program

VCP (Virtual COM Port) 구현(STM32F407x) 회로도#1

by rlawnsghtest 2025. 4. 26.

이전 글에서는 간략하게 송/수신 기능을 시험 했습니다.

이번에는 STM32F407G-DISC1 보드 USB 부분을 가지고 이야기 해 보겠습니다.

위에서 부터 차근 차근 설명해 보겠습니다.

< STMPS2141STR >

STMicroelectronics에서 만든
"USB Power Switch", 정확히 말하면 "High-Side Power Switch" 입니다.

고정된 출력을 만들어주는 레귤레이터가 아니라, 입력 전압(IN)을 스위칭해서 출력(OUT)으로 전달하는 "High-side Power Switch"입니다.

쉽게 말하면:
"USB VBUS 전원(5V)을 안전하게 제어하고 보호하는 전자 스위치" 역할을 하는 부품입니다.

 

STMPS2141STR의 주요 기능

High-Side Switch 5V 전원을 제어 (ON/OFF) 할 수 있음
과전류 보호 (OCP) USB에 과도한 전류 흐르면 자동으로 차단
단락 보호 (Short Circuit Protection) 선이 합선되었을 때 스위치 꺼버림
온도 보호 (Thermal Shutdown) 칩이 과열되면 꺼버림
Enable 핀 (EN) MCU가 전자적으로 켜고 끌 수 있음
Status 출력 핀 (FAULT) 오류 상태를 MCU에 알려줄 수 있음

OTG_FS_PowerSwitchOn(STM32 MCU, PC0)을 제어해서 STMPS2141의 Enable 핀을 통해 전원 On/Off를 제어 할 수 있습니다. 

  • /EN(Active Low) 상태 STMPS2141STR 동작
0 (Low) 스위치 ON → 5V가 USB VBUS에 공급됨
1 (High) 스위치 OFF → USB VBUS 차단

 

또한 Fault 핀으로 과전류 같은 문제가 생겼을 때 LD8을 통해 시각적으로 보여주고, MCU(PD5)에 알려줄 수도 있습니다.

 

회로에서의 기능 요약

칩 이름 STMPS2141STR
기능 USB용 5V 전원 스위치 + 보호 회로
STM32 보드 역할 USB 연결할 때 안전하게 VBUS 공급
주요 보호 기능 과전류, 합선, 과열 보호
MCU 제어 가능 Enable 핀으로 켜고 끄기 가능

 

하지만 OTG_FS_PowerSwitchOn 은 제어 하는 않는다.

    
  HAL_GPIO_WritePin(OTG_FS_PowerSwitchOn_GPIO_Port, OTG_FS_PowerSwitchOn_Pin, GPIO_PIN_SET);
  /*Configure GPIO pin : PtPin */
  GPIO_InitStruct.Pin = OTG_FS_PowerSwitchOn_Pin;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(OTG_FS_PowerSwitchOn_GPIO_Port, &GPIO_InitStruct);

 

High로 설저해 놓고 끝?

HAL_GPIO_WritePin(OTG_FS_PowerSwitchOn_GPIO_Port, OTG_FS_PowerSwitchOn_Pin, GPIO_PIN_SET);

 

CubeMX나 HAL 드라이버에서는 OTG USB Host 모드를 사용할 경우 보드에서 VBUS를 꺼야 할 상황도 있고, VBUS를 켜야 할 상황도 있습니다.

그래서 HAL_HCD_MspInit() 같은 함수 안에서

  • OTG_FS_PowerSwitchOn을 기본적으로 High로 올려두고, 필요할 때(USB Host 상황) 끄거나 켜는 식으로 동작을 합니다.

하지만 USB Device 모드 (지금 Virtual COM 같은 경우)는 사실 VBUS 전원을 MCU가 공급하는 구조가 아닙니다.

  • PC가 VBUS를 공급해 주고(PC → 보드로 5V) MCU는 그냥 USB 통신만 하면 되는 겁니다.

즉, Device 모드에서는 PC0을 특별히 Low로 내릴 필요가 없기 때문에 그냥 초기화만 해주고 SET 해놓는 겁니다.

 

결론

 

  • USB Device 모드 (지금 Virtual COM처럼)는 PC가 USB VBUS를 공급해주니까, STM32 보드에서는 신경 안 써도 됩니다.
  • PC0(OTG_FS_PowerSwitchOn)는 그냥 Output으로 설정만 하고, 특별히 동작시킬 필요가 없습니다.
  • 만약 USB Host 모드 (STM32가 USB 메모리 같은 걸 읽는 경우)를 쓴다면 그때 PC0를 Low로 만들어서 5V를 공급해야 합니다.

Device_ only  모드에서는 STMPS2141STR switch가 필요없습니다.

OTG_FS_PowerSwitchOn(PC0)가 필요 없습니다.

OTG_FS_OverCurrent(PD5)가 필요 없습니다.

STMPS2141STR switch는 Host Mode로 동작할때 다른 USB 기기에 5V 전원을 공급해주기 위해 들어간 부품입니다.