> Translation Module用于:
logic addr->phy addr;
w/r/d sector
> Mapping table:
node: 1st level, power on时候build;
sector map: 2nd level, 需要的时候build;
> Virtual addr = virtual block(maybe multi phy block) + sector(page offset)
Physical addr= physical block + page;
> Virtual To Physical Mapping Table
> Special Node用于处理expection:两个phy blk都full的情况
> 1 logic blk可以对应2个phy blk。当需要使用special node时候,最多可以对应4个。
> 函数initialize和mount的关系:
功能重复,但init必须有完整分区表;mou只能针对一个partition。mount很多时候用不到,除非init后专门umount某个分区,再想mount它。
> 使用NFTL的流程:
1) Erase all block by LLD func;(只针对第一次用NFTL的情况)
2) NFTL_init
用ini来create abt, write to flash last 2 blocks;
3) 开始各种操作;
4) 最后de-init;
> Mount做的事情
阅读每个block的1st page(其实每个block中随便哪个都行)的spare area,组织起来构成
> Format函数做的事情:
把除了last 2 ABT之外的其它block都erase了;
> 第一次Init的时候设置了partition table,以后init的时候都必须match,否则可能会启动起来不提示,使用的时候却出错。如果要更改分区,必须LLD来erase;
> fillFactor用于重写,10~50之间,以后可以考虑测试哪个值最合适;
> logic和phy的blk的对应关系:
a) 不管logic上的page顺序,phy上block的page是按顺序写的;
b) 如果logic上反复写一段data,那么2个phy blk用完之后就另外添加special node,可以多使用2个phy blk;
c) 如果用到special node,那么直到 不操作该node or 多的2个phy blk也撑不住了 才进行GC;
> Spare area的bit含义:
a) root level:该phy block对应的是logic blk的第几个block,00->01->10->11->00循环;
b) ancestor level: 用于记录special node。这样如果PL发生在使用到specialnode的时候可以恢复;
c) root counter: 用于minimize的时候发生PL的恢复。