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