FAT文件系統格式化到SPI flash上的問題(虛擬扇區與真實扇區)

FAT文件系統中標準的虛擬扇區是512bytes的數據,而SPI flash的扇區的真實大小是4096。

主要思想:

在內存中申請4096的buffer,每次寫入數據,要把真實扇區的數據讀出來,然後在寫入內存中在填充512bytes的數據,請看如下所示的圖。

上圖中是讀寫扇區數據的流程,對於讀扇區來說可以不需要特別的操作,但是對於寫操作來說必須要獲取flash上真實的地址扇區,然後在根據地址計算虛擬的扇區位於真實扇區的什麼地址,之所以這樣操作的原因:

內存RAM不夠使用,無法將實際的扇區地址與虛擬的地址大小映射成一樣的大小

具體的實現代碼:

  uint32_t spi_real_sector = 0;
  uint32_t offset_sector = 0;
  spi_real_sector = blk_addr / SPI_REAL_FLASH_SIZE;
  offset_sector = (blk_addr % SPI_REAL_FLASH_SIZE) / DEVICE_SPI_FLASH_SECTOR_SIZE;
  _ReadSector(fat_buffer,spi_real_sector * SPI_REAL_FLASH_SIZE,SPI_REAL_FLASH_SIZE);
memcpy(fat_buffer + offset_sector * DEVICE_SPI_FLASH_SECTOR_SIZE,buf,blk_len);

具體的工程代碼:

https://github.com/panuniverse/STM32_USB_MSC_DEVICE_FAT

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