OpenEdv-开源电子网

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

关于Flash FATFS问题请教(不好意思,原先发错成分享帖了)

[复制链接]

36

主题

195

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
313
金钱
313
注册时间
2014-10-27
在线时间
34 小时
发表于 2016-1-20 09:07:09 | 显示全部楼层 |阅读模式
5金钱
不好意思,原先没注意,把求助帖发成分享帖了。重新发下,希望各位见谅。

开发板战舰    Flash:W25Q64(8M)
在FATFS试验中:前6M给FATFS,6M~6M+500K给用户,6M+500K以后用于存储字库
问题一:
我想问这个前6M给FATFS是如何实现的,是不是通过下面这两步:
第一步:u16     FLASH_SECTOR_COUNT=2048*6;

第二步:
DRESULT disk_ioctl (
BYTE drv,  /* Physical drive nmuber (0..) */
BYTE ctrl,  /* Control code */
void *buff  /* Buffer to send/receive control data */
)
{
DRESULT res;               
if(drv==SD_CARD)//SD卡
{
      switch(ctrl)
      {
       case CTRL_SYNC:
     SD_CS=0;
           if(SD_WaitReady()==0)res = RES_OK;
           else res = RES_ERROR;   
     SD_CS=1;
           break;  
       case GET_SECTOR_SIZE:
           *(WORD*)buff = 512;
           res = RES_OK;
           break;  
       case GET_BLOCK_SIZE:
           *(WORD*)buff = 8;
           res = RES_OK;
           break;  
       case GET_SECTOR_COUNT:
           *(DWORD*)buff = SD_GetSectorCount();
           res = RES_OK;
           break;
       default:
           res = RES_PARERR;
           break;
      }
}else if(drv==EX_FLASH) //外部FLASH  
{
      switch(ctrl)
      {
       case CTRL_SYNC:
     res = RES_OK;
           break;  
       case GET_SECTOR_SIZE:
           *(WORD*)buff = FLASH_SECTOR_SIZE;
           res = RES_OK;
           break;  
       case GET_BLOCK_SIZE:
           *(WORD*)buff = FLASH_BLOCK_SIZE;
           res = RES_OK;
           break;  
       case GET_SECTOR_COUNT:
           *(DWORD*)buff = FLASH_SECTOR_COUNT;      //这一步也不能缺少???????????????????????????????????????
          res = RES_OK;
           break;
       default:
           res = RES_PARERR;
           break;
      }
}else res=RES_ERROR;//其他的不支持
    return res;
}  

我看程序的时候好像没有其它地方还涉及到这个前6M。

问题二:
就是综合实验中,一开始会读取flash总容量,这边应该是属于FATFS管理的容量吧,频幕上显示为6124KB,使用的函数是res=exf_getfree("1:",&dtsize,&dfsize);6M应该是6*1024=6144KB?

问题三:
我在综合试验中改变u16     FLASH_SECTOR_COUNT=2048*6;这个值,为什么读出来的值还是6124KB?

最佳答案

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

72

主题

2711

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3505
金钱
3505
注册时间
2014-8-4
在线时间
696 小时
发表于 2016-1-20 09:07:10 | 显示全部楼层
以我资质之鲁钝,当尽平心静气、循序渐进、稳扎稳打之力。
回复

使用道具 举报

36

主题

195

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
313
金钱
313
注册时间
2014-10-27
在线时间
34 小时
 楼主| 发表于 2016-1-20 13:14:12 | 显示全部楼层

额,不好意思,没大明白,可以解释的详细点吗?
回复

使用道具 举报

72

主题

2711

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3505
金钱
3505
注册时间
2014-8-4
在线时间
696 小时
发表于 2016-1-20 13:25:45 | 显示全部楼层
善良的二哥 发表于 2016-1-20 13:14
额,不好意思,没大明白,可以解释的详细点吗?

[mw_shl_code=c,true]//初始化磁盘
DSTATUS disk_initialize (
        BYTE pdrv                                /* Physical drive nmuber to identify the drive */
)
{
        u8 res=0;            
        switch(pdrv)
        {
                case SD_CARD://SD卡
                        res=SD_Init();//SD卡初始化
                          break;
                case EX_FLASH://外部flash
                        W25QXX_Init();
                        FLASH_SECTOR_COUNT=2048*12;//W25Q1218,前12M字节给FATFS占用     <-----
                        break;
                default:
                        res=1;
        }                 
        if(res)return  STA_NOINIT;
        else return 0; //初始化成功
} [/mw_shl_code]

这个是针对你问题一和问题三的
以我资质之鲁钝,当尽平心静气、循序渐进、稳扎稳打之力。
回复

使用道具 举报

36

主题

195

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
313
金钱
313
注册时间
2014-10-27
在线时间
34 小时
 楼主| 发表于 2016-1-20 14:11:54 | 显示全部楼层
龙之谷 发表于 2016-1-20 13:25
[mw_shl_code=c,true]//初始化磁盘
DSTATUS disk_initialize (
        BYTE pdrv                                /* Physical drive nmube ...

感谢你的耐心解答。
我试了一下,把disk_initialize函数做了修改,原先的
if(SPI_FLASH_TYPE==W25Q64)FLASH_SECTOR_COUNT=2048*6;
改为:
if(SPI_FLASH_TYPE==W25Q64)FLASH_SECTOR_COUNT=2048*5;
但是结果显示还是Flash Disk:6124KB?
111111.jpg
回复

使用道具 举报

72

主题

2711

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3505
金钱
3505
注册时间
2014-8-4
在线时间
696 小时
发表于 2016-1-20 14:57:05 | 显示全部楼层
格式化(内容会丢失)
以我资质之鲁钝,当尽平心静气、循序渐进、稳扎稳打之力。
回复

使用道具 举报

36

主题

195

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
313
金钱
313
注册时间
2014-10-27
在线时间
34 小时
 楼主| 发表于 2016-1-20 15:19:10 | 显示全部楼层
龙之谷 发表于 2016-1-20 14:57
格式化(内容会丢失)

是的,我使用res=f_mkfs(1,1,4096);格式化flash以后,变成5100KB了。
是不是完成FLASH_SECTOR_COUNT==2048*5以后,再进行res=f_mkfs(1,1,4096);格式化flash,就是把前5M格式化才FATFS,且前5M数据丢失,而5M后面的没变,那么原先在5M~6M部分的呢,还是FATFS吗(原先是前6M FATFS)?
回复

使用道具 举报

72

主题

2711

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3505
金钱
3505
注册时间
2014-8-4
在线时间
696 小时
发表于 2016-1-20 15:21:13 | 显示全部楼层
善良的二哥 发表于 2016-1-20 15:19
是的,我使用res=f_mkfs(1,1,4096);格式化flash以后,变成5100KB了。
是不是完成FLASH_SECTOR_COUNT==20 ...

不在管理范围内的自然不是fatfs
以我资质之鲁钝,当尽平心静气、循序渐进、稳扎稳打之力。
回复

使用道具 举报

36

主题

195

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
313
金钱
313
注册时间
2014-10-27
在线时间
34 小时
 楼主| 发表于 2016-1-20 15:34:50 | 显示全部楼层
龙之谷 发表于 2016-1-20 15:21
不在管理范围内的自然不是fatfs

好的,谢谢你的耐心解答,能继续解答下第二个问题吗?
6M FATFS时是6124KB,比6*1024=6144KB少了20KB,
5M FATFS时是5100KB,比5*1024=5120KB也少了20KB,这20KB是不是用来存储FATFS的系统文件(如引导文件之类),而实际用getfree函数不将这部分计算在内?
回复

使用道具 举报

72

主题

2711

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3505
金钱
3505
注册时间
2014-8-4
在线时间
696 小时
发表于 2016-1-20 15:43:28 | 显示全部楼层
善良的二哥 发表于 2016-1-20 15:34
好的,谢谢你的耐心解答,能继续解答下第二个问题吗?
6M FATFS时是6124KB,比6*1024=6144KB少了20KB,
...

应该是被FATFS的管理信息(如FATFS/FIL/DIR)占用了,可参照内存管理实验内存池和内存管理表的关系来理解

个人猜测,仅供参考
以我资质之鲁钝,当尽平心静气、循序渐进、稳扎稳打之力。
回复

使用道具 举报

36

主题

195

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
313
金钱
313
注册时间
2014-10-27
在线时间
34 小时
 楼主| 发表于 2016-1-20 15:51:37 | 显示全部楼层
龙之谷 发表于 2016-1-20 15:43
应该是被FATFS的管理信息(如FATFS/FIL/DIR)占用了,可参照内存管理实验内存池和内存管理表的关系来理解 ...

谢谢龙之谷的耐心解答!
自己还得好好看看FATFS资料。
回复

使用道具 举报

6

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
164
金钱
164
注册时间
2016-1-14
在线时间
21 小时
发表于 2016-1-28 11:50:53 | 显示全部楼层
楼主你好,最近也在学习文件系统,想请教个问题:
原程序说是将前6M给FATFS,那如果我想把后6M给FATFS,那应该怎么设置呢?
回复

使用道具 举报

36

主题

195

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
313
金钱
313
注册时间
2014-10-27
在线时间
34 小时
 楼主| 发表于 2016-2-16 10:12:28 | 显示全部楼层
DHG 发表于 2016-1-28 11:50
楼主你好,最近也在学习文件系统,想请教个问题:
原程序说是将前6M给FATFS,那如果我想把后6M给FATFS,那 ...

额,这个我上次也考虑过,后来没有细究。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-21 02:57

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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