关于FATFS内存大小的问题

2019-07-20 19:33发布

#define SD_CARD         0  //SD卡,卷标为0
#define EX_FLASH 1        //外部flash,卷标为1               10*1024*1024/512

#define FLASH_SECTOR_SIZE         512                          
//对于W25Q128
//前10M字节给fatfs用,10M字节后,用于存放字库,字库占用3.09M.        14M字节以后,给客户自己用                                     
u16            FLASH_SECTOR_COUNT=2048*10;        //W25Q1218,前10M字节给FATFS占用
#define FLASH_BLOCK_SIZE           8             //每个BLOCK有8个扇区

问题1:为什么说前10M字节给FATFS占用。我在代码中没有看到把FATFS写到外部Flash的过程啊,这个FATFS好像是直接解压后添加到工程中做点小的修改就可以调用了啊。请大神解释下。
问题2:我能够把字库直接放在单片机内部的FLASH中吗,不想在外面挂着外部的FLASH。

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
5条回答
shuaigew88
1楼-- · 2019-07-20 22:34
本帖最后由 shuaigew88 于 2016-10-18 11:35 编辑
王朝代号 发表于 2016-10-18 10:55
针对第一个问题,前10M字节意思全部被文件系统占用了,前10M里面存的是什么代码呢?我好像发现文件系统没 ...

前10M用于文件系统的意思是说前面10MB的空间由文件系统来管理,不是说文件系统就占用了10MB的空间,而是利用文件系统的读写函数操作时前10M的空间是由文件系统自由分配的,用户不需要关心文件数据具体写入了前10M的哪个地址里,W25Q的读写函数不能进行读写否则就会破坏文件系统导致文件丢失,必须要使用文件系统的读写函数。后6MB可以用W25Q读写函数操作,当然如果你不想用文件系统也是可以的,16MB的空间可以全部由你自己分配那么你就必须要自己去管理地址。
shuaigew88
2楼-- · 2019-07-21 02:47
1:W25Q128共16MB字节,其实可以将16MB全部用在FATFS(FATFS简单配置一下就可以用),直接可以将字库用文件形式读取但是效率低因为为了方便W25Q128的扇区一般是4K操作(读取最小单元4k)!按照你上面的划分方式是为了将字库读取速度优化到最快。

2:可以放到单片机内部FLASH,不过要将完整的汉字库放到内部flash的话我估计只有傻子才会这么做,1是FLASH容量有限,一个字库小之250k、大则几M甚至几十M。2:就算内部flash够用,这么大的程序每次调试时等程序下载好了心都凉了。
王朝代号
3楼-- · 2019-07-21 04:45
shuaigew88 发表于 2016-10-18 10:13
1:W25Q128共16MB字节,其实可以将16MB全部用在FATFS(FATFS简单配置一下就可以用),直接可以将字库用文件形 ...

针对第一个问题,前10M字节意思全部被文件系统占用了,前10M里面存的是什么代码呢?我好像发现文件系统没有写到flash里面吧。它就在根文件下面,我可以直接调用,并没有通过W25Q128去调用文件系统的函数啊。麻烦告诉下,谢谢。
shuaigew88
4楼-- · 2019-07-21 09:37
王朝代号 发表于 2016-10-18 10:55
针对第一个问题,前10M字节意思全部被文件系统占用了,前10M里面存的是什么代码呢?我好像发现文件系统没 ...

如果你操作W25Q_128的时候直接调用的W25Q的读写函数,那么就跟FATFS没有关系!如果用到f_open()之类的就是用了文件系统,文件系统是用来管理W25Q128的。如果0扇区的第一个字节是0XEB一般可以说明就有文件系统。
王朝代号
5楼-- · 2019-07-21 14:26
 精彩回答 2  元偷偷看……

一周热门 更多>