cancel
Showing results for 
Search instead for 
Did you mean: 

STM32CubeMX USB HS Mass Storage Class code 10

admin23
Associate II
Posted on June 17, 2015 at 09:34

Hi,

I have an STM3240G-EVAL board and I try to configure the USB-HS with the SD-Card. I have seleccted: - USB-OTG-HS: External Phy - Device_Only - SDIO: Mode - SD 1 bit - USB_DEVICE: Class For HS IP: Mass Storage Class And I have only generated the code. I have not change anything. In the code I change it:

/**
******************************************************************************
* @file : usbd_storage_if.c
* @brief : Memory management layer
******************************************************************************
* COPYRIGHT(c) 2015 STMicroelectronics
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
* 3. Neither the name of STMicroelectronics nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS''
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
******************************************************************************
*/
/* Includes ------------------------------------------------------------------*/
#include ''usbd_storage_if.h''
#include ''stm32f4xx_hal_sd.h''
/* Private typedef -----------------------------------------------------------*/
/* Private define ------------------------------------------------------------*/
/* Private macro -------------------------------------------------------------*/
/* Private variables ---------------------------------------------------------*/
/* USB handler declaration */
/* Handle for USB High Speed IP */
USBD_HandleTypeDef *hUsbDevice_1;
extern
USBD_HandleTypeDef hUsbDeviceHS; 
extern
SD_HandleTypeDef hsd;
extern
HAL_SD_CardInfoTypedef SDCardInfo;
/* Private function prototypes -----------------------------------------------*/
/* Extern function prototypes ------------------------------------------------*/
/* Private functions ---------------------------------------------------------*/
#define STORAGE_LUN_NBR 1 
#define STORAGE_BLK_NBR 0x10000 
#define STORAGE_BLK_SIZ 0x200
static
int8_t STORAGE_Init_HS (uint8_t lun);
static
int8_t STORAGE_GetCapacity_HS (uint8_t lun, 
uint32_t *block_num, 
uint16_t *block_size);
static
int8_t STORAGE_IsReady_HS (uint8_t lun);
static
int8_t STORAGE_IsWriteProtected_HS (uint8_t lun);
static
int8_t STORAGE_Read_HS (uint8_t lun, 
uint8_t *buf, 
uint32_t blk_addr,
uint16_t blk_len);
static
int8_t STORAGE_Write_HS (uint8_t lun, 
uint8_t *buf, 
uint32_t blk_addr,
uint16_t blk_len);
static
int8_t STORAGE_GetMaxLun_HS (
void
);
/* USER CODE BEGIN 1 */
/* USB Mass storage Standard Inquiry Data */
const
int8_t STORAGE_Inquirydata_HS[] = {
//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 1 */
USBD_StorageTypeDef USBD_Storage_Interface_fops_HS =
{
STORAGE_Init_HS,
STORAGE_GetCapacity_HS,
STORAGE_IsReady_HS,
STORAGE_IsWriteProtected_HS,
STORAGE_Read_HS,
STORAGE_Write_HS,
STORAGE_GetMaxLun_HS,
(int8_t *)STORAGE_Inquirydata_HS,
};
/*******************************************************************************
* Function Name : STORAGE_Init_HS
* Description : 
* Input : None.
* Output : None.
* Return : None.
*******************************************************************************/
int8_t STORAGE_Init_HS (uint8_t lun)
{
/* USER CODE BEGIN 9 */
return
(USBD_OK);
/* USER CODE END 9 */
}
/*******************************************************************************
* Function Name : STORAGE_GetCapacity_HS
* Description : 
* Input : None.
* Output : None.
* Return : None.
*******************************************************************************/
int8_t STORAGE_GetCapacity_HS (uint8_t lun, uint32_t *block_num, uint16_t *block_size)
{
/* USER CODE BEGIN 10 */
HAL_SD_Get_CardInfo (&hsd, &SDCardInfo);
* block_num = SDCardInfo.CardCapacity / SDCardInfo.CardBlockSize;
* block_size = SDCardInfo.CardBlockSize;
return
(USBD_OK);
/* USER CODE END 10 */
}
/*******************************************************************************
* Function Name : STORAGE_IsReady_HS
* Description : 
* Input : None.
* Output : None.
* Return : None.
*******************************************************************************/
int8_t STORAGE_IsReady_HS (uint8_t lun)
{
/* USER CODE BEGIN 11 */
return
(USBD_OK);
/* USER CODE END 11 */
}
/*******************************************************************************
* Function Name : STORAGE_IsWriteProtected_HS
* Description : 
* Input : None.
* Output : None.
* Return : None.
*******************************************************************************/
int8_t STORAGE_IsWriteProtected_HS (uint8_t lun)
{
/* USER CODE BEGIN 12 */
return
(USBD_OK);
/* USER CODE END 12 */
}
/*******************************************************************************
* Function Name : STORAGE_Read_HS
* Description : 
* Input : None.
* Output : None.
* Return : None.
*******************************************************************************/
int8_t STORAGE_Read_HS (uint8_t lun, 
uint8_t *buf, 
uint32_t blk_addr, 
uint16_t blk_len)
{
HAL_SD_Get_CardInfo (&hsd, &SDCardInfo);
HAL_SD_ReadBlocks(&hsd, (uint32_t*)buf, (uint64_t)(blk_addr * SDCardInfo.CardBlockSize), SDCardInfo.CardBlockSize, blk_len);
return
(USBD_OK);
/* USER CODE END 13 */
}
/*******************************************************************************
* Function Name : STORAGE_Write_HS
* Description :
* Input : None.
* Output : None.
* Return : None.
*******************************************************************************/
int8_t STORAGE_Write_HS (uint8_t lun, 
uint8_t *buf, 
uint32_t blk_addr,
uint16_t blk_len)
{
HAL_SD_Get_CardInfo (&hsd, &SDCardInfo);
HAL_SD_WriteBlocks(&hsd, (uint32_t*)buf, (uint64_t)(blk_addr * SDCardInfo.CardBlockSize), SDCardInfo.CardBlockSize, blk_len);
return
(USBD_OK);
/* USER CODE END 14 */
}
/*******************************************************************************
* Function Name : STORAGE_GetMaxLun_HS
* Description : 
* Input : None.
* Output : None.
* Return : None.
*******************************************************************************/
int8_t STORAGE_GetMaxLun_HS (
void
)
{
/* USER CODE BEGIN 15 */
return
(STORAGE_LUN_NBR - 1);
/* USER CODE END 15 */
}
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

And when I conect the USB i have the error Code 10 in windows. What's wrong?? Thanks
3 REPLIES 3
chrif
Associate II
Posted on June 22, 2015 at 15:16

Hi,

I reproduced your issue and I had the same problem,

Have a look at the example under the F4 package to compare your code and the existing one:

STM32Cube_FW_F4_V1.5.0\Projects\STM324xG_EVAL\Applications\USB_Device\MSC_Standalone

tema_gold_1
Associate
Posted on December 06, 2015 at 14:01

Hi!

file startup_stm32f4??xe.s must be increased Heap_Size

Heap_Size       EQU     0x00000400

After solving this problem. I have a problem: the connection I see the message that is not formatted flash cards

Posted on December 06, 2015 at 15:09

I have a problem: the connection I see the message that is not formatted flash cards

I'd probably pay more attention to the 64-bit casting

Tips, Buy me a coffee, or three.. PayPal Venmo
Up vote any posts that you find helpful, it shows what's working..