이전에 올린 글 "[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 로 터미널에 뿌렸던 내용




+ Recent posts