项目简介
本项目是在SPI串行Flash存储器上构建虚拟磁盘和文件系统的解决方案。集成了ChaN氏制作的FatFs R0.12c,支持16Mbit到2Gbit的SPI串行Flash存储器,还具备自动设备参数检测、替代扇区功能以及预留区域等特性。
项目的主要特性和功能
- 支持16Mbit到2Gbit的SPI串行Flash存储器,兼容4k字节擦除操作。
- 可自动检测连接的SPI Flash设备参数。
- 实现替代扇区功能,减少因设备写入次数限制导致的文件损坏。
- 支持在Flash存储器起始地址处预留任意大小区域,适用于FPGA配置或引导代码。
- 能根据FatFs的配置(ffconf.h)优化代码量,以适应不同内存限制。
安装使用步骤
初始化Flash存储器
首次使用时,需在Flash存储器上创建磁盘区域(低级格式化)。磁盘区域大小可在1M字节到设备最大容量之间,以4k字节为单位指定。格式化过程会检查所有扇区,耗时较长。
创建FAT卷
使用FatFs的f_mkfs
函数创建FAT卷。完成此步骤后,文件系统即可正常访问。
文件读写操作
使用f_open
、f_read
、f_write
等函数进行文件读写操作。由于写入操作需要按扇区擦除,写入速度较慢,需注意避免异常终止。
代码示例
```C
include
include "fatfs/ff.h"
include "spidisk.h"
int main(void) { FATFS fs; / FatFs工作区 / FIL fil; / 文件对象 / FRESULT res; / API结果代码 / UINT bw; / 写入字节数 / BYTE work[_MAX_SS]; / 工作区 /
// SPI磁盘低级格式化
res = spidisk_format(0, 0);
if (res) {
printf("[!] spidisk_format error %d\n\n", res);
exit(-1);
}
// 创建FAT卷
res = f_mkfs("", FM_ANY, 0, work, sizeof work);
if (res) {
printf("[!] f_mkfs error %d\n\n", res);
exit(-1);
}
// 挂载文件系统
f_mount(&fs, "", 0);
// 打开文件并写入数据
res = f_open(&fil, "message.txt", FA_WRITE | FA_CREATE_ALWAYS);
if (res) {
printf("[!] f_open error %d\n\n", res);
exit(-1);
}
f_write(&fil, "Hello, World!\r\n", 15, &bw);
if (bw != 15) {
printf("[!] f_write error\n\n");
exit(-1);
}
// 关闭文件
f_close(&fil);
return 0;
} ```
移植说明
若需在其他SPI主控环境下使用,需修改spidisk.c
中的spi_waitready
和spi_transaction
函数,以适应不同的I/O访问方式。
许可证
本项目采用MIT许可证,详细信息请参阅项目源码中的许可证声明。
下载地址
点击下载 【提取码: 4003】【解压密码: www.makuang.net】