热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

NANDFLASH读写速度计算方法详解

NandFlash读写速度的计算方法在下面的部分,我们以Micron的NandFlash芯片为例,看一下NandFlash的访问速度(WriteRea

Nand Flash读写速度的计算方法

在下面的部分,我们以MicronNand Flash芯片为例,看一下Nand Flash的访问速度(Write / Read)是如何计算的?我们可以利用Datasheet提供的Read / Program / Erase操作时序图进行逐项累加,并通过一定的公式推导来完成。

 

 

以下图为例,这是一个相当复杂的图示。它包含两部分(target)。每个target有两个LUNs (Logic Unit)。每个都是完全独立的。但LUNs can do interleaved operations. 如下图所示:LUN1 和LUN2 在同一个target中。这样的好处是:最大化带宽和降低干扰。

 

 

上述设备的参数具体情况如下:

 

 

 

下面以Synchronous Interface为例进行Nand Flash访问速度的计算:

 


1. Read operation

<1> Read a single page

 

消耗时间计算如下:

7 * tCAD (Send address and command) &#43; (tWB &#43; tR) (Read data from the NAND Flash Array into the data register) &#43; tdqs * 4320(Transfer a page of data out)

 

 

tCAD &#61; 25ns

tWB &#61; 100ns

tR &#61; 25us

tdqs &#61; 0.5 tCK (minimum)

tCK &#61; 12ns (minimum)

Total Time: 7 * 25ns &#43; 100ns &#43; 25000ns &#43; 0.5 * 12ns * 4320 &#61; 51195ns

Data Transferred: 4320 bytes

Bandwidth: 4320 bytes / 51.195us &#61; 84.4MB/s

主要特性:

1) 页大小为: 4K &#43; 224 Bytes

2) 采用DQS的上升沿和下降沿同时采集数据来进行传输。

 

<2>  2 LUN Four-plane page read

 

The time needed:

[ (7 * tCAD &#43; tWB &#43; tDBSY) * 3 &#43; (7 * tCAD &#43; tWB &#43; tDBSY) * 3 &#43; (7 * tCAD &#43; tWB) &#43; (7 * tCAD &#43; tWB &#43; tR) &#43; [(7 * tCAD &#43; tCCS &#43; tDQSCK &#43; tdqs * 4320)] * 8

Note:

tCAD &#61; 25ns

tWB &#61; 100ns

tDBSY &#61; 0.5us &#61; 500ns

tR &#61; 30us &#61; 30000ns (for multi-plane read)

tdqs &#61; 0.5tCK

tCK &#61; 12ns

tCCS &#61; 200ns

tDQSCK &#61; 20ns

 

tTime &#61; [ (175ns &#43; 100ns &#43; 500ns) * 3 &#43; (175ns &#43; 100ns &#43; 500ns) * 3 &#43; (175ns &#43; 100ns) &#43; (175ns &#43; 100ns &#43; 30000ns) &#43; [(175ns &#43; 200ns &#43; 20ns &#43; 0.5 * 12ns * 4320)] * 8

          &#61; 2325ns &#43; 2325ns &#43; 30550ns &#43; 210520ns

          &#61; 245720ns

Data transferred: 4320 * 4 * 2 &#61; 34560bytes

Bandwidth: 34560 bytes / 245.720us &#61; 140.6MB/s

 

<3> Device that has 2 independent targets

每个target是完全独立的&#xff0c;因此相应的速度在理论上为倍数关系。

此种情况下的访问速度为倍数关系: 2 * 140.6MB/s &#61; 281.2MB/s.

 


2. Program operation

<1> Single program operation

 

写操作的时间消耗为&#xff1a;

6 * tCAD (Send address and command) &#43; tADL &#43; tDQSS &#43; tdqs * 4320(Transfer the data into the Flash) &#43; tCAD (Program confirm command) &#43; tWB &#43; tPROG (Program the Flash Array time) &#61;

 

tCAD &#61; 25ns

tADL &#61; 70ns (Minimum)

tDQSS &#61; 0.75tCK(minimum)

tdqs &#61; 0.2tCK (minimum)

tWB &#61; 100ns

tPROG &#61; 160us

tCK &#61; 12ns

tTime &#61; 150ns &#43; 70ns &#43; 0.75tCK &#43; 0.2tCK * 4320 &#43; 25ns &#43; 100ns &#43; 160us &#61;

      &#61; 150ns &#43; 70ns &#43; 9ns &#43; 10368 ns &#43; 25ns &#43; 100ns &#43; 160000ns &#61; 170728ns

      &#61; 170.722us

Data transferred: 4320bytes

Bandwidth &#61; 4320bytes / 170.722us &#61; 25.3MB/s

 

<2>  2 LUN Four-plane program operation

先送命令和数据到4 planes,然后执行写操作。

整个写的时间消耗为:

[tCAD &#43; 4 * tCAD &#43; tADL &#43; tDQSS &#43; tdqs * 4320 &#43; tCAD &#43; tWB &#43; tDBSY] * 3 &#43;

[tCAD &#43; 4 * tCAD &#43; tADL &#43; tDQSS &#43; tdqs * 4320 &#43; tCAD &#43; tWB] &#43;

[tCAD &#43; 4 * tCAD &#43; tADL &#43; tDQSS &#43; tdqs * 4320 &#43; tCAD &#43; tWB &#43; tDBSY] * 3 &#43;

[tCAD &#43; 4 * tCAD &#43; tADL &#43; tDQSS &#43; tdqs * 4320 &#43; tCAD &#43; tWB &#43; tPROG] &#61;

&#61; [tCAD &#43; 4 * tCAD &#43; tADL &#43; tDQSS &#43; tdqs * 4320 &#43; tCAD &#43; tWB &#43; tDBSY] * 6 &#43;

 [tCAD &#43; 4 * tCAD &#43; tADL &#43; tDQSS &#43; tdqs * 4320 &#43; tCAD &#43; tWB] * 2 &#43;

tPROG

 

 

 

tCAD &#61; 25ns

tADL &#61; 70ns(Minimum)

tDQSS &#61; 0.75tCK

tdq &#61; 0.2tCK

tCK &#61; 12ns

tPROG &#61; 160000ns

tDBSY &#61; 500ns

tWB &#61; 100ns

Total time needed:

[125ns &#43; 70ns &#43; 0.75 * 12ns &#43; 0.2 * 12ns * 4320 &#43; 25ns &#43; 100ns &#43; 500ns] * 6 &#43;

[125ns &#43; 70ns &#43; 0.75 * 12ns &#43; 0.2 * 12ns * 4320 &#43; 25ns &#43; 100ns] * 2 &#43; 160000ns

&#61; 67182ns &#43; 21376 &#43; 160000ns &#61; 248558ns

 

Data transferred: 4320 bytes * 4 * 2 &#61; 34560 bytes

Bandwidth: 34560 bytes / 248.558 us &#61; 139.0MB/s

 

<3> Device that has 2 targets

每个target是完全独立的&#xff0c;因此相应的速度在理论上为倍数关系。

即&#xff1a;139.0 MB/s * 2 &#61; 278.2MB/s

 


3. Erase operation

<1> Erase a single block (See Figure 78 at page 99)

Erase的时间消耗为&#xff1a;

5 * tCAD (Send command and block address) &#43; tWB &#43; tBERS (Block erase time)

 

 

tCAD &#61; 25ns

tWB &#61; 100ns

tBERS &#61; 3ms

tTime &#61; 5 * 25ns &#43; 100ns &#43; 3000000ns &#61; 3000225ns &#61; 3000.225us

Data erased: 128 pages * 4320 bytes/page &#61; 552960bytes

Bandwidth &#61; 552960 bytes / 3000.225us &#61; 184.3MB/s

 

<2> 2 LUN Erase 4-plane block operation

整个Erase操作的时间消耗为:

(5 * tCAD &#43; tWB &#43; tDBSY) * 3 &#43; (5 * tCAD &#43; tWB) &#43;

(5 * tCAD &#43; tWB &#43; tDBSY) * 3 &#43; (5 * tCAD &#43; tWB &#43; tBERS) &#61;

 

 

 

tCAD &#61; 25ns

tWB &#61; 100ns

tDBSY &#61; 0.5us &#61; 500ns

tBERS &#61; 3ms &#61; 3000000ns

 

tTime &#61; 6 * (125ns &#43; 100ns &#43; 500ns) &#43; (125ns &#43; 100ns) * 2 &#43; 3000000ns

      &#61; 4350ns &#43; 450ns &#43;3000000ns

      &#61; 3004800ns &#61; 3004.800us

Data Erased: 2 * 128 pages * 4320 bytes/page * 4 planes &#61; 4423680 bytes

Bandwidth &#61; 4423680 bytes / 3004.8 us &#61; 1472.2MB/s

 

<3> Two target 4-plane erase operation

每个target是完全独立的&#xff0c;因此相应的速度在理论上为倍数关系。

即&#xff1a;2 * 1472.2MB/s &#61; 2944.4 MB/s

 

 

 

写状态&#xff1a;

首先将坏块管理中的地址与当前块地址对照&#xff0c;排除无效块。

     无效块读时钟置0&#xff0c;定义输出地址信号从输出地址端口输出

     无效块读时钟置1&#xff0c;输出地址加1&#xff0c;将当前地址下的数据输出&#xff08;此处的数据就是存储的无效块地址&#xff09;&#xff0c;判断如果坏块管理中心输出的坏块地址大于当前访问的块地址&#xff0c;则证明该地址为有效块&#xff08;坏块肯定是少数&#xff0c;如果不是第一块则就是后面的&#xff0c;地址肯定大于当前有效块地址&#xff09;

命令80H或者81H

之后写五个循环地址&#xff0c;

之后等待一个ADL时间&#xff0c;

然后将一页4K的数据从fifo中输入到flash

   fifo时钟置1&#xff0c;保证fifo写地址大于读地址&#xff08;此处fifo读地址就是我们当前flash的写地址&#xff09;&#xff0c;flash写有效&#xff0c;flash数据口输出当前fifo数据写完一个字节&#xff0c;读fifo时钟置0&#xff0c;也就是说在读fifo时钟为1的时候才能进行fifo数据的往flash中的写操作。Fifo读地址加1&#xff0c;且4k字节计数加1&#xff0c;Flash写锁存关闭&#xff0c;读fifo时钟置1&#xff0c;判断4k字节是否写完&#xff0c;如果没写完则继续写&#xff0c;如果写完4K字节&#xff0c;则

命令11H或者10H

写无效命令无效&#xff0c;如果是0面则等待tDBSY&#xff0c;面加1&#xff0c;如果是1面则直接面加1&#xff0c;加1后没有到第111层&#xff0c;则继续写该层该页的地址读该页的数据。如果到了第111层&#xff0c;则加页再执行07层的页写。如果64页写满了&#xff0c;块地址加1&#xff0c;块地址加之后需要判断是否为无效块&#xff0c;再进行页写。

 


推荐阅读
  • 本指南介绍了如何在ASP.NET Web应用程序中利用C#和JavaScript实现基于指纹识别的登录系统。通过集成指纹识别技术,用户无需输入传统的登录ID即可完成身份验证,从而提升用户体验和安全性。我们将详细探讨如何配置和部署这一功能,确保系统的稳定性和可靠性。 ... [详细]
  • WinMain 函数详解及示例
    本文详细介绍了 WinMain 函数的参数及其用途,并提供了一个具体的示例代码来解析 WinMain 函数的实现。 ... [详细]
  • C#实现文件的压缩与解压
    2019独角兽企业重金招聘Python工程师标准一、准备工作1、下载ICSharpCode.SharpZipLib.dll文件2、项目中引用这个dll二、文件压缩与解压共用类 ... [详细]
  • 我有一个从C项目编译的.o文件,该文件引用了名为init_static_pool ... [详细]
  • 本文介绍了如何处理在Xcode构建过程中出现的多个命令生成相同文件的问题,特别是当这些文件与Info.plist无关时。 ... [详细]
  • Hadoop的文件操作位于包org.apache.hadoop.fs里面,能够进行新建、删除、修改等操作。比较重要的几个类:(1)Configurati ... [详细]
  • 本文详细介绍了Java反射机制的基本概念、获取Class对象的方法、反射的主要功能及其在实际开发中的应用。通过具体示例,帮助读者更好地理解和使用Java反射。 ... [详细]
  • 零拷贝技术是提高I/O性能的重要手段,常用于Java NIO、Netty、Kafka等框架中。本文将详细解析零拷贝技术的原理及其应用。 ... [详细]
  • [转]doc,ppt,xls文件格式转PDF格式http:blog.csdn.netlee353086articledetails7920355确实好用。需要注意的是#import ... [详细]
  • 字节流(InputStream和OutputStream),字节流读写文件,字节流的缓冲区,字节缓冲流
    字节流抽象类InputStream和OutputStream是字节流的顶级父类所有的字节输入流都继承自InputStream,所有的输出流都继承子OutputStreamInput ... [详细]
  • 在Delphi7下要制作系统托盘,只能制作一个比较简单的系统托盘,因为ShellAPI文件定义的TNotifyIconData结构体是比较早的版本。定义如下:1234 ... [详细]
  • 2022年7月20日:关键数据与市场动态分析
    2022年7月20日,本文对当日的关键数据和市场动态进行了深入分析。主要内容包括:1. 关键数据的解读与趋势分析;2. 市场动态的变化及其对投资策略的影响;3. 相关经济指标的评估。通过这些分析,帮助读者更好地理解当前市场环境,为决策提供参考。 ... [详细]
  • 本文详细解析了客户端与服务器之间的交互过程,重点介绍了Socket通信机制。IP地址由32位的4个8位二进制数组成,分为网络地址和主机地址两部分。通过使用 `ipconfig /all` 命令,用户可以查看详细的IP配置信息。此外,文章还介绍了如何使用 `ping` 命令测试网络连通性,例如 `ping 127.0.0.1` 可以检测本机网络是否正常。这些技术细节对于理解网络通信的基本原理具有重要意义。 ... [详细]
  • 如何将TS文件转换为M3U8直播流:HLS与M3U8格式详解
    在视频传输领域,MP4虽然常见,但在直播场景中直接使用MP4格式存在诸多问题。例如,MP4文件的头部信息(如ftyp、moov)较大,导致初始加载时间较长,影响用户体验。相比之下,HLS(HTTP Live Streaming)协议及其M3U8格式更具优势。HLS通过将视频切分成多个小片段,并生成一个M3U8播放列表文件,实现低延迟和高稳定性。本文详细介绍了如何将TS文件转换为M3U8直播流,包括技术原理和具体操作步骤,帮助读者更好地理解和应用这一技术。 ... [详细]
  • Java Socket 关键参数详解与优化建议
    Java Socket 的 API 虽然被广泛使用,但其关键参数的用途却鲜为人知。本文详细解析了 Java Socket 中的重要参数,如 backlog 参数,它用于控制服务器等待连接请求的队列长度。此外,还探讨了其他参数如 SO_TIMEOUT、SO_REUSEADDR 等的配置方法及其对性能的影响,并提供了优化建议,帮助开发者提升网络通信的稳定性和效率。 ... [详细]
author-avatar
fhuwiop
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有