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 연결 & 해제 및 미디어의 읽기 & 쓰기 동작이 모두 정상적으로 실행되고 있습니다.
'Hardware > STM32' 카테고리의 다른 글
[STM32F746G-DISCO] USB Audio 사용하기 (Device Mode) (0) | 2024.07.17 |
---|---|
[STM32F746G-DISCO] USB CDC로 사용하기 (Device Mode) (0) | 2024.07.16 |
[STM32F746G-DISCO] USB 키보드로 사용하기 (Device Mode) (0) | 2024.07.15 |
[STM32F746G-DISCO] USB 마우스로 사용하기 (Device Mode) (1) | 2024.07.15 |
[STM32F746G-DISCO] STemWin 사용하기 (Graph widget) (0) | 2024.07.14 |
댓글