正在进行的一个项目:arm,linux2.6.30。遇到一个问题是:需要频繁保存数据,不到一分钟保存一次数据,数据长度为1k。说说我的想法,请各位大侠指点。
1、在nand flash上分一个区专用于这个数据保存,采用yaffs2文件系统。通过写文件的方式来保存,下次上电直接读这个文件。
问题在于:虽然数据不大,但如此频繁地写数据,是否会对nand flash寿命产生影响(nand flash手册说是擦写10万次)?另外,yaffs2能够进行垃圾回收,这个分区的数据始终不多(小于1k),什么时候会启动垃圾回收呢?是否会严重占用系统资源,使系统运行很慢?
2、采用mtd接口直接操作nand flash,进行数据的读写。
问题在于:nand flash具有坏块,需要我们进行标记。程序书写麻烦。并且读写始终在于一个范围的block,感觉比第一种方法更加伤害nand flash。相比较而言,第一种方法采用yaffs2,yaffs2是否会自动均衡写数据的block?这里说出自己的一个想法。各位大侠说说自己的看法最好了。
3、采用eeprom进行数据读写。
这个方法貌似不错。但硬件上只有一块24c02,无法保存1k的数据。如果采用这种方法,只能更换器件。另外这条i2c总线同时连接rtc时钟,如此频繁操作eeprom,是否会对rtc时钟有影响,每次读取eeprom数据是否都是正确的?因为eeprom存储空间有限,存储的话,也只能存储一次数据,如果此次数据有错误,那么就无法恢复原始数据。相比较,nand flash可以采用冗余存储,存储多次数据以防万一。
4、采用data flash 如at45db321d 4MB。
这个硬件没有连接,暂时没有试验。但硬件如果连接上,对以后的硬件操作产生影响,不太方便。所以暂时没有倾向于这个方案。
个人比较偏向于第一种方法,比较方便嘛,呵呵。
各位大侠说说哪种好些。
2 个解决方案
#1
1, 2的实质是一样的, 最后都是交由文件系统管理 都要经过mtd 最后调用 yaffs2的实现
uboot有nand write命令, 我忘记kernel下是否有相应的命令了. 如果有, 跟1,2也是一样的.
kernel有坏块管理, 会把坏块保存到nand的最后某个块(好像是最后一个,不是很肯定)
由于做过u-boot与kernel的nand 坏块这块, 所以跟u-boot的有些混了. 记得不是很清楚.
写一个专门块时,如果是坏块, u-boot 下有nand write.yaffs2 向Nand Flash写入数据,如果NandFlash相应的区域有坏块,可以跳过坏块, kernel的是否会自动跳过我忘了, 但是如果没有,加上这个功能不是很难.
垃圾回收这块没研究. 不断写,对nand肯定有影响. 固定写在几个块中, 会对这几个块影响更大.
我觉得自己指定块写,不是好想法. 还是交由系统管理.
uboot有nand write命令, 我忘记kernel下是否有相应的命令了. 如果有, 跟1,2也是一样的.
kernel有坏块管理, 会把坏块保存到nand的最后某个块(好像是最后一个,不是很肯定)
由于做过u-boot与kernel的nand 坏块这块, 所以跟u-boot的有些混了. 记得不是很清楚.
写一个专门块时,如果是坏块, u-boot 下有nand write.yaffs2 向Nand Flash写入数据,如果NandFlash相应的区域有坏块,可以跳过坏块, kernel的是否会自动跳过我忘了, 但是如果没有,加上这个功能不是很难.
垃圾回收这块没研究. 不断写,对nand肯定有影响. 固定写在几个块中, 会对这几个块影响更大.
我觉得自己指定块写,不是好想法. 还是交由系统管理.
#2
恩。交给系统来进行管理要好一些。感觉频繁写NAND FLASH也不是个事。
#1
1, 2的实质是一样的, 最后都是交由文件系统管理 都要经过mtd 最后调用 yaffs2的实现
uboot有nand write命令, 我忘记kernel下是否有相应的命令了. 如果有, 跟1,2也是一样的.
kernel有坏块管理, 会把坏块保存到nand的最后某个块(好像是最后一个,不是很肯定)
由于做过u-boot与kernel的nand 坏块这块, 所以跟u-boot的有些混了. 记得不是很清楚.
写一个专门块时,如果是坏块, u-boot 下有nand write.yaffs2 向Nand Flash写入数据,如果NandFlash相应的区域有坏块,可以跳过坏块, kernel的是否会自动跳过我忘了, 但是如果没有,加上这个功能不是很难.
垃圾回收这块没研究. 不断写,对nand肯定有影响. 固定写在几个块中, 会对这几个块影响更大.
我觉得自己指定块写,不是好想法. 还是交由系统管理.
uboot有nand write命令, 我忘记kernel下是否有相应的命令了. 如果有, 跟1,2也是一样的.
kernel有坏块管理, 会把坏块保存到nand的最后某个块(好像是最后一个,不是很肯定)
由于做过u-boot与kernel的nand 坏块这块, 所以跟u-boot的有些混了. 记得不是很清楚.
写一个专门块时,如果是坏块, u-boot 下有nand write.yaffs2 向Nand Flash写入数据,如果NandFlash相应的区域有坏块,可以跳过坏块, kernel的是否会自动跳过我忘了, 但是如果没有,加上这个功能不是很难.
垃圾回收这块没研究. 不断写,对nand肯定有影响. 固定写在几个块中, 会对这几个块影响更大.
我觉得自己指定块写,不是好想法. 还是交由系统管理.
#2
恩。交给系统来进行管理要好一些。感觉频繁写NAND FLASH也不是个事。