Flash存储器特点在嵌入式系统中一般使用NOR技术的Flash存储器,既可存储数据,还可存放直接执行的代码。而这种Flash存储器不象普通的块设备。它不能对同一内存地址写入两次,而必须先进行耗时的擦除操作,而且一次擦除一个扇区,扇区大小一般为64K字节。
这就是为什么需要为Flash存储器开发专用的文件系统,而不能使用已有的文件系统。扇区完全擦除后,所有位都变为‘1’;在写入操作时,可使必要的位从‘1’变为‘0’。但是要让位从‘0’变为‘1’,就需要再进行擦除操作。擦除操作比较耗时,一般需要1-2秒,甚至最大要10秒。
对于实时系统来说,肯定不能进行忙等待擦除完成。在RTOS中,可以延时系统调用完成查询等待。另外需要提醒一点,在Flash存储器进行擦除操作时,不能再进行正常的读取操作,这需要启动擦除的任务在操作期间独占该设备,操作完成后再释放掉,这可由信号量(semaphere)来完成互斥独占,若在中断中也有访问Flash的代码,还需屏蔽中断,但实时系统一般不允许。 NOR型Flash每个扇区的擦除次数都有限制,一般10万次-100万次。而写入操作对Flash损耗不大,一般没有次数限制。 Flash存储器接口还有两个标准:CFI和JEDEC。CFI为公共Flash接口[Common Flash Interface],用来帮助程序从Flash芯片中获取操作方式信息,而不用在程序中硬编码Flash的ID。具体请参考文献[1],[2]。JEDEC用来帮助程序读取Flash的制造商ID和设备ID,以确定Flash的大小和算法,如果芯片不支持CFI,就需使用JEDEC了。
Flash存储器的扇区过大,是实现文件系统的最大障碍。而小扇区Flash可更方便地实现文件系统,如SST的SST29SF040,ATMEL的AT29BV040等。这种Flash很类似磁盘,可方便地实现定位置文件分配表的文件系统,如DOS文件系统。但这对频繁写入数据的应用来说仍存在缺陷,文件分配表的频繁改写会很快损坏其存放扇区。另外这种Flash未普遍使用,字节写入也较慢。 |