int8_t STORAGE_Init_FS(uint8_t lun){/* USER CODE BEGIN 2 */return(USBD_OK);/* USER CODE END 2 */}
//若这里使用hsd.SdCard.BlockSize的话,有些卡BlockSize为1024byte,会造成设备管理器显示无法迁移设备
int8_t STORAGE_GetCapacity_FS(uint8_t lun, uint32_t *block_num, uint16_t *block_size){/* USER CODE BEGIN 3 */*block_num = hsd.SdCard.LogBlockNbr-1;//逻辑块数量*block_size = hsd.SdCard.LogBlockSize;//注意这里要用逻辑块大小return(USBD_OK);/* USER CODE END 3 */}
int8_t STORAGE_IsReady_FS(uint8_t lun){/* USER CODE BEGIN 4 */
uint8_t state =0;
state =HAL_SD_GetState(&hsd);if(HAL_SD_STATE_READY != state)return(USBD_FAIL);return(USBD_OK);/* USER CODE END 4 */}
int8_t STORAGE_IsWriteProtected_FS(uint8_t lun){/* USER CODE BEGIN 5 */return(USBD_OK);/* USER CODE END 5 */}
int8_t STORAGE_Read_FS(uint8_t lun, uint8_t *buf, uint32_t blk_addr, uint16_t blk_len){/* USER CODE BEGIN 6 */if(HAL_OK !=HAL_SD_ReadBlocks(&hsd,(uint8_t *)buf, blk_addr, blk_len,1000)){return(USBD_FAIL);}//注意这里必须阻塞等待传输完成//或者下次传输之前必须等待传输完成才开始传输//不然会造成USB向SD卡写入稍大的文件就会出错while(HAL_SD_GetCardState(&hsd)!= HAL_SD_CARD_TRANSFER);return(USBD_OK);/* USER CODE END 6 */}
int8_t STORAGE_Write_FS(uint8_t lun, uint8_t *buf, uint32_t blk_addr, uint16_t blk_len){/* USER CODE BEGIN 7 */if(HAL_OK !=HAL_SD_WriteBlocks(&hsd,(uint8_t *)buf, blk_addr, blk_len,1000)){return(USBD_FAIL);}//同上也需等待while(HAL_SD_GetCardState(&hsd)!= HAL_SD_CARD_TRANSFER){}return(USBD_OK);/* USER CODE END 7 */}
int8_t STORAGE_GetMaxLun_FS(void){/* USER CODE BEGIN 8 */return(STORAGE_LUN_NBR -1);/* USER CODE END 8 */}