Skip to main content
Visitor II
September 3, 2025
Question

Usb device MSC problem

  • September 3, 2025
  • 2 replies
  • 311 views

 

I'm already achieved a USBX-MSC class, and also a FileX in MCU local.

I know that using two file systems at the same time is not recommended, but still have some questions.

 

1. I implement the ux_deveice_msc.c as followed. Use PC-Windows to create a file such as my_test.txt to U-DISK, successfully and the local FileX will see the new file immediately.

 

 

 

UINT USBD_STORAGE_Read(VOID *storage_instance, ULONG lun, UCHAR *data_pointer,
 ULONG number_blocks, ULONG lba, ULONG *media_status)
{
 UINT status = UX_SUCCESS;

 /* USER CODE BEGIN USBD_STORAGE_Read */
 UINT fxStatus = FX_SUCCESS;
 while (number_blocks--) {
 fxStatus = fx_media_read(sdioDisk, lba, data_pointer);
 if (fxStatus != FX_SUCCESS) {
 status = UX_ERROR;
 break;
 }
 data_pointer += sdioDisk->fx_media_bytes_per_sector;
 lba++;
 }
 /* USER CODE END USBD_STORAGE_Read */

 return status;
}

UINT USBD_STORAGE_Write(VOID *storage_instance, ULONG lun, UCHAR *data_pointer,
 ULONG number_blocks, ULONG lba, ULONG *media_status)
{
 UINT status = UX_SUCCESS;

 /* USER CODE BEGIN USBD_STORAGE_Write */
 UINT fxStatus = FX_SUCCESS;
 while (number_blocks--) {
 fxStatus = fx_media_write(sdioDisk, lba, data_pointer);
 if (fxStatus != FX_SUCCESS && lba != 0) {
 status = UX_ERROR;
 break;
 }
 data_pointer += sdioDisk->fx_media_bytes_per_sector;
 lba++;
 }
 /* USER CODE END USBD_STORAGE_Write */

 return status;
}

UINT USBD_STORAGE_Flush(VOID *storage_instance, ULONG lun, ULONG number_blocks,
 ULONG lba, ULONG *media_status)
{
 UINT status = UX_SUCCESS;

 /* USER CODE BEGIN USBD_STORAGE_Flush */
 if (fx_media_cache_invalidate(sdioDisk) != FX_SUCCESS || fx_media_flush(sdioDisk) != FX_SUCCESS) {
 status = UX_ERROR;
 }
 /* USER CODE END USBD_STORAGE_Flush */

 return status;
}
View more

 

2. When I use local FileX to create a new file, and call function fx_media_flush, the Host PC-Windows can't see th new file until the usb reconnect. Seem windows explorer cache not fresh.

3. Based on point 2, I want to implement function USBD_STORAGE_Status, when some changes happend in local, return a UX_ERROR and media_status with Sense Key = UNIT ATTENTION (0x06), ASC/ASCQ = NOT READY TO READY CHANGE, MEDIA MAY HAVE CHANGED (0x28, 0x00). The purpose is let host reread the U-DISK's FAT32 table.

 

 

 
UINT USBD_STORAGE_Status(VOID *storage_instance, ULONG lun, ULONG media_id,
 ULONG *media_status)
{
 UINT status = UX_SUCCESS;

 /* USER CODE BEGIN USBD_STORAGE_Status */
 UX_PARAMETER_NOT_USED(storage_instance);
 UX_PARAMETER_NOT_USED(lun);
 UX_PARAMETER_NOT_USED(media_id);
 UX_PARAMETER_NOT_USED(media_status);
 /* USER CODE END USBD_STORAGE_Status */

 return status;
}



I want to know if this method is feasible? THANK YOU!

    This topic has been closed for replies.

    2 replies

    Technical Moderator
    September 12, 2025

    Hi @Jason927 

    Which STM32U5 are you using?

    Jason927Author
    Visitor II
    September 16, 2025

    STM32U5A9NJH6Q

    Super User
    September 12, 2025

    I want to know if this method is feasible?

    Recommend to ask this on Stack Overflow or in the MS Windows forum, to get attention of people knowledgeable in Windows.