打印

在EEPROM等小容量储存器建立文件系统

[复制链接]
9161|17
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
mugenwon|  楼主 | 2011-11-7 09:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 mugenwon 于 2011-11-7 09:19 编辑

SD卡之类的容量很大,一般都用fat之类的文件系统。有操作系统给你,大堆函数给你甚至硬件也支持,那没问题。如果我要在一个24C04什么的上面,做类似的操作,用文件的方式,只给你一个51单片机,要做个简单的文件系统,怎么做?要求能放不限数量的文件,有文件名,能自动分配空间,整理空间,文件可以不连续存放。能随机删除,读取。有没有前辈做过分享一下经验?方法当然是越简单越好。(这里说的文件不是真正意义上的文件,只是一堆数据而已。例如放一段程序)

相关帖子

沙发
ayb_ice| | 2011-11-7 10:07 | 只看该作者
使用动态内存分配不就可以了

使用特权

评论回复
板凳
uurun| | 2011-11-7 10:35 | 只看该作者
eeprom文件系统.pdf (313.2 KB) 给你一片论文 应该用得上

使用特权

评论回复
地板
mugenwon|  楼主 | 2011-11-7 10:49 | 只看该作者
我是这样想的,但没试验过,首先提个想法。
第一,必须有个文件分配表。因为假如我要找某个文件,难道我必须从0开始整个空间完全读完才找到吗?那太慢了。有了文件分配表,我只要查这个表就知道某个文件在什么地方,多大,还有没有空间等等。
于是这里就有问题,这个分配表,大小是不是固定?固定的,虽然操作简单,显然不够灵活(但对于有限或已知的文件数量,用固定的方法更简单)。如果我要不固定,那这个表大小不固定,会影响到真正文件的存放。那么这个文件分配表也应该动态。
第二,我知道磁盘的组织,不是一字节一字节都给你用光的,他一簇一簇的用。就算你用一个字节,他也占了一簇空间。那我用EEPROM或者FLASh之类的,我也可以用这个办法简化操作(简化擦除)。例如24C某某,他一次能连续写64个字节一页,那我也干脆这么搞。以64字节为一单元。一来操作简单,二来寻址可以把地址低6位去掉,寻址空间变大64倍。
第三,分配表和文件区,如何实现动态分配。以前学过毛皮但真没实践过!原理大概是,一片数据里面,除了数据还有指针,指向下一个储存位置开头。做起来也不难,例如我64字节一单元,我可以第一单元为开始标志(为了标式,例如坏了就变成坏的标志,空就空标志),第2单元可以指向下一片地址,第三可以是长度等等,还加个结束标志的。
第四,为了区分哪个是分配表,哪个是真正文件储存区,这个储存器开头必须有个特别的区域,表明分配表在哪里,文件在哪里,这个区域可以固定死大小和格式。还可以加进什么ID之类的,总占用空间,总储存空间或者其他什么功能区以后开发用。
第五,文件不外乎读,写,擦除。读,首先在文件分配表找到文件开头位置,然后读即可。擦除,只要把文件分配表头干掉即可。或者也可以把真正文件区域也一同干掉(也是把几个关键字节干掉便行,如果是falsh只能一页干掉了),写的话,首先要知道有没有相同文件名。没有就看有无空间,有的话要判断是干掉旧的还是取消操作。这涉及到另一层次了。属于操作的层面。
操作层面就是,读,写,擦除,格式化等等动作,当然有返回值,成不成功,询问下一步确认等等。
当然,为了保险还可以加上校验功能,读写次数等等,看自己需要了。

使用特权

评论回复
5
mugenwon|  楼主 | 2011-11-7 11:02 | 只看该作者
感谢3楼的资料。但说实话,这样就能做一篇论文我觉得也太简单了吧。我觉得不如写篇如何提高文件系统的性能的论文好了。我发现windows系统,某个文件夹文件太多,打开就会蜗牛。假如有100个文件那还好,给你来个10万个文件,1000万个文件,一打开电脑不崩溃人都崩溃了。。。

使用特权

评论回复
6
uurun| | 2011-11-7 14:19 | 只看该作者
呵呵 这个是针对eeprom的"小型文件系统",主要针对的eeprom.那么他的容量就不会太大 也就不会有那么多文件.这个东东只是便于存储少量数据,方便检索.
当然如果你要通过单片机操作SD卡 那么你可以用fatfs这样的开源文件系统,编译之后也就几K,可以完成和电脑几乎一样的操作.但是不能用在eeprom上面啊.

使用特权

评论回复
7
SeaSun| | 2011-11-7 14:49 | 只看该作者
结构化数据存储,比文件系统省钱.

使用特权

评论回复
8
lixupengarm| | 2011-11-7 15:21 | 只看该作者
mark收下!

使用特权

评论回复
9
我是土匪| | 2011-11-8 09:43 | 只看该作者
呵呵 这个是针对eeprom的"小型文件系统",主要针对的eeprom.那么他的容量就不会太大 也就不会有那么多文件.这个东东只是便于存储少量数据,方便检索.
当然如果你要通过单片机操作SD卡 那么你可以用fatfs这样的开源文件 ...
uurun 发表于 2011-11-7 14:19


请问FATFS为什么不能用到eeprom?

使用特权

评论回复
10
BitFu| | 2011-11-8 09:54 | 只看该作者
没有必要,应用不需求

使用特权

评论回复
11
coody| | 2011-11-8 11:31 | 只看该作者
可以参考FAT12,做一个FAT8来用

使用特权

评论回复
12
逍遥派掌门| | 2011-11-8 14:17 | 只看该作者
没有必要.
如 24C01,就那么点容量,等所谓的"文件系统"上去,装东西的空间都没有了.
再说,用到24C这类东西的控制MCU,也是ROM很小的东西,操作"文件系统"
也不现实.

使用特权

评论回复
13
fastolf| | 2011-11-8 15:56 | 只看该作者
好东西~~~

使用特权

评论回复
14
winds617张| | 2011-11-30 22:23 | 只看该作者
很好

使用特权

评论回复
15
highgear| | 2011-11-30 23:51 | 只看该作者
文件系统用空间使用效率换来方便灵活,对于2404这么少的memory 得不偿失。

使用特权

评论回复
16
dailei251337957| | 2011-12-9 11:04 | 只看该作者
学习万岁!!

使用特权

评论回复
17
yanlinwei901110| | 2015-12-17 14:26 | 只看该作者
楼主成功了吗?
我最经在考虑用STM32的单片机在SST25VF016中以文件的方式存储数据。想请教一下。
谢谢

使用特权

评论回复
18
wooda| | 2023-2-3 15:36 | 只看该作者
spi方面文件系统多得多了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

96

主题

430

帖子

3

粉丝