【问题标题】:STM32L433RCTx USB MSC Read/write failure, GetCapacityFS workingSTM32L433RCTx USB MSC 读/写失败,GetCapacityFS 工作
【发布时间】:2020-07-21 11:43:11
【问题描述】:

我想从我的 STM32L433RCTx 构建一个 SD 卡读卡器。 SD 卡通过 SDMMC 1 SD 4 bits Wide 总线连接。 USB_DEVICE 已激活并设置为海量存储类。

当我连接到计算机时,会显示一个存储设备,但 Windows 想要对其进行格式化。但是,它无法格式化该卡。它显示了 SD 卡的正确大小。我最重要的功能是:

int8_t STORAGE_GetCapacity_FS(uint8_t lun, uint32_t *block_num, uint16_t *block_size)
{
  /* USER CODE BEGIN 3 */
  HAL_SD_GetCardInfo(&hsd1, &SDCardInfo);
  *block_size = BLOCK_SIZE;
  *block_num = SDCardInfo.BlockNbr;
  return (USBD_OK);
  /* USER CODE END 3 */
}

我想这个可以正常工作,因为 SD 卡的大小是正确的。

但是,读写不起作用。

int8_t STORAGE_Read_FS(uint8_t lun, uint8_t *buf, uint32_t blk_addr, uint16_t blk_len)
{
  /* USER CODE BEGIN 6 */
    HAL_SD_ReadBlocks(&hsd1, buf, blk_addr, (uint32_t) blk_len, 10);
    return (USBD_OK);
  /* USER CODE END 6 */
}
 
int8_t STORAGE_Write_FS(uint8_t lun, uint8_t *buf, uint32_t blk_addr, uint16_t blk_len)
{
  /* USER CODE BEGIN 7 */
HAL_SD_WriteBlocks(&hsd1, buf, blk_addr, (uint32_t) blk_len, 10);
return (USBD_OK);
  /* USER CODE END 7 */
}

问题:

  1. 是否可以在不使用 FATFS 的情况下完成这项工作,还是我需要先将带有 FATFS 的 SD 卡连接到 MCU,然后在 USB 驱动程序中传递此信息?
  2. 什么是正确的读写函数?

【问题讨论】:

    标签: stm32


    【解决方案1】:

    对于我使用 STM32F410R 进行的示例测试,我云读写 sdcard ,代码如下:

    int8_t STORAGE_Read_FS(uint8_t lun, uint8_t *buf, uint32_t blk_addr, uint16_t blk_len)
    {
      /* USER CODE BEGIN 6 */
      HAL_SD_ReadBlocks(&hsd, buf, blk_addr, blk_len, HAL_MAX_DELAY);
    
      /* Wait until SD card is ready to use for new operation */
      while (HAL_SD_GetCardState(&hsd) != HAL_SD_CARD_TRANSFER);
    
      return (USBD_OK);
      /* USER CODE END 6 */
    }
    
    int8_t STORAGE_Write_FS(uint8_t lun, uint8_t *buf, uint32_t blk_addr, uint16_t blk_len)
    {
      /* USER CODE BEGIN 7 */
      HAL_SD_WriteBlocks(&hsd, buf, blk_addr, blk_len, HAL_MAX_DELAY);
    
    
      /* Wait until SD card is ready to use for new operation */
      while (HAL_SD_GetCardState(&hsd) != HAL_SD_CARD_TRANSFER);
    
      return (USBD_OK);
      /* USER CODE END 7 */
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-07
      • 1970-01-01
      • 1970-01-01
      • 2017-08-09
      • 2012-12-15
      • 2017-12-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多