你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

请教FATFS0.12C,f_mkfs()用法。

[复制链接]
dabendan001 提问时间:2019-5-23 12:34 /
之前项目里用的是Fatfs  v0.11版本,正常。现要支持对exFat格式U盘扫描,升级为 v0.12c。但发现f_mkfs()变化很大,除了新添加参数之外,原先的文件系统格式常数,也有变化。旧版本中,有0:flash,1:sfd。  而新版本里:FM_FAT:0x01,FM_FAT32:0X02......FM_SFD:0X08。

我对SPI flash(不是U盘,是板上焊的华邦存储芯片,8M容量)格式化完成之后,无法进行文件操作。

哪位有使用fatfs v0.12a之后版本成功的示例,共享、指导一下,谢谢。
收藏 评论6 发布时间:2019-5-23 12:34

举报

6个回答
yklstudent 回答时间:2019-5-23 15:54:25
FRESULT result;
FATFS fs;           /* File system object for flash disk logical drive */
FIL fil;            /* File object */
FILINFO fno;
char spath[4];      /* SFLASH logical drive path */
BYTE work[FF_MAX_SS];
uint32_t br, bw;

typedef struct _filesystem_info_t
{
        int total_space;
        int free_space;
} filesystem_info;

filesystem_info fatfs_info;

filesystem_info fatfs_get_info(uint8_t *drv)
{
        FATFS *fs;
        uint8_t res;
        DWORD fre_clust=0, fre_sect=0, tot_sect=0;
  
        filesystem_info info;
  
        memset(&info, 0x0, sizeof(filesystem_info));
  
        res = f_getfree((const TCHAR*)drv, &fre_clust, &fs);
        if(res==0)
    {                                                                                          
                tot_sect = (fs->n_fatent - 2) * fs->csize;
                fre_sect = fre_clust * fs->csize;
                if(tot_sect<20480)
                {
            info.total_space = tot_sect>>1;
            info.free_space = fre_sect>>1;
                }
                else
                {
            info.total_space = tot_sect>>11;
            info.free_space = fre_sect>>11;
                }
    }
       
    return info;
}

void uctsk_lua_init(void)
{
        FATFS_LinkDriver( &SFLASH_Driver, spath );
        f_mount( &fs, (TCHAR const*) spath, 0 );
        fatfs_info = fatfs_get_info( (uint8_t*) spath );
        if ( fatfs_info.total_space == 0 || fatfs_info.free_space <= 0x100 )//0x1BC0
        {
                f_mkfs ( (TCHAR const*) spath, FM_ANY, 0, work, sizeof(work));
                fatfs_info = fatfs_get_info( (uint8_t*) spath );
        }
        FATFS_UnLinkDriver( spath );
}
以上是我使用的,可以参考

评分

参与人数 1蝴蝶豆 +3 收起 理由
STMCU + 3

查看全部评分

dabendan001 回答时间:2019-5-23 16:43:08
yklstudent-1794 发表于 2019-5-23 15:54
FRESULT result;
FATFS fs;           /* File system object for flash disk logical drive */
FIL fil;   ...

我 res_flash = f_mkfs("1:",FM_ANY, 0, work, sizeof work); 也能成功。返回0;

比你的少了:FATFS_LinkDriver()调用。跟这个有关系么??

dabendan001 回答时间:2019-5-23 17:10:31
可能我没表达清楚。我同时挂了两个存储设备,系统如何区分 0:和1:分别代表 SPI-flash和U盘?(也就是说,如何将“0:”与某个存储器绑定)
dabendan001 回答时间:2019-5-25 18:45:10
yklstudent-1794 发表于 2019-5-23 15:54
FRESULT result;
FATFS fs;           /* File system object for flash disk logical drive */
FIL fil;   ...

SFLASH_Driver  这个的驱动实例,可否也分享一下?谢谢。
dabendan001 回答时间:2019-5-27 00:30:48
困扰我许久了,今天终于解决了。感谢论坛里诸位大神的回贴帮助。
解决办法:
ffconf.h文件中,我将 _MAX_SS 和 _MIN_SS均置为512了……问题所在。
改为:
#define        _MIN_SS                512
#define        _MAX_SS                4096
即可。

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2 总结问题

查看全部评分

ssssss 回答时间:2020-7-31 09:59:23
dabendan001 发表于 2019-5-27 00:30
困扰我许久了,今天终于解决了。感谢论坛里诸位大神的回贴帮助。
解决办法:
ffconf.h文件中,我将 _MAX_SS ...

我也遇到这个问题,你是多大的sd卡?

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版