본문 바로가기

[STM32F746G-DISCO] USB MSC로 사용하기 (Device Mode)

by rudals.kim 2024. 7. 16. 댓글 개
반응형
아래 테스트는 STM32CubeIDE 1.6.1/STM32Cube_FW_F7_V1.16.1를 사용하여 테스트 되었습니다.


ST에서 제공되는 예제 중 디바이스 모드에서 USB MSC (Mass Storage Device Class)를 사용할 수 있는 방법이 있어서 테스트해 보았습니다. 어떤식으로 동작이 되는지를 살펴보니 윈도우 PC에서 USB 케이블을 STM32F746G-DISCO 보드의 FS단자에 꽂으면 보드에 꽂혀진 MicroSD 카드를 Mass Storage 저장장치로 인식하여 사용하는 구조로 동작되고 있습니다.

STM32CubeIDE에서 새 프로젝트를 생성 후 DMA/RCC/SDMMC1/USB_OTG_FS/USB_DEVICE만 초기화 하였습니다.

프로젝트는 STM32Cube_FW_F7_V1.16.1/Projects/STM32746G-Discovery/Applications/USB_Device/MSC_Standalone를 참고하여 작성하였습니다.

SDMMC1의 DMA2를 아래와 같이 설정하였습니다.

SDMMC1의 설정은 아래와 같이 설정하였습니다.

USB_OTG_FS의 설정은 아래와같이 Device_Only 모드로 설정하였습니다.

USB_DEVICE 모드의 FS IP는 Mass Storage Class로 설정하였습니다.

이렇게 설정 후 프로젝트를 생성합니다.
생성된 코드와 예제 프로젝트를 비교해 보니 몇 몇 부분이 차이가 나는것을 발견하였습니다.
주의 깊게 봐야 할 파일은 아래 3가지 파일입니다.

usbd_storage_if.c
stm32f7xx_it.c
main.c


usbd_storage_if.c는 USB와 MicroSD 디바이스간의 인터페이스가 구현된 파일로 이 파일이 적용되어져야 MicroSD 카드를 읽고 쓰기가 가능해집니다.

그 다음으로 중요한 stm32f7xx_it.c 파일인데 여기 보면 SDMMC1/DMA2의 파라미터가 hsd1이 아닌 uSdHandle를 사용하여 처리되고 있습니다.

 

가장 중요한 main.c의 BSP_SD_MspInit 함수입니다. 원래 이 함수는 __weak 함수인데 main.c에 재정의 되어졌습니다.

위 3개의 파일을 적용이 되었으면 빌드하여 실행해 봅니다.

아래는 STM32F746G-DISOC 보드가 MSC로 동작되는 영상으로 USB 연결 & 해제 및 미디어의 읽기 & 쓰기 동작이 모두 정상적으로 실행되고 있습니다.

반응형

댓글