文件配置
ff.h文件配置
1.在main.c中加入ff.h 2.挂载f_mount 参数 FATFS*操作系统文件较大,一般定义在全局变量 存储器路径 选项 0/1选择是否稍后挂载
FATSFS结构体 该结构体非常大,可能达到4096字节,所以不能放入函数里面变成栈,要设置成全局变量。如果向f_mount输入NULL相当于取消挂载。
路径是为了区分挂载的存储介质
因为我们将FLASH在diskio.c定义为1,所以第二个参数输入方法如下
为了保证f_mount的调用正常,可以通过返回值FRESULT 该返回值是一个枚举型结构体,通过返回值确认是否调用正常
由于我们定义了两个存储设备,需要将ffconf.h的_VOLUMES改为2 通过中断输出是否运行卡死 由于FLASH每个扇区共4096字节,我们没有设置SECTOR_SIZE,所以会卡住,需要将MAX_SS设置成和扇区一样的大小 3.对flash进行格式化 使用f_mkfs 路径,软盘与否,簇的大小
注意,格式化只需要一次,并且开启下图格式化条件,写入后取消挂载
另外是需要擦除FLASH 4.调用接口函数,例如写入一个文件 f_open (1)句柄 (2)路径+文件 (3)模式
f_write (1)句柄 (2)写入内容缓存 (3)写入内容大小 (4)已读字节 f_size读取句柄大小
f_lseek光标配置 (1)句柄 (2)位置 调用条件 5.调试代码
int main(void)
{
FRESULT res;
LED_GPIO_Config();
LED_BLUE;
SPI_FLASH_Init();
/* 配置串口为:115200 8-N-1 */
USART_Config();
printf("\r\n 这是一个8Mbyte串行flash(W25Q64)实验 \r\n");
res = f_mount(&fsObject,"1:",1);
printf("f_mount res = %d",res);
if(res == FR_NO_FILESYSTEM)
{
// res = f_mkfs("1:",0,work,FF_MAX_SS);
printf("\r\nf_mkfs res = %d",res);
printf("\r\nsizeof work = %d", sizeof work);
//格式化后要取消挂载在重新挂载文件
res = f_mount(NULL,"1:",1);
res = f_mount(&fsObject,"1:",1);
printf("\r\nsecond f_mount res =%d",res);
}
f_open(&fp,"1:test.txt",FA_OPEN_ALWAYS|FA_READ|FA_WRITE);
printf("\r\nf_open res = %d",res);
if(res == RES_OK)
{
f_write(&fp,wData,sizeof(wData),&bw);
printf("\r\n写入bw = %d",bw);
if(res == FR_OK)
{
f_lseek(&fp,0);
res = f_read(&fp,rData,f_size(&fp),&br);
printf("\r\n读取br = %d",br);
if(res == FR_OK)
{
printf("文件内容为:%s",rData);
}
}
}
}
|