IT技术之家

首页 > 嵌入式

嵌入式

闪存系统性能优化方向?NAND Cache Program(闪存缓冲编程) 原理与实战?_元存储

发布时间:2023-12-10 01:35:33 嵌入式 165次 标签:NAND 闪存 性能优化 Cache Program 嵌入式硬件
人们想了许多方法来提升基于NAND Flash的系统性能, 本节我们带大家探索一下其中从Cache Program 是如何提升性能, 提升大不大?...

Hello 大家好, 我是元存储~

主页:元存储的博客_CSDN博客-深入理解SSD:固态存储特性与实践,深入浅出SSD:固态存储原理与特性,深入理解Flash:闪存特性与实践领域博主

前言

NAND Flash凭借其高性能、以及低成本等特性大受欢迎,是最为广泛的非易失存储介质。为了满足业务性能要求,人们想了许多方法来提升基于NAND Flash的系统性能, 本节我们带大家探索一下其中从Cache Program 是如何提升性能, 提升大不大?

1. 提升效果

话不多说, 先看提升效果。Cache Program 相对于简单的 Page program ,吞吐率从 4.4MB/s 提升到 4.8MB/s, 提升了 9%.

觉得还不错的就继续往下探索吧?

NAND Data register & Cache register

讲NAND Cache 操作之前, 就不得不先提 依赖的NAND 基础:Data Register 和 Cache Register

图. NAND 内部架构

Data register和Cache register串联并且和存储阵列(memory cell array)相连,目的就是加快IO buffers与存储阵列之间的读写操作

Data register:数据寄存器,也叫page register(页寄存器),每次能够存放一页的数据,和闪存介质交互的一个寄存器,这个寄存器有自己的地址,在不同手册中对应地址可能不同。

Cache register:缓冲寄存器,也是存放一页数据,是和Data register进行交互的一个寄存器,其也应该具有自己的地址。

外界数据从I/O和nand flash的交互实际上是通过寄存器之间进行的。

图 NAND Cache Register and Data Register 数据传输方向与延时

图片来源[4]

提供多一级的Cache register可以实现Cache读写模式,即在将Data register中的数据烧写到存储阵列时,可以将数据写入Cache register,这可以大幅提升NandFlash的写入速度。[2]

Cache操作

在写某个page时,数据从主控传输到对应plane的cache再把整个cache写到介质(flash)中,读刚好相反。而page register起到缓冲的作用,在读多个page时,当cache传输一个page数据时,page register提前把下一个page的数据准备好。

*内存的写入时间指的是page register到内存介质的时间,读刚好相反。

PROGRAM PAGE CACHE 时序

CMD Program的 NAND 命令是CMD 0x80- CMD 0x15。命令和标准的program 命令非常相近, 只是把 CMD 0x10 换成了 CMD 0x15.

CACHE编程实际上是标准的页编程命令的带缓冲编程模式,编程开始是发布SERIAL DATA INPUT(0x80)命令,随后是5个地址周期,以及页的全部或部分数据,数据copy到CACHE寄存器,然后发布CACHE WRITE(0x15)命令。数据在WE#的上升沿锁存到数据寄存器,在这个锁存期间,R/B#为低,锁存结束之后,R/B#变高,编程开始。

当R/B#变高之后,新的数据可以通过发布另一个CACHE PROGRAM命令来写入,R/B#保持低的时候由实际的编程时间来控制,第一次等于数据从CACHE寄存器写入到数据寄存器需要的时间,之后,只有数据寄存器的内容被编程进阵列之后,CACHE寄存器才能锁存到数据寄存器,所有,以后的R/B#为低的实际应该更长一些。

状态寄存器中反映CACHE R/B#的Bit6可以通过READ STATUS命令读出,以便确定什么时候,CACHE寄存器准备好接受新的数据了。

状态寄存器中反映R/B#的Bit5可以被查询,以确定什么时候当前编程周期的实际阵列编程完成。

如果仅使用R/B#来确定编程是否完成,那么编程序列的最后一页必须使用PROGRAM PAGE(0x10)来替代CACHE PROGRAM(0x15)。如果CACHE PROGRAM命令每次都使用,状态寄存器的Bit5必须用来确定编程是否结束。

当状态寄存器的bit6为1时,状态寄存器Bit0返回前一页的编程是否成功,当前PROGRAM操作的成功与否的状态是:Bit5为“1”(准备好状态)时的Bit0状态 [1]

图. Page Program 和 Cache Program 时序演示对比。

如果host 想终止 CMD Program, 只需要把最后一次的 NAND CMD 0x15 改为 0x10.

不同Page Size Cache Program性能对比

图 Cache Program vs. Page Program (tR=25 us, tWC = 25 ns, x8 I/O)

Cache Program 用于提升prorgam 的带宽速度,相对于标准的program, 在2KB page 提升25%, 而在 4KB page 提升 50%. 说明page 越大,提升效果越好。4KB 的效果好是因为写入的数据量翻倍了,而program 时,写入时间超过数据传输时间。 tWC 越大, Cache Program 带来的收益越大。

参考

[1] NAND flash cache编程_dengaoxin0873的博客-CSDN博客

[2] S5PV210体系结构与接口11:NandFlash & SD卡编程

S5PV210体系结构与接口11:NandFlash & SD卡编程_麦兜的学习笔记的博客-CSDN博客

[3] 三星nand flash之TLC Program和nand flash结构的理解

三星nand flash之TLC Program和nand flash结构的理解_nand flash program_654654654654654的博客-CSDN博客

[4] Improving NAND Throughput with Two-Plane and Cache Operations

https://www.mxic.com.tw/Lists/ApplicationNote/Attachments/2117/AN0268V2-Improving%20NAND%20Throughput%20with%20Two-Plane%20and%20Cache%20Operations.pdf