OpenEdv-开源电子网

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

FATFS,FLASH_SECTOR_COUNT:2048*6代表6M字节,怎么理解

[复制链接]

7

主题

57

帖子

0

精华

初级会员

Rank: 2

积分
146
金钱
146
注册时间
2012-11-13
在线时间
12 小时
发表于 2013-4-8 16:59:21 | 显示全部楼层 |阅读模式
原子大哥,有两个地方没有想明白,关键是不知道根据什么思路定的。还请原子大哥帮忙指导指导,如下: 
//前6M字节给fatfs用,6M字节后~6M+500K给用户用,6M+500K以后,用于存放字库,字库占用1.5M.         
(1)u16     FLASH_SECTOR_COUNT=2048*6;//6M字节,默认为W25Q64------2048*6怎么代表6M字节,没有看明白
#define FLASH_BLOCK_SIZE   8     //每个BLOCK有8个扇区    ----为什么是8?是根据什么定义的

//初始化磁盘
DSTATUS disk_initialize (
 BYTE drv    /* Physical drive nmuber (0..) */
)

 u8 res=0;    
 switch(drv)
 {
  case SD_CARD://SD卡
   res = SD_Initialize();//SD_Initialize()
    if(res)//STM32 SPI的bug,在sd卡操作失败的时候如果不执行下面的语句,可能导致SPI读写异常
   {
    SD_SPI_SpeedLow();
    SD_SPI_ReadWriteByte(0xff);//提供额外的8个时钟
    SD_SPI_SpeedHigh();
   }
     break;
  case EX_FLASH://外部flash
   SPI_Flash_Init();
(2)  if(SPI_FLASH_TYPE==W25Q64)FLASH_SECTOR_COUNT=2048*6;//W25Q64
   else FLASH_SECTOR_COUNT=2048*2;      //其他    ----这个也没有想明白
    break;
  default:
   res=1;
 }  
 if(res)return  STA_NOINIT;
 else return 0; //初始化成功
}  
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

头像被屏蔽

243

主题

429

帖子

0

精华

禁止发言

积分
1067
金钱
1067
注册时间
2011-12-23
在线时间
17 小时
发表于 2013-4-8 18:21:26 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-4-8 19:27:11 | 显示全部楼层
回复【楼主位】zjm_z:
---------------------------------
1,因为我们强制用512字节为扇区来管理W25Q64,那么512字节为单位,6M=(2048*512)*6了。
2,FLASH_BLOCK_SIZE即FLASH块大小,事实上FLASH最小擦除单位为4096字节,那么以512为单位,那么刚好就是8倍了。
3,看了1,应该3不是问题了。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

46

主题

1579

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1970
金钱
1970
注册时间
2011-7-17
在线时间
4 小时
发表于 2013-4-9 08:42:13 | 显示全部楼层
回复【3楼】正点原子:
---------------------------------
其实,这样的话,感觉不是很好,原子哥,如果你例程里面,直接把8M全部给FATFS用不更好?
字库直接文件方式存放进去,文件系统读,感觉跟方便管理一些。
虽然这样可能会由于文件系统的缘故,浪费掉一点FLASH容量。
Time?And?Relative?Dimension?In?Space.
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-4-9 10:23:21 | 显示全部楼层
回复【4楼】Tardis:
---------------------------------
主要为了速度。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

46

主题

1579

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1970
金钱
1970
注册时间
2011-7-17
在线时间
4 小时
发表于 2013-4-9 14:41:54 | 显示全部楼层
回复【5楼】正点原子:
---------------------------------
哦,原来如此,的确可以加快字库的读取速度。
Time?And?Relative?Dimension?In?Space.
回复 支持 反对

使用道具 举报

9

主题

66

帖子

0

精华

初级会员

Rank: 2

积分
122
金钱
122
注册时间
2013-3-16
在线时间
0 小时
发表于 2013-4-9 19:46:17 | 显示全部楼层
回复【6楼】Tardis:
---------------------------------
可是图片的速度呢?
回复 支持 反对

使用道具 举报

46

主题

1579

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1970
金钱
1970
注册时间
2011-7-17
在线时间
4 小时
发表于 2013-4-10 08:27:02 | 显示全部楼层
回复【7楼】wsshopping:
---------------------------------
其实,用了文件系统,读取也慢不了多少,原子说这里的速度,是指可以省略文件系统打开文件以及根据文件系统读族的速度,因为字库很大,肯定超过4k容量,所以文件系统肯定会移族的,跨族读取,不但SD卡上要多发一个指令,而且,文件系统判断也消耗掉了CPU周期。 但实测,如果把字库放SD卡用SDIO读取,实际速度比SPI FLASH要快很多。
Time?And?Relative?Dimension?In?Space.
回复 支持 反对

使用道具 举报

7

主题

57

帖子

0

精华

初级会员

Rank: 2

积分
146
金钱
146
注册时间
2012-11-13
在线时间
12 小时
 楼主| 发表于 2013-4-10 11:02:25 | 显示全部楼层
谢谢原子大哥及各位大神无私的指导,以后再实际使用中会用SD卡好些。
回复 支持 反对

使用道具 举报

16

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
105
金钱
105
注册时间
2013-4-15
在线时间
5 小时
发表于 2013-6-27 15:31:48 | 显示全部楼层
我还是没有看明白。6Mbyte=6*1024*1024byte.  一个sector是512byte.那么6Mbyte一共是6*1024*1024/512=12*1024个sector才对。一楼的程序太令人费解了。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-6-27 16:31:40 | 显示全部楼层
回复【10楼】rugaogary:
---------------------------------
6*2048和12*1024,不相等么?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

7

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
76
金钱
76
注册时间
2013-6-5
在线时间
1 小时
发表于 2013-10-29 16:28:05 | 显示全部楼层
回复【4楼】Tardis:
---------------------------------
"直接把8M全部给FATFS用不更好"  这个怎么实现啊
加油!
回复 支持 反对

使用道具 举报

46

主题

1579

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1970
金钱
1970
注册时间
2011-7-17
在线时间
4 小时
发表于 2013-10-29 17:53:29 | 显示全部楼层
回复【12楼】qujian55:
---------------------------------
这还不简单?你直接用fatfs上的f_mkfs对FLASH格式化即可
Time?And?Relative?Dimension?In?Space.
回复 支持 反对

使用道具 举报

7

主题

37

帖子

0

精华

初级会员

Rank: 2

积分
85
金钱
85
注册时间
2012-10-14
在线时间
0 小时
发表于 2013-12-13 22:11:33 | 显示全部楼层
回复【4楼】Tardis:
回复【3楼】正点原子: --------------------------------- 其实,这样的话,感觉不是很好,原子哥,如果你例程里面,直接把8M全部给FATFS用不更好? 字库直接文件方式存放进去,文件系统读,感觉跟方便管理一些。 虽然这样可能会由于文件系统的缘故,浪费掉一点FLASH容量。
---------------------------------
我想问一下,这个字库是有什么用途啊?是在SD卡里创建的文件内容显示简体中文么?
“字库直接文件方式存放进去,文件系统读,感觉跟方便管理一些。”是文件系统默认的读么?还是通过哪个函数调用这个字库呢?
你上面说的“因为字库很大,肯定超过4k容量,所以文件系统肯定会移族的,跨族读取,”这个4K是根据什么规定的啊?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-12-14 00:50:23 | 显示全部楼层
回复【14楼】fgq369:
---------------------------------
没有默认的读,都是要你写代码实现的.
4K是25X系列的sector大小.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

1

主题

6

帖子

0

精华

初级会员

Rank: 2

积分
74
金钱
74
注册时间
2015-12-9
在线时间
7 小时
发表于 2016-1-9 10:19:18 | 显示全部楼层
正点原子 发表于 2013-12-14 00:50
回复【14楼】fgq369:
---------------------------------
没有默认的读,都是要你写代码实现的.
4K是25X系列 ...

原子哥 我是用的W25Q64FV    8Mflash  ,fatfs版本是09, 我的问题是 我该怎么控制程序来检测flash有木有格式化呢?函数f_mount();可以么?直接判断返回值是否FS_OK?
回复 支持 反对

使用道具 举报

1

主题

6

帖子

0

精华

初级会员

Rank: 2

积分
74
金钱
74
注册时间
2015-12-9
在线时间
7 小时
发表于 2016-1-9 10:29:11 | 显示全部楼层
Tardis 发表于 2013-4-10 08:27
回复【7楼】wsshopping:
---------------------------------
其实,用了文件系统,读取也慢不了多少, ...

你好啊  最近我也在弄fatfs系统,想请教一个问题:我该怎么确认系统有没有初始化呢?用
f_mount();直接=判断返回值是否是fr_ok么?
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-21 23:18

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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