FAT文件系统格式化到SPI flash上的问题(虚拟扇区与真实扇区)

本文探讨了FAT文件系统与SPI Flash存储器之间的数据映射问题,介绍了如何在RAM有限的情况下,通过虚拟扇区与真实扇区的转换,实现数据的有效读写。重点在于内存缓冲区的管理和数据的精确定位。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值