Symbian 电话使用闪存作为它们存储系统代码和用户数据的主要场所。闪存是可编程可电子擦除的硅基非易失性存储介质。
闪存的使用是通过与它的物理操作进行绑定实现的。单独的比特位只能从1态转化为0态。将一个比特位存为1态要求擦除整个闪存块或闪存片段,通常是64KB。往一个0态的比特位写入不会产生任何结果。
闪存有两种主要的类型:
闪存有两种主要的类型:NOR和NAND。这个名字涉及到它们基本的硅栅设计。通过文件系统的选择,这两种闪存类型在Symbian OS电话里都得到很好的利用。第九章,文件服务器,将讨论文件系统更多的细节。
内嵌系统代码和应用对于Symbian应用程序来说就是一个很大的只读驱动器,被称为Z:盘。这个复合的文件系统是由芯片内执行(XIP, execute in place)代码和在要求时从只读文件系统(ROFS,Read Only File System)加载的代码构成。Z:盘有时候被称为ROM映像。
用户数据和安装的应用程序位于内部的可写的C:盘上。C:盘用两种不同的文件系统中的一种实现,这两种文件系统是:用于NOR的LFFS (Flash Translation Layer)或者NAND顶部的闪存转换层(FTL)之上的标准FAT文件系统。
当今典型的Symbian电话为代码和用户数据使用32或64MB的闪存——这是全部的ROM预算。
Symbian使用很多技术以减小电话内代码和数据的大小,比如THUMB指令集、预连接XIP映像、压缩的可执行包、强调减少代码大小的压缩数据格式和编码规范等。
2.4.1 NOR闪存
NOR闪存用于存储由CPU直接运行的XIP代码,它被连接到SoC上静态的内存总线上,可以像RAM一样随机寻址。如果闪存定位于0物理地址,即0x00000000,那么ARM CPU可以从NOR Flash直接启动。
对于用户数据,Symbian使用了NOR闪存顶部的LFFS(Log Flash File System)。这个文件系统被优化了,以获得NOR 闪存的特性中的优点。在第九章文件系统里,我描述了LFFS的细节。
NOR闪存允许无限次地写入同样的数据块,将比特位的1态转化为0态。为了增加速度,闪存经常有一个32到64字节的写缓冲,这些缓冲允许并行地写入一些字节。带缓冲的写操作需要耗时50到600微秒,这个时间取决于闪存中已有数据及要写入的数据的位模式。全0或全1是最快的,类似于0xA 5A 5这样的模式就是慢速的了。
擦除NOR片的操作是慢速的,需要半秒钟一秒的时间。但是擦除过程可以被挂起并在稍后被重新启动——LFFS使用这个特色在后台执行要删除数据的清除,同时处理前台请求的响应。
完整的写和擦除操作将更新闪存内的状态寄存器,也可能产生一个外部中断。如果没有外部中断,CPU将需要使用高速定时器,以向闪存查询完成事件。
通过使用有边读边写(Read–While–Write)能力的NOR闪存,建造一个包含XIP代码和LFFS数据的NOR部件的Symbian OS电话是可能的。
2.4.2 NAND闪存
NAND闪存被看作是基于块的磁盘,而不是随机可寻址的内存。与NOR不同,它没有任何地址线,因此在内存映像中是不可见的。这就意味着代码不能直接从NAND执行,而是必须先拷贝到RAM里。相对于NOR设备而言,这使得在NAND电话中需要额外的RAM。NAND闪存的写速度大约比NOR闪存快10倍。
电话不能直接从NAND启动。这种情况下,进程要求一系列相互依赖的启动装载器,因而更复杂了,最终ROM上一些兆字节的核心Symbian OS映像被装载进RAM,这些映像将在这里执行。
NAND也先天地没有NOR可靠。坏块的产生会使操作中的比特位受到影响。为了减轻这种影响,在每页数据设计了错误校验码(Error Correction Code,ECC),通常是512字节。每次读的时候,ECC被重新计算,它和当前存储的ECC值之间的差异被用来修正运行时的单个位错误。多个位错误不能被发现,这个页就会被认为是坏页。
相对于NOR,即使是考虑到额外必需的RAM,NAND的低价使它对庞大的电话市场很有吸引力。
NAND闪存部件使用专用接口被绑定到SoC上,这种接口通过8位或16位总线直接连接到NAND芯片的引脚。接口块包含计算读写ECC的电路,它为数据传输使用DMA接口。
NAND接口使用数据页往NAND闪存里读写数据。小块NAND设备使用512字节的页,而大块设备使用2048字节的页。数据以块进行擦除,块将包含32或64个页。
=====================================================================================
说明: 本文由Bequan翻译自Symbian Press的Symbian OS Internals: Real-time Kernal Programming一书。任何人需要转载或引用,请先通过Email(a-pangu@163.com或symbianchn@gmail.com)与Bequan联系,在获得许可后方可转载或引用,否则视为侵权行为。转载或引用时,请在文章中注明上述翻译信息。