본문 바로가기
Embedded Program

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

by rlawnsghtest 2025. 4. 26.

이전 글에서 EMIF02-USB03F2에 대해서 알아 봤습니다.

이글은 이 칩에 연결된 VBUS_FS(PA9), OTG_FS_ID(PA10)에 대해서 알아 보려고 합니다.

 

 

1. VBUS_FS(PA9)

VBUS오 연결되는 있는 PA9핀은 VBUS  신호를 감지하는 역할을 합니다.

Device_only 모드에서는 Host USB(PC)등에서 전원을 인가하기 때문에, USB 케이블이 꽃혀 있나 확인 하는 용도로도 사용 가능 합니다.

 

실제로 STM32 CubeMX에서 보면

 

 

 

USB_OTG_FS 설정할 때 위의 그림들처럼 되어 있습니다.

·         VBUS sensingEnable

·         PA9  자동 설정Input 모드

그리고, STM32 USB 드라이버(usb_device.c 또는 usbd_conf.c) 안에서도 VBUS 감지를 체크하는 코드가 들어가 있습니다.

(: HAL_PCDEx_SetConnectionState() 같은 함수가 실제 연결 상태를 바탕으로 동작)

 

PA9 핀은 STM32 USB 하드웨어 블록(USB_OTG_FS)  입력 신호로 연결되기 때문에 소프트웨어(GPIO) 제어하는 게 아니라USB 하드웨어 컨트롤러가 내부적으로 자동으로 읽어들이는 구조 입니다.

(즉, PA9는 "GPIO로 직접 제어"하는 게 아니고, USB Peripheral 자체가 "PA9 상태"를 감지해서 연결 상태를 관리합니다.

 

실제 PA9 동작을 보면

·         PC USB 케이블을 연결하면 → VBUS(5V) 들어오고

·         STM32 USB 하드웨어가 PA9 감지해서 → "USB 연결됨" 이벤트 발생

·         USB Stack 이를 받아서 USB 연결 절차를 진행

모든 "자동"으로 돌아갑니다

 

하지만 필요하다면 PA9의 실제 입력 유무를 소프트웨어에서 확인은 할 수 있습니다.

     
if (HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_9) == GPIO_PIN_SET)
{
    // VBUS High (USB 연결됨)
}	
else
{
    // VBUS Low (USB 연결 안 됨)
}

 

VBUS 감지도 꺼버리고 사용해도 가능 합니다. 이때는 CubeMX 에서 "VBUS Sensing"을 Disable로 설정하면 됩니다. 

(위의 그림 참고~)

※ 아! CPU별로 STM32CubeMX에서 "VBUS Sensing"의 옵션에 Disable이 없는 경우가 있을 수 있습니다.

    이때는 직접 PA9에 마우스를 클릭해서 Reset_State나 원하는 기능을  선택하시면 됩니다.

2. OTG_FS_ID(PA10)

우선 USB의 ID 핀에 대해서 설명하겠습니다.

USB OTG(USB On-The-Go) 라는 표준이 있습니다.

  • OTG는 "장치(Device)"가 때로는 Host, 때로는 Device 역할을 할 수 있게 해주는 기술입니다.
  • 이때 누가 Host가 될지, 누가 Device가 될지를 결정하는 게 ID 핀입니다.

ID 핀은 "호스트와 디바이스 역할을 구분"하는 데 사용합니다.

 

  ID 핀의 동작

ID 핀 상태 역할
GND에 연결 (ID Low) 자신이 Host가 됨
오픈(또는 풀업) (ID High) 자신이 Device가 됨

 

즉,

  • ID 핀을 GND로 땅에 붙이면 → "나 Host야!"
  • ID 핀을 오픈 상태로 두면 → "나 Device야!"

STM32는 이 ID 핀의 상태를 PA10(USB_OTG_FS_ID)로 읽어서 자동으로 판단합니다.

하지만, Device_only로 선택하게 되면 PA10 은 노랑색으로 바뀌며, 사용하지 않는 핀으로 표시 됩니다.

 

  요약

구분 설명
기본 기능 Host/Device 역할을 구분
ID 핀이 GND면? Host 모드
ID 핀이 오픈이면? Device 모드
STM32는 ID 핀을 어떻게 쓰나? OTG 하드웨어가 자동 감지
직접 제어 필요? ❌ 필요 없음 (자동 처리됨)
핀 이름 ID (PA10 연결)

 

 

  • CubeMX에서 USB_OTG_FS 모듈을 "Device only"로 설정해버리면, ID 핀을 무시하고 그냥 디바이스 모드 고정으로 작동시킬 수도 있습니다.
  • "Dual Role (Host/Device)"로 설정하면, ID 핀 감지가 활성화되고, 자동으로 역할이 바뀝니다.

 

3. ETC