이전에 올린 글 "[STM32F4xx] uSD-Card USB MSC(Mass Storage Class) CUBEMX 설정 (1/2)" 에 이어서,
프로그램 수정 사항을 올립니다.
MSC 의 수정할 부분은 의외로 별로 없습니다.
CUBEMX 에서 설정만 잘 했으면, usbd_storage_if.c 파일만 손보면 됩니다.
1. #include 추가.
1 2 3 4 5 6 | /* Includes ------------------------------------------------------------------*/ #include "usbd_storage_if.h" /* USER CODE BEGIN INCLUDE */ #include "bsp_driver_sd.h" /* USER CODE END INCLUDE */ | cs |
2. STORAGE_Init_FS() 함수 수정.
1 2 3 4 5 6 7 | int8_t STORAGE_Init_FS (uint8_t lun) { /* USER CODE BEGIN 2 */ BSP_SD_Init(); return (USBD_OK); /* USER CODE END 2 */ } | cs |
3. STORAGE_GetCapacity_FS() 함수 수정.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | int8_t STORAGE_GetCapacity_FS (uint8_t lun, uint32_t *block_num, uint16_t *block_size) { /* USER CODE BEGIN 3 */ HAL_SD_CardInfoTypedef info; BSP_SD_GetCardInfo(&info); *block_num = (info.CardCapacity)/STORAGE_BLK_SIZ - 1; *block_size = STORAGE_BLK_SIZ; // *block_num = STORAGE_BLK_NBR; // *block_size = STORAGE_BLK_SIZ; return (USBD_OK); /* USER CODE END 3 */ } | cs |
4. STORAGE_Read_FS() 함수 수정.
1 2 3 4 5 6 7 8 9 10 | int8_t STORAGE_Read_FS (uint8_t lun, uint8_t *buf, uint32_t blk_addr, uint16_t blk_len) { /* USER CODE BEGIN 6 */ BSP_SD_ReadBlocks_DMA((uint32_t *)buf, blk_addr * STORAGE_BLK_SIZ,STORAGE_BLK_SIZ, blk_len); return (USBD_OK); /* USER CODE END 6 */ } | cs |
5. STORAGE_Write_FS() 함수 수정.
1 2 3 4 5 6 7 8 9 10 | int8_t STORAGE_Write_FS (uint8_t lun, uint8_t *buf, uint32_t blk_addr, uint16_t blk_len) { /* USER CODE BEGIN 7 */ BSP_SD_WriteBlocks_DMA((uint32_t *)buf, blk_addr * STORAGE_BLK_SIZ,STORAGE_BLK_SIZ, blk_len); return (USBD_OK); /* USER CODE END 7 */ } | cs |
이상이고, SDIO_CD (Card Detection) 신호를 사용하려면 위 함수들에 약간의 추가적인 코드가 필요합니다.
이전 글의 마지막에 링크된 웹사이트를 참고하셔서 수정하시면 됩니다.
다음은, 이 USB MSC 로 생성된 USB 드라이브 내용입니다.
엊그제 uSDcard 내용을 읽어서 USB CDC 로 터미널에 뿌렸던 내용과는 너무나 깔끔하고 좋네요.
파일을 PC에서 수정 가능하고, 쉽게 읽고 쓸 수 있습니다. ^^
[엊그제 uSDcard 내용을 읽어서 USB CDC 로 터미널에 뿌렸던 내용
'STM32F4' 카테고리의 다른 글
[STM32F4xx] CUBEMX ver 4.2 새로운 라이브러리 [LIBJPEG] (0) | 2018.09.04 |
---|---|
[STM32F4xx] TIM PWM_CHxN 출력 (PWM One Pulse mode) (4) | 2018.09.04 |
[STM32F4xx] uSD-Card USB MSC(Mass Storage Class: CUBEMX 설정) (1/2) (0) | 2018.09.03 |
[STM32F4xx] BOOT0,BOOT1 핀의 RESET 후의 사용. (0) | 2018.09.03 |
[STM32F4xx] Nucleo 보드 테스트 #27 (embedded DFU 모드 테스트 : S/W) (0) | 2018.09.02 |