美文网首页
STM32 虚拟U盘

STM32 虚拟U盘

作者: wjundong | 来源:发表于2021-05-27 14:28 被阅读0次

使用 SRAM 进行简单测试

  • Cubemx 设置 USB_OTG_FSDevice_Only, USB_DEVICE 设置 Class For FS IPMass Storage Class, 里面详细配置使用默认参数即可.
  • 到 Project Manager 设置栈大小稍微大些, 因为 USB 协议的函数调用和局部变量较多, 比如设置成 0x10000.
  • usbd_storage_if.c 中添加如下代码, 使用 SRAM 作为存储:
    #define STORAGE_LUN_NBR                  1
    #define STORAGE_BLK_NBR                  200        /* 内存容量一般来说很少, 这里使用 100K 的内存作为实验 */
    #define STORAGE_BLK_SIZ                  0x200
    
    /* USER CODE BEGIN PRIVATE_DEFINES */
    static char msc_data[STORAGE_BLK_NBR * STORAGE_BLK_SIZ];    /* 定义数组用来存放数据 */
    /* USER CODE END PRIVATE_DEFINES */
    
    /* 修改下面两个函数 */
    int8_t STORAGE_Read_FS(uint8_t lun, uint8_t *buf, uint32_t blk_addr, uint16_t blk_len)
    {
        /* USER CODE BEGIN 6 */
        memcpy(buf, msc_data + STORAGE_BLK_SIZ*blk_addr, blk_len*STORAGE_BLK_SIZ);
    
        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 */
        memcpy(msc_data + STORAGE_BLK_SIZ*blk_addr, buf, blk_len*STORAGE_BLK_SIZ);
    
        return (USBD_OK);
        /* USER CODE END 7 */
    }
    

使用 NAND FLASH 做测试

int8_t STORAGE_Read_FS(uint8_t lun, uint8_t *buf, uint32_t blk_addr, uint16_t blk_len)
{
  /* USER CODE BEGIN 6 */
  for (int i = 0; i < blk_len; i++)
  {
    nand_flash_read_page((blk_addr + i) * 64, 0, buf, 4096);
  }
  
  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 */
  for (int i = 0; i < blk_len; i++)
  {
    nand_flash_erase(blk_addr + i);
    nand_flash_write_page((blk_addr + i) * 64, 0, buf, 4096);
  }
  return (USBD_OK);
  /* USER CODE END 7 */
}

相关文章

网友评论

      本文标题:STM32 虚拟U盘

      本文链接:https://www.haomeiwen.com/subject/jgnrsltx.html