原创 智林STM32开发板上的FatFS移植

2009-12-1 17:02 5190 9 9 分类: MCU/ 嵌入式

<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 https://static.assets-stash.eet-china.com/album/old-resources/2009/12/1/ac1699f4-963a-4f9b-a237-4f5e0f9cfb50.rar在智林stm32开发板上使用,利用串口输入命令fread和fwrite可以读写文件,但现在问题还比较多。有时间再具体分析。不过总算可以读写文件了。


 


这两天把FatFS移植到了我的开发板上,已经可以读写文件了。


但是移植过程中也出了一些问题:


1)刚开始,读文件不能成功。我的读函数是这样的,参照了网上公布的源代码。


    res = f_mount(0, &fs);


    res = f_open(&file, "abc.txt", FA_OPEN_EXISTING | FA_READ);


    if(res!=FR_OK)


    {     Uart_PutString ("Open file failed\r\n");    }


    for(i=0;i<512;i++)


       {     data = 0;     }


    while(1)


    {


        if(fgets(data, sizeof(data), &file)==0)


        {   break;  } 


      Uart_PutString((u8*)data);


    }


f_close(&file);


单步调试进去,发现不能识别FAT32文件系统,做了如下修正,读写就成功了。


#define _FAT32      1 原来是0,改为1,因为我的SD卡格式成了FAT32格式。


 


2)读的问题解决了,但写入总是不成功。经过调试发现问题出在扇区写函数操作时,如果每次写操作时,单步过去,能写入。什么原因不太清楚,我的解决方法是:


       u32 i="100000";


 


    if (drv || !count)


    {   


        return RES_PARERR;  //仅支持单磁盘操作,count不能等于0,否则返回参数错误


    }


 


    // 读写操作


    if(count == 1)


    {


        res = SD_WriteBlock(sector, buff);


              while ( i-- );


    }


    else


    {


        res = SD_WriteMultiBlock(sector, (u32)count, buff);


}


每次写完一个扇区后,稍作停顿,利用while ( i-- ),而且这个数值不能太小,1000050000都不行,调到100000才成功。


3)操作方法:


利用fwrite指令可写入文件,利用fread命令读出文件,最近比较忙,没有时间详细写分析过程了,有兴趣的朋友可以阅读源代码。

文章评论0条评论)

登录后参与讨论
我要评论
0
9
关闭 站长推荐上一条 /2 下一条