//。。。。。初始化程序(省略)。。。。
mem_init(SRAMIN);
exfuns_init(); //为文件系统分配内存
f_mount(0,fs[0]); //挂载磁盘0---SD卡
f_mount(1,fs[1]); //挂在磁盘1 ---W25Q64
printf("\r\nSPI Flash格式化开始。。。。。。");
re=f_mkfs(1,0,4096);//Flash上创建文件系统
if (res == FR_OK)
{
printf("\r\n格式化成功。。。。");
}
re=f_open(&fsouce,"0:/Demo.txt",FA_OPEN_EXISTING|FA_READ); //打开SD卡根目录下 demo.txt文件
if(re==FR_OK)
{
printf("\r\n源文件打开成功");
re=f_open(&fdst,"1:/Demo.txt",FA_OPEN_ALWAYS|FA_WRITE);//Flash上创建demo.txt文件 ----------A
if(re==FR_OK)
{
printf("\r\n目标文件创建成功。。。。");
}
}
// re=f_opendir(&dir1,"1:");
// while(1)
// {
// re=f_readdir(&dir1,&fio1); //检查Flash上的文件,已经确定成功在Flash上创建了demo.txt文件
// }
printf("\n\r开始复制。。。。。");
while(1)
{
for ( a=0; a<512; a++ ) /* 清缓存 */
buffer[a]=0;
re=f_read(&fsouce,buffer,512,&bread); //读取SD卡上文件数据---------B
if (res || bread == 0) break; /* error or eof */
f_write(&fdst,buffer,bread,(UINT *)&bw); //写入新建立在Falsh上的demo.txt文件内
if(re ||bw<bread) break;
}
f_close(&fsouce);
f_close(&fdst);
}
myfree(SRAMIN,fftemp); //释放内存
myfree(SRAMIN,tempbuf); //??·?????
另外,文件系统内关于disk_ioctl()函数中关于Flsah 的设定
if(drv==EX_FLASH) //????FLASH
{
switch(ctrl)
{
case CTRL_SYNC:
res = RES_OK;
break;
case GET_SECTOR_SIZE:
*(WORD*)buff = FLASH_SECTOR_SIZE; //512
res = RES_OK;
break;
case GET_BLOCK_SIZE:
*(WORD*)buff = FLASH_BLOCK_SIZE; //8
res = RES_OK;
break;
case GET_SECTOR_COUNT:
*(DWORD*)buff = FLASH_SECTOR_COUNT; //2048*6
res = RES_OK;
break;
default:
res = RES_PARERR;
break;
}}else res=RES_ERROR;
return res;
问题:
如果屏蔽掉A句,B能正确的读出SD卡上的文件数据,如果不屏蔽掉A,B读出错,代码为0x01. 对SPI Flash上创建文件系统和创建demo.txt操作都成功的。不知道是哪里出了问题。。。。。请指点一下谢谢! |