stm32 FAT16文件系統和USB MSC結合映射成U盤模式

(1)CubexMax生成FAT16文件系統和USB MSC的代碼

首先配置USB MSC將USB配置成Device模式

然後在將Device配置成MSC

這個時候會出現如下圖所示的界面

這個時候需要配置RCC

然後在配置FAT

(2)設計思想

在這個過程用RAM的256K空間模擬磁盤空間

(3)關鍵代碼

#define STORAGE_LUN_NBR                  1

#define DEVICE_FLASH_SECTOR_COUNT        256 // set secrot count.
#define DEVICE_SPI_FLASH_SECTOR_SIZE     512 //define sector size.

#define STORAGE_BLK_NBR                  DEVICE_FLASH_SECTOR_COUNT
#define STORAGE_BLK_SIZ                  DEVICE_SPI_FLASH_SECTOR_SIZE


#define FAT_SIZE (DEVICE_FLASH_SECTOR_COUNT * DEVICE_SPI_FLASH_SECTOR_SIZE)
extern uint8_t fat_buffer[FAT_SIZE];

uint32_t Device_Init();


uint32_t _ReadSector(uint8_t *buf, uint32_t blk_addr, uint16_t blk_len);



uint32_t _WriteSector(const uint8_t *buf, uint32_t blk_addr, uint16_t blk_len);
uint8_t fat_buffer[FAT_SIZE];

__weak uint32_t Device_Init()
{
  //init device SPI_DEVICE device.
}

__weak uint32_t _ReadSector(uint8_t *buf, uint32_t blk_addr, uint16_t blk_len)
{
    memcpy(buf,fat_buffer + blk_addr,blk_len);
    return 0;
}

__weak uint32_t _WriteSector(const uint8_t *buf, uint32_t blk_addr, uint16_t blk_len)
{
  memcpy(fat_buffer + blk_addr,buf,blk_len);
  return 0;
}

以上兩段代碼是MSC和FAT訪問內存的關鍵部分,由於我是使用內存模擬的磁盤,如果需要使用flash作爲磁盤,值需要將init、write、read替換對應flashAPI即可

(4)源碼路徑:

[email protected]:panuniverse/STM32_USB_MSC_DEVICE_FAT.git

 

工程項目使用的編譯器是IAR

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章