- /* Includes ------------------------------------------------------------------*/
 
- #include "usbd_msc_storage.h"
 
- /* USER CODE BEGIN INCLUDE */
 
- #include "spiflash/bsp_spiflash.h"
 
- /* USER CODE END INCLUDE */
 
 
- /** @addtogroup STM32_USB_OTG_DEVICE_LIBRARY
 
-   * @{
 
-   */
 
 
- /** @defgroup USBD_STORAGE 
 
-   * [url=home.php?mod=space&uid=247401]@brief[/url] usbd core module
 
-   * @{
 
-   */ 
 
 
- /** @defgroup USBD_STORAGE_Private_TypesDefinitions
 
-   * @{
 
-   */ 
 
- /* USER CODE BEGIN PRIVATE_TYPES */
 
- /* USER CODE END PRIVATE_TYPES */ 
 
- /**
 
-   * @}
 
-   */ 
 
 
- /** @defgroup USBD_STORAGE_Private_Defines
 
-   * @{
 
-   */ 
 
- #define SPI_FLASH_SECTOR_SIZE    4096    // 串行Flash扇区大小
 
- #define SPI_FLASH_START_SECTOR   1792    // 串行Flash文件系统FatFS偏移量
 
- #define SPI_FLASH_SECTOR_COUNT   2304    // 串行Flash文件系统FatFS占用扇区个数  
 
-  
 
- #define STORAGE_LUN_NBR          1  
 
- #define STORAGE_BLK_SIZ          SPI_FLASH_SECTOR_SIZE
 
 
- /* USER CODE BEGIN PRIVATE_DEFINES */
 
- /* USER CODE END PRIVATE_DEFINES */
 
-   
 
- /**
 
-   * @}
 
-   */ 
 
 
- /** @defgroup USBD_STORAGE_Private_Macros
 
-   * @{
 
-   */ 
 
- /* USER CODE BEGIN PRIVATE_MACRO */
 
- /* USER CODE END PRIVATE_MACRO */
 
 
- /**
 
-   * @}
 
-   */ 
 
 
- /** @defgroup USBD_STORAGE_IF_Private_Variables
 
-   * @{
 
-   */
 
- /* USB handler declaration */
 
- /* Handle for USB Full Speed IP */
 
-   USBD_HandleTypeDef  *hUsbDevice_0;
 
- /* USER CODE BEGIN INQUIRY_DATA_FS */ 
 
- /* USB Mass storage Standard Inquiry Data */
 
- const int8_t  STORAGE_Inquirydata_FS[] = {//36
 
-   
 
-   /* LUN 0 */
 
-   0x00,                
 
-   0x80,                
 
-   0x02,                
 
-   0x02,
 
-   (STANDARD_INQUIRY_DATA_LEN - 5),
 
-   0x00,
 
-   0x00,        
 
-   0x00,
 
-   'S', 'T', 'M', ' ', ' ', ' ', ' ', ' ', /* Manufacturer : 8 bytes */
 
-   'P', 'r', 'o', 'd', 'u', 'c', 't', ' ', /* Product      : 16 Bytes */
 
-   ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
 
-   '0', '.', '0' ,'1',                     /* Version      : 4 Bytes */
 
- }; 
 
- /* USER CODE END INQUIRY_DATA_FS */ 
 
 
- /* USER CODE BEGIN PRIVATE_VARIABLES */
 
- /* USER CODE END PRIVATE_VARIABLES */
 
 
- /**
 
-   * @}
 
-   */ 
 
-  
 
- /** @defgroup USBD_STORAGE_IF_Exported_Variables
 
-   * @{
 
-   */ 
 
-   extern USBD_HandleTypeDef hUsbDeviceFS;
 
- /* USER CODE BEGIN EXPORTED_VARIABLES */
 
- /* USER CODE END EXPORTED_VARIABLES */
 
 
- /**
 
-   * @}
 
-   */ 
 
-   
 
- /** @defgroup USBD_STORAGE_Private_FunctionPrototypes
 
-   * @{
 
-   */
 
- static int8_t STORAGE_Init_FS (uint8_t lun);
 
- static int8_t STORAGE_GetCapacity_FS (uint8_t lun, uint32_t *block_num, uint16_t *block_size);
 
- static int8_t STORAGE_IsReady_FS (uint8_t lun);
 
- static int8_t STORAGE_IsWriteProtected_FS (uint8_t lun);
 
- static int8_t STORAGE_Read_FS (uint8_t lun, uint8_t *buf, uint32_t blk_addr,uint16_t blk_len);
 
- static int8_t STORAGE_Write_FS (uint8_t lun, uint8_t *buf, uint32_t blk_addr,uint16_t blk_len);
 
- static int8_t STORAGE_GetMaxLun_FS (void);
 
 
- /* USER CODE BEGIN PRIVATE_FUNCTIONS_DECLARATION */
 
- /* USER CODE END PRIVATE_FUNCTIONS_DECLARATION */
 
 
- /**
 
-   * @}
 
-   */ 
 
-   
 
- USBD_StorageTypeDef USBD_Storage_Interface_fops_FS =
 
- {
 
-   STORAGE_Init_FS,
 
-   STORAGE_GetCapacity_FS,
 
-   STORAGE_IsReady_FS,
 
-   STORAGE_IsWriteProtected_FS,
 
-   STORAGE_Read_FS,
 
-   STORAGE_Write_FS,
 
-   STORAGE_GetMaxLun_FS,
 
-   (int8_t *)STORAGE_Inquirydata_FS,
 
- };
 
 
- /* Private functions ---------------------------------------------------------*/
 
- /*******************************************************************************
 
- * Function Name  : STORAGE_Init_FS
 
- * Description    : 
 
- * Input          : None.
 
- * Output         : None.
 
- * Return         : None.
 
- *******************************************************************************/
 
- int8_t STORAGE_Init_FS (uint8_t lun)
 
- {
 
-   /* USER CODE BEGIN 2 */
 
-   int8_t res=-1;
 
-   MX_SPIFlash_Init();
 
-     if(SPI_FLASH_ReadID()==SPI_FLASH_ID)
 
-   {
 
-     res=USBD_OK;
 
-   }
 
-   return res;
 
-   /* USER CODE END 2 */ 
 
- }
 
 
- /*******************************************************************************
 
- * Function Name  : STORAGE_GetCapacity_FS
 
- * Description    : 
 
- * Input          : None.
 
- * Output         : None.
 
- * Return         : None.
 
- *******************************************************************************/
 
- int8_t STORAGE_GetCapacity_FS (uint8_t lun, uint32_t *block_num, uint16_t *block_size)
 
- {
 
-   /* USER CODE BEGIN 3 */  
 
-   *block_num  = SPI_FLASH_SECTOR_COUNT;
 
-   *block_size = STORAGE_BLK_SIZ;
 
-   return (USBD_OK);
 
-   /* USER CODE END 3 */ 
 
- }
 
 
- /*******************************************************************************
 
- * Function Name  : STORAGE_IsReady_FS
 
- * Description    : 
 
- * Input          : None.
 
- * Output         : None.
 
- * Return         : None.
 
- *******************************************************************************/
 
- int8_t  STORAGE_IsReady_FS (uint8_t lun)
 
- {
 
-   /* USER CODE BEGIN 4 */ 
 
-   if(SPI_FLASH_ReadID()==SPI_FLASH_ID)
 
-     return (USBD_OK);
 
-   else
 
-     return -1;
 
-   /* USER CODE END 4 */ 
 
- }
 
 
- /*******************************************************************************
 
- * Function Name  : STORAGE_IsWriteProtected_FS
 
- * Description    : 
 
- * Input          : None.
 
- * Output         : None.
 
- * Return         : None.
 
- *******************************************************************************/
 
- int8_t  STORAGE_IsWriteProtected_FS (uint8_t lun)
 
- {
 
-   /* USER CODE BEGIN 5 */ 
 
-   return (USBD_OK);
 
-   /* USER CODE END 5 */ 
 
- }
 
 
- /*******************************************************************************
 
- * Function Name  : STORAGE_Read_FS
 
- * Description    : 
 
- * Input          : None.
 
- * Output         : None.
 
- * Return         : None.
 
- *******************************************************************************/
 
- int8_t STORAGE_Read_FS (uint8_t lun, 
 
-                         uint8_t *buf, 
 
-                         uint32_t blk_addr,                       
 
-                         uint16_t blk_len)
 
- {
 
-   /* USER CODE BEGIN 6 */ 
 
-   blk_addr+=SPI_FLASH_START_SECTOR;      
 
-   SPI_FLASH_BufferRead(buf, blk_addr*SPI_FLASH_SECTOR_SIZE, blk_len*SPI_FLASH_SECTOR_SIZE);
 
-   return (USBD_OK);
 
-   /* USER CODE END 6 */ 
 
- }
 
 
- /*******************************************************************************
 
- * Function Name  : STORAGE_Write_FS
 
- * Description    :
 
- * Input          : None.
 
- * Output         : None.
 
- * Return         : None.
 
- *******************************************************************************/
 
- int8_t STORAGE_Write_FS (uint8_t lun, 
 
-                          uint8_t *buf, 
 
-                          uint32_t blk_addr,
 
-                          uint16_t blk_len)
 
- {
 
-   /* USER CODE BEGIN 7 */ 
 
-   uint32_t write_addr; 
 
-   /* 扇区偏移7MB,外部Flash文件系统空间放在SPI Flash后面9MB空间 */
 
-   blk_addr+=SPI_FLASH_START_SECTOR;
 
-   write_addr = blk_addr*SPI_FLASH_SECTOR_SIZE;    
 
-   SPI_FLASH_SectorErase(write_addr);
 
-   SPI_FLASH_BufferWrite(buf,write_addr,blk_len*SPI_FLASH_SECTOR_SIZE);
 
-   return USBD_OK;
 
-   /* USER CODE END 7 */ 
 
- }
 
 
- /*******************************************************************************
 
- * Function Name  : STORAGE_GetMaxLun_FS
 
- * Description    : 
 
- * Input          : None.
 
- * Output         : None.
 
- * Return         : None.
 
- *******************************************************************************/
 
- int8_t STORAGE_GetMaxLun_FS (void)
 
- {
 
-   /* USER CODE BEGIN 8 */ 
 
-   return (STORAGE_LUN_NBR - 1);
 
-   /* USER CODE END 8 */ 
 
- }
 
 
- /* USER CODE BEGIN PRIVATE_FUNCTIONS_IMPLEMENTATION */
 
- /* USER CODE END PRIVATE_FUNCTIONS_IMPLEMENTATION */
 
 
- /**
 
-   * @}
 
-   */ 
 
 
- /**
 
-   * @}
 
-   */  
 
- /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/