USB MSD on STM32C071
Hello,
I tried to program a MSD on an STM32C071. My computer "sees" the USB device but didn't recognized it as a storage device. I use the NUCLEO-C071 and have setup the following:
RCC:
High Speed Clock(HSE): Crystal/Ceramic Resonator
Clock Configuration:
Input frequency: 8
HCLK: 48
ToUSB(Mhz) HSIUSB48: 48
CubeMX USB:
Mode: Device_Only,
USB interrupt enabled
CubeMX USBX:
UXDevice memory pool size: 1024*5
USBX Device Generate Core Init code: yes
USBX Device System Stack Size: 1024*5
In CubeIDE:
main.c:
/* USER CODE BEGIN 2 */
MX_USB_PCD_Init(); // Line 94
/* USER CODE END 2 */
/* USER CODE BEGIN USB_Init 2 */
HAL_PCDEx_PMAConfig(&hpcd_USB_DRD_FS, 0x00 , PCD_SNG_BUF, 0x20); // Line 180
HAL_PCDEx_PMAConfig(&hpcd_USB_DRD_FS, 0x80 , PCD_SNG_BUF, 0x60);
HAL_PCDEx_PMAConfig(&hpcd_USB_DRD_FS, 0x81 , PCD_SNG_BUF, 0xA0);
ux_dcd_stm32_initialize((ULONG)NULL, (ULONG)&hpcd_USB_DRD_FS);
HAL_PCD_Start(&hpcd_USB_DRD_FS);
/* USER CODE END USB_Init 2 */
In ux_device_msc.c
/* USER CODE BEGIN PD */
#define STORAGE_LUN_NBR 1 //Line 35
#define STORAGE_BLK_NBR 24
#define STORAGE_BLK_SIZ 0x200
/* USER CODE END PD */
/* USER CODE BEGIN PV */
uint8_t buffer[STORAGE_BLK_NBR*STORAGE_BLK_SIZ]; /Line 48
/* USER CODE END PV */
/* USER CODE BEGIN USBD_STORAGE_Read */
memcpy(buffer, &data_pointer[lba*STORAGE_BLK_SIZ], number_blocks*STORAGE_BLK_SIZ ); // Line 109
/* USER CODE BEGIN USBD_STORAGE_Write */
memcpy(&data_pointer[lba*STORAGE_BLK_SIZ], buffer, number_blocks*STORAGE_BLK_SIZ ); // Line 139
The rest is all default
I figured out that the _ux_utility_memory_allocate(UX_NO_ALIGN, ....) returns 0 for the memory in ux_device_stack_initialize.c. The memory register tells me that I used 86,43% of memory. What must I do to have a running MSD?
Edited to apply source code formatting - please see How to insert source code for future reference.
