OpenEdv-开源电子网

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

FATFS 中diskio.c文件中,FLASH_SECTOR_COUNT的定义疑问

[复制链接]

12

主题

42

帖子

0

精华

初级会员

Rank: 2

积分
103
金钱
103
注册时间
2015-12-29
在线时间
15 小时
发表于 2016-1-6 16:50:47 | 显示全部楼层 |阅读模式
3金钱
本帖最后由 qiuyutears 于 2016-1-6 19:58 编辑

//对于W25Q64
//前4.8M字节给fatfs用,4.8M字节后~4.8M+100K给用户用,4.9M以后,用于存放字库,字库占用3.09M.                                             
u16            FLASH_SECTOR_COUNT= 9832;        //4.8M字节,默认为W25Q64
#define FLASH_BLOCK_SIZE           8             //每个BLOCK有8个扇区

以上是diskio.c文件开头,我有个疑问:
FLASH_SECTOR_COUNT定义成了9832扇区.(每扇区512字节,2个扇区1024为1K)我计算了一下,9832扇区的容量 = 4916K = 4.916M字节。而4.8M的扇区数,则应该是9600个扇区。


多分配的232个扇区(116K),是不是被FATFS系统分配的?

4.8M后的100K给用户用    100K那就是有200个扇区给用户用。加上前面的9832个扇区,一共是10032个扇区。5016K一共被前面分配了。还剩下8*1024K-5016K = 3176K字节。

不知道我上面的说明是不是正确。因为看这个注释,实在是看的有点蒙。

望知情人解答!



最佳答案

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

怎么会是9600哦。。。 一个sector是512个字节,也就是0.5 kbytes. 那么4.8M是多少 kbyte呢,,不是4800,是4.8*1024。。。所以很明显你的错误了。。。 那么mini的怎么来的呢? u16 FLASH_SECTOR_COUNT= 9832; #define FLASH_SECTOR_SIZE 512 所以多少兆是这样算的 9832*512/(1024*1024)=4.800M 实际上,很简单,4.8M是多少个Sector? 4.8*1024*1024/512=9830.2 ,所以选取9830大点的9832
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

346

主题

1467

帖子

12

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
8055
金钱
8055
注册时间
2015-10-15
在线时间
2909 小时
发表于 2016-1-6 16:50:48 | 显示全部楼层
怎么会是9600哦。。。

一个sector是512个字节,也就是0.5 kbytes.
那么4.8M是多少 kbyte呢,,不是4800,是4.8*1024。。。所以很明显你的错误了。。。
那么mini的怎么来的呢?
u16            FLASH_SECTOR_COUNT= 9832;
#define FLASH_SECTOR_SIZE         512       
所以多少兆是这样算的 9832*512/(1024*1024)=4.800M

实际上,很简单,4.8M是多少个Sector?  4.8*1024*1024/512=9830.2 ,所以选取9830大点的9832
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

72

主题

2711

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3505
金钱
3505
注册时间
2014-8-4
在线时间
696 小时
发表于 2016-1-6 18:09:29 | 显示全部楼层
本帖最后由 龙之谷 于 2016-1-6 18:11 编辑

你的计算9832*512/1024 = 4916K = 4.916M字节。前边知道要除1024,后边直接4916K=1.916M了。
再向下看蒙了,计算单位来回倒腾,就不说了


回复

使用道具 举报

346

主题

1467

帖子

12

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
8055
金钱
8055
注册时间
2015-10-15
在线时间
2909 小时
发表于 2016-1-6 18:46:51 | 显示全部楼层
看晕了你的计算方法。。。

#define FLASH_SECTOR_SIZE         512                          
//前12M字节给fatfs用,12M字节后,用于存放字库,字库占用3.09M.        剩余部分,给客户自己用                                    
u16            FLASH_SECTOR_COUNT=2048*12;        //W25Q1218,前12M字节给FATFS占用

看看我们的定义吧。。。每个Sector 512个字节,一共分配2048*12个Sector。所以 FLASH_SECTOR_COUNT=2048*12;的意思是分配2048*12*512 byte= 12M。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

12

主题

42

帖子

0

精华

初级会员

Rank: 2

积分
103
金钱
103
注册时间
2015-12-29
在线时间
15 小时
 楼主| 发表于 2016-1-6 19:50:55 | 显示全部楼层
openedvadmin 发表于 2016-1-6 18:46
看晕了你的计算方法。。。

#define FLASH_SECTOR_SIZE         512                          

你贴的这个代码,我能理解,是战舰的,我现在用的是Mini板。

//对于W25Q64
//前4.8M字节给fatfs用,4.8M字节后~4.8M+100K给用户用,4.9M以后,用于存放字库,字库占用3.09M.                                             
u16            FLASH_SECTOR_COUNT= 9832;        //4.8M字节,默认为W25Q64
#define FLASH_BLOCK_SIZE           8             //每个BLOCK有8个扇区


这里的9832,我实在是算不出来是怎么得到的4.8M
回复

使用道具 举报

12

主题

42

帖子

0

精华

初级会员

Rank: 2

积分
103
金钱
103
注册时间
2015-12-29
在线时间
15 小时
 楼主| 发表于 2016-1-6 20:31:13 | 显示全部楼层
openedvadmin 发表于 2016-1-6 18:46
看晕了你的计算方法。。。

#define FLASH_SECTOR_SIZE         512                          

4.8M字节,扇区数是9600.
例程中定义是9832.所以,我就是这里不理解。多出来232个扇区。
100K占用200个字节。
即使是9600+200,也还有32个扇区,不知道是如何分配的,
或者说例程上的注释错误,本应该是分配了FATFS的扇区数是9832个,
占用地址一共是4.8M(9600扇区)+100K(200扇区)+16K(32扇区) = 4.916M
4.916M字节分给了FATFS使用。
8M-4.916M = 3.084M给字库用。而字库却是需要3.09M。好像这样的分配,也不够。
回复

使用道具 举报

12

主题

42

帖子

0

精华

初级会员

Rank: 2

积分
103
金钱
103
注册时间
2015-12-29
在线时间
15 小时
 楼主| 发表于 2016-1-6 22:04:21 | 显示全部楼层
openedvadmin 发表于 2016-1-6 16:50
怎么会是9600哦。。。

一个sector是512个字节,也就是0.5 kbytes.

那后面,又空出了100K给用户使用。最后才是3.09M的字库空间。我这样理解对吧?
非常感谢。
回复

使用道具 举报

5

主题

24

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
366
金钱
366
注册时间
2016-6-2
在线时间
46 小时
发表于 2016-12-26 10:36:51 | 显示全部楼层
qiuyutears 发表于 2016-1-6 22:04
那后面,又空出了100K给用户使用。最后才是3.09M的字库空间。我这样理解对吧?
非常感谢。

所以多少兆是这样算的 9832*512/(1024*1024)=4.800M,不是4.916M,这里你一直就没看明白。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-29 04:54

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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