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);
具體的工程代碼: