OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2907|回复: 6

关于FATFS文件系统实验

[复制链接]

1

主题

3

帖子

0

精华

新手入门

积分
11
金钱
11
注册时间
2018-11-29
在线时间
3 小时
发表于 2018-11-29 16:51:00 | 显示全部楼层 |阅读模式
1金钱
我用的miniSTM32开发板,程序完全是下载的例程,使用的SD大卡,下载后屏幕一直提示“Fatfs Error!”,也就是这个函数exf_getfree("0",&total,&free)得不到SD卡的总容量和剩余容量,不挂载文件系统时,是可以读到SD卡容量,这应该是SD卡的问题还是文件系统的问题?程序完全是下载的例程没更改过,刚开始研究文件系统不太懂,还请大佬赐教
while(exf_getfree("0",&total,&free))        //得到SD卡的总容量和剩余容量{
        LCD_ShowString(60,150,200,16,16,"Fatfs Error!");
        delay_ms(200);
        LCD_Fill(60,150,240,150+16,WHITE);//清除显示                          
        delay_ms(200);
        LED0=!LED0;//DS0闪烁
}       


最佳答案

查看完整内容[请看2#楼]

问题已经解决了,原来用的金士顿8G的SD卡,格式化FAT32后还是有这个问题,我换了一个闪迪1G的SD卡就好了,不知道是不是只有我一个人有这个问题,感谢原子哥!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

3

帖子

0

精华

新手入门

积分
11
金钱
11
注册时间
2018-11-29
在线时间
3 小时
 楼主| 发表于 2018-11-29 16:51:01 | 显示全部楼层
正点原子 发表于 2018-11-30 01:44
多大的卡?重新格式化成FAT32,试试

问题已经解决了,原来用的金士顿8G的SD卡,格式化FAT32后还是有这个问题,我换了一个闪迪1G的SD卡就好了,不知道是不是只有我一个人有这个问题,感谢原子哥!
回复

使用道具 举报

109

主题

5564

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
10572
金钱
10572
注册时间
2017-2-18
在线时间
1914 小时
发表于 2018-11-29 17:37:50 | 显示全部楼层
“不挂载文件系统时,是可以读到SD卡容量”是指?
回复

使用道具 举报

1

主题

3

帖子

0

精华

新手入门

积分
11
金钱
11
注册时间
2018-11-29
在线时间
3 小时
 楼主| 发表于 2018-11-29 21:21:48 | 显示全部楼层
peng1554 发表于 2018-11-29 17:37
“不挂载文件系统时,是可以读到SD卡容量”是指?

意思就是在FATFS文件系统实验中得到SD卡总容量的函数是下面这个,返回值是错误的
//drv:磁盘编号("0:"/"1:")
//total:总容量         (单位KB)
//free:剩余容量         (单位KB)
//返回值:0,正常.其他,错误代码
u8 exf_getfree(u8 *drv,u32 *total,u32 *free)
{
        FATFS *fs1;
        u8 res;
    u32 fre_clust=0, fre_sect=0, tot_sect=0;
    //得到磁盘信息及空闲簇数量
    res =(u32)f_getfree((const TCHAR*)drv, (DWORD*)&fre_clust, &fs1);
    if(res==0)
        {                                                                                          
            tot_sect=(fs1->n_fatent-2)*fs1->csize;        //得到总扇区数
            fre_sect=fre_clust*fs1->csize;                        //得到空闲扇区数          
#if _MAX_SS!=512                                                                  //扇区大小不是512字节,则转换为512字节
                tot_sect*=fs1->ssize/512;
                fre_sect*=fs1->ssize/512;
#endif          
                *total=tot_sect>>1;        //单位为KB
                *free=fre_sect>>1;        //单位为KB
        }
        return res;
}

而在SD卡实验中得到SD卡容量的函数是下面这个,返回值是正确的,
//返回值:0: 取容量出错
//其他:SD卡的容量(扇区数/512字节)
u32 SD_GetSectorCount(void)
{
    u8 csd[16];
    u32 Capacity;  
    u8 n;
                u16 csize;                                              
        //取CSD信息,如果期间出错,返回0
    if(SD_GetCSD(csd)!=0) return 0;            
    //如果为SDHC卡,按照下面方式计算
    if((csd[0]&0xC0)==0x40)         //V2.00的卡
    {       
                csize = csd[9] + ((u16)csd[8] << 8) + 1;
                Capacity = (u32)csize << 10;//得到扇区数                           
    }else//V1.XX的卡
    {       
                n = (csd[5] & 15) + ((csd[10] & 128) >> 7) + ((csd[9] & 3) << 1) + 2;
                csize = (csd[8] >> 6) + ((u16)csd[7] << 2) + ((u16)(csd[6] & 3) << 10) + 1;
                Capacity= (u32)csize << (n - 9);//得到扇区数   
    }
    return Capacity;
}
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2018-11-30 01:43:01 | 显示全部楼层
重新格式化一下,试试
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2018-11-30 01:44:38 | 显示全部楼层
多大的卡?重新格式化成FAT32,试试
回复

使用道具 举报

9

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
83
金钱
83
注册时间
2018-11-20
在线时间
18 小时
发表于 2018-11-30 18:57:49 | 显示全部楼层
我好好的金士顿8G卡,有时候也会出现“Fatfs Error!”,把         字库判别           的那一块注释掉就好了,不过这样做坏处就是  lcd_showstring();显示不了汉字。。。有时候就是会出现问题,而且下载的是原例程。。。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-1 06:54

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表