이전 글에서는 간략하게 송/수신 기능을 시험 했습니다.
이번에는 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 전원을 공급해주기 위해 들어간 부품입니다.
'Embedded Program' 카테고리의 다른 글
VCP (Virtual COM Port) 구현(STM32F407x) 회로도#2-1 (0) | 2025.04.26 |
---|---|
VCP (Virtual COM Port) 구현(STM32F407x) 회로도#2 (0) | 2025.04.26 |
VCP (Virtual COM Port) RX 구현(STM32F407x) (1) | 2025.04.25 |
VCP (Virtual COM Port) TX 구현(STM32F407x) (1) | 2025.04.25 |
FIFO vs LIFO (0) | 2025.02.09 |