From ed65605edc5c1376947a34723b9c750400b5a028 Mon Sep 17 00:00:00 2001 From: Damien Date: Sun, 13 Oct 2013 00:42:20 +0100 Subject: Inital commit of stm32f4xx framework. --- stm/lib/usbd_storage_msd.c | 350 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 350 insertions(+) create mode 100644 stm/lib/usbd_storage_msd.c (limited to 'stm/lib/usbd_storage_msd.c') diff --git a/stm/lib/usbd_storage_msd.c b/stm/lib/usbd_storage_msd.c new file mode 100644 index 000000000..1844ef9ad --- /dev/null +++ b/stm/lib/usbd_storage_msd.c @@ -0,0 +1,350 @@ +/** + ****************************************************************************** + * @file usbd_storage_msd.c + * @author MCD application Team + * @version V1.1.0 + * @date 19-March-2012 + * @brief This file provides the disk operations functions. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "usbd_msc_mem.h" +#include "usb_conf.h" + +/** @addtogroup STM32_USB_OTG_DEVICE_LIBRARY + * @{ + */ + + +/** @defgroup STORAGE + * @brief media storage application module + * @{ + */ + +/** @defgroup STORAGE_Private_TypesDefinitions + * @{ + */ +/** + * @} + */ + + +/** @defgroup STORAGE_Private_Defines + * @{ + */ + +#define STORAGE_LUN_NBR 1 +/** + * @} + */ + + +/** @defgroup STORAGE_Private_Macros + * @{ + */ +/** + * @} + */ + + +/** @defgroup STORAGE_Private_Variables + * @{ + */ +/* USB Mass storage Standard Inquiry Data */ +const int8_t STORAGE_Inquirydata[] = {//36 + + /* LUN 0 */ + 0x00, + 0x00, // make it 0x80 for a removable drive + 0x02, + 0x02, + (USBD_STD_INQUIRY_LENGTH - 5), + 0x00, + 0x00, + 0x00, + 'S', 'T', 'M', ' ', ' ', ' ', ' ', ' ', /* Manufacturer : 8 bytes */ + 'm', 'i', 'c', 'r', 'o', 'S', 'D', ' ', /* Product : 16 Bytes */ + 'F', 'l', 'a', 's', 'h', ' ', ' ', ' ', + '1', '.', '0' ,'0', /* Version : 4 Bytes */ +}; + +/** + * @} + */ + + +/** @defgroup STORAGE_Private_FunctionPrototypes + * @{ + */ +int8_t STORAGE_Init (uint8_t lun); + +int8_t STORAGE_GetCapacity (uint8_t lun, + uint32_t *block_num, + uint32_t *block_size); + +int8_t STORAGE_IsReady (uint8_t lun); + +int8_t STORAGE_IsWriteProtected (uint8_t lun); + +int8_t STORAGE_Read (uint8_t lun, + uint8_t *buf, + uint32_t blk_addr, + uint16_t blk_len); + +int8_t STORAGE_Write (uint8_t lun, + uint8_t *buf, + uint32_t blk_addr, + uint16_t blk_len); + +int8_t STORAGE_GetMaxLun (void); + + +USBD_STORAGE_cb_TypeDef USBD_MICRO_SDIO_fops = +{ + STORAGE_Init, + STORAGE_GetCapacity, + STORAGE_IsReady, + STORAGE_IsWriteProtected, + STORAGE_Read, + STORAGE_Write, + STORAGE_GetMaxLun, + (int8_t *)STORAGE_Inquirydata, +}; + +USBD_STORAGE_cb_TypeDef *USBD_STORAGE_fops = &USBD_MICRO_SDIO_fops; +/* +#ifndef USE_STM3210C_EVAL +extern SD_CardInfo SDCardInfo; +#endif +*/ + +/** + * @} + */ + + +/** @defgroup STORAGE_Private_Functions + * @{ + */ + + +/** + * @brief Initialize the storage medium + * @param lun : logical unit number + * @retval Status + */ + +int8_t STORAGE_Init (uint8_t lun) +{ + /* +#ifndef USE_STM3210C_EVAL + NVIC_InitTypeDef NVIC_InitStructure; + NVIC_InitStructure.NVIC_IRQChannel = SDIO_IRQn; + NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority =0; + NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; + NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; + NVIC_Init(&NVIC_InitStructure); +#endif + if( SD_Init() != 0) + { + return (-1); + } + */ + + return (0); + +} + +/** + * @brief return medium capacity and block size + * @param lun : logical unit number + * @param block_num : number of physical block + * @param block_size : size of a physical block + * @retval Status + */ +int8_t STORAGE_GetCapacity (uint8_t lun, uint32_t *block_num, uint32_t *block_size) +{ +/* +#ifdef USE_STM3210C_EVAL + SD_CardInfo SDCardInfo; + + SD_GetCardInfo(&SDCardInfo); + +#else + if(SD_GetStatus() != 0 ) + { + return (-1); + } +#endif + */ + + + *block_size = 512; + //*block_num = SDCardInfo.CardCapacity / 512; + *block_num = 256 + 128; + + return (0); + +} + +/** + * @brief check whether the medium is ready + * @param lun : logical unit number + * @retval Status + */ +int8_t STORAGE_IsReady (uint8_t lun) +{ + + /* +#ifndef USE_STM3210C_EVAL + + static int8_t last_status = 0; + + if(last_status < 0) + { + SD_Init(); + last_status = 0; + } + + if(SD_GetStatus() != 0) + { + last_status = -1; + return (-1); + } +#else + if( SD_Init() != 0) + { + return (-1); + } +#endif +*/ + return (0); +} + +/** + * @brief check whether the medium is write-protected + * @param lun : logical unit number + * @retval Status + */ +int8_t STORAGE_IsWriteProtected (uint8_t lun) +{ + return 0; +} + +/** + * @brief Read data from the medium + * @param lun : logical unit number + * @param buf : Pointer to the buffer to save data + * @param blk_addr : address of 1st block to be read + * @param blk_len : nmber of blocks to be read + * @retval Status + */ +int disk_read ( + uint8_t pdrv, /* Physical drive nmuber (0..) */ + uint8_t *buff, /* Data buffer to store read data */ + uint32_t sector, /* Sector address (LBA) */ + uint32_t count /* Number of sectors to read (1..128) */ +); +int8_t STORAGE_Read (uint8_t lun, + uint8_t *buf, + uint32_t blk_addr, + uint16_t blk_len) +{ + + /* + if( SD_ReadMultiBlocks (buf, + blk_addr * 512, + 512, + blk_len) != 0) + { + return -1; + } +#ifndef USE_STM3210C_EVAL + SD_WaitReadOperation(); + while (SD_GetStatus() != SD_TRANSFER_OK); +#endif +*/ + disk_read(0, buf, blk_addr, blk_len); + return 0; +} +/** + * @brief Write data to the medium + * @param lun : logical unit number + * @param buf : Pointer to the buffer to write from + * @param blk_addr : address of 1st block to be written + * @param blk_len : nmber of blocks to be read + * @retval Status + */ +int disk_write ( + uint8_t pdrv, /* Physical drive nmuber (0..) */ + const uint8_t *buff, /* Data to be written */ + uint32_t sector, /* Sector address (LBA) */ + uint32_t count /* Number of sectors to write (1..128) */ +); +int8_t STORAGE_Write (uint8_t lun, + uint8_t *buf, + uint32_t blk_addr, + uint16_t blk_len) +{ + + /* + if( SD_WriteMultiBlocks (buf, + blk_addr * 512, + 512, + blk_len) != 0) + { + return -1; + } +#ifndef USE_STM3210C_EVAL + SD_WaitWriteOperation(); + while (SD_GetStatus() != SD_TRANSFER_OK); +#endif +*/ + disk_write(0, buf, blk_addr, blk_len); + return (0); +} + +/** + * @brief Return number of supported logical unit + * @param None + * @retval number of logical unit + */ + +int8_t STORAGE_GetMaxLun (void) +{ + return (STORAGE_LUN_NBR - 1); +} +/** + * @} + */ + + +/** + * @} + */ + + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ + -- cgit v1.2.3