NAND Flash管理算法的设计及实现
2 Flash管理算法
2.1 逻辑物理地址映射
由于flash具有上述特点,因此,如果不采用逻辑物理地址映射,将会存在两个问题:其一是Flash中难免会有坏块,因而某些地址空间将是不可用的;其二,Flash读写的基本单位是页,擦除的基本单位是块,故在同一个页的两次写之间,就必须要进行一次擦除操作,而擦除会擦除掉整个块,这样,为了避免其他页的数据丢失,就得先把这些页中的数据暂存到其他地方备份起来,之后再和新数据一起重新写回到该块中,因此,整个过程会比较复杂,而且会造成速度降低。这样,一般都需要对flash加入逻辑物理地址映射管理算法,该算法的逻辑地址和物理地址的对应关系是变动的。
2.2 两级地址映射
为了减少更新数据时原有数据的搬移,提高写操作的速度,本文提出了采用两级地址映射的机制,也就是在块级别逻辑物理地址映射的基础上引入页级别上的逻辑物理地址映射。一个逻辑块对应一个或两个物理块(称为母块和子块),逻辑块中的逻辑页对应一或两个物理块中的某个面。图2所示是其地址解析示意图。本文引用地址:https://www.eepw.com.cn/article/162698.htm
在读写时,首先应将逻辑地址分为逻辑块地址和逻辑页地址,再根据块映射表将逻辑块地址映射到物理块地址,然后读取母块和子块中的sDare区,并据此建立页映射表,再根据逻辑页地址映射到物理页地址,从而完成从逻辑地址到物理地址的转换。其数据更新示意图如图3所示。
当需要更新数据时,写入的策略可分为两种情况。首先,当子块仍然有空闲页时,可直接将数据写到子块中的下一个空闲页中,并在spare区中记录该块对应的子块、该物理块对应的逻辑块以及该物理页对应的逻辑页,这样,当重新上电时,就可以建立逻辑物理映射关系。其次,当母块和子块都写满时,需要从空块池中取出一个新的子块。如果允许一个逻辑块对应三个或更多的物理块,一方面管理起来比较复杂,另外也会造成空物理块紧缺,因此,可以考虑将母块或者子块释放掉,这样,母块或者子块中原有的有效数据就需要搬移到新子块中并将该母块或子块擦除再释放到空块池。出于速度的考虑,选择母块和子块有效页数较少的块进行数据转移并释放。
实践证明,这样操作对写文件速度有明显提高,特别是写小文件时,其速度提升可达9.2倍。
2.3 SPARE区和ECC校验
Flash中每个页里的每个字节都是没有任何差别的,物理上并没有data区和spare区的区别,具体怎样划分data区和spare区,可由用户自己决定。本设计采用的划分办法如图4所示,这样,每个扇区和一个spare区相连,故可方便连续读出,并进行校验纠错。
评论