下面通过地址重映射的方法,即在Flash固件里面加入一个地址重映射的区域来解决这一问题。
4 基于地址重映射的读取方法
在实现地址重映射的时候,可以从块逻辑地址O开始,查看相对应的物理块。如果损坏,将地址从最后一个开始向前指,而相应的逻辑块被标示为坏块。例如图3,物理块0损坏,逻辑块地址0指向物理块4095的地址,而逻辑块地址4095被标示为坏块。可以看出,即使块0掼坏,仍然可以通过逻辑地址O进行操作,其内部的变化,并不会影响外部的使用。唯一不同的是,Flash的整体空间变小了。不过即使这样,也不会像以前那样,第一块坏了,就去换一个Flash。
5 性能分析
很明显,在数据读取的时候增加了一步地址重映射的计算。这样使整体性能会略微下降。下面分析一下加入地址重映射之后的性能影响(这里仅仅分析数据的读取性能,因为对Flash操作最多的是数据的读取,用户使用时也是读取最多)。
地址重映射是根据输入的地址计算操作地址的。从图4可以看出,地址重映射的计算是加在地址A25输入之后的,因其在内部操作,延时相对很小。而这个地址重映射在整个块操作之中只操作一次,且其使用时间很短,故在这里可以忽略不计,其对数据的读取操作基本没有影响。
加入地址重映射之后,坏块全部集中到了整个Flash设备的最后。也就是说,即使这个Flash中有1024个块坏了,仍然可以当其为一个32 MB的Flash来使用,即其有效块为第0~1 023块;不像前面所描述的那样,就算只有第一个块坏了,这个Flash也就报废了。经过加入地址重映射之后的Flash,即使就剩下一块没有损坏的块了,这个Flash仍然可以作为引导系统使用。
6 结 论
通过在Flash内部加入地址重映射机制,对于使用Flash将会有很大的方便,并且,即使第一个块坏了,仍可以继续使用这个Flash,而无需厂家保证第一个块是好的。这样大大延长了Flash的使用寿命,仅仅在坏块达到一定数量的时候才需要换一个。