falshfxp可以解开nan吗

wuzhongjie 的BLOG
用户名:wuzhongjie
文章数:141
评论数:160
访问量:312921
注册日期:
阅读量:5863
阅读量:12276
阅读量:422530
阅读量:1110912
51CTO推荐博文
NAND Flash芯片是构成SSD的基本存储单元,NAND Flash芯片工艺的发展、结构的变化将会推动整个闪存存储产业的高速发展。在设计闪存存储系统的时候,特别是在设计NAND Flash控制器、SSD盘或者卡的时候,都需要深入的了解NAND Flash的操作方法、接口命令及其时序。一个NAND Flash芯片虽然非常小,采用LGA或者TSOP的封装形式,但是,其内部结构还是非常复杂的。特别是随着存储密度的不断提高,NAND Flash内部抽象的概念也越来越多,例如Flash颗粒、Device、Die、Plane、Block和Page。颗粒就是我们通常所看到的一个基本芯片封装颗粒;每个颗粒可以封装多个Device,每个Device可以看成是一个独立的Chip,拥有独立的控制、数据信号线;每个Device可以由多个Die构成,多个Die之间内部有独立的操作寄存器、状态指示信号,对外的信号线是共享的;一个Die又可以分成多个Plane,每个Plane拥有独立的数据寄存器组,可以在一定情况下对多个Plane进行并发操作;一个Plane可以分成若干个Block;每个Block又是一个独立的数据块擦除单元;一个Block最后又被分成很多个Page页,每个Page页是读写操作的基本单元。&以镁光的Flash芯片为例,MT29F32G芯片由一个Die构成,其中包括两个Plane;MT29F64G芯片由两个Die构成,并且这两个Die分别归属为两个Device,每个Die包括两个Plane。MT29F32G和MT29F64G芯片的Die基本单元结构可以描述如下:&&对于MT29F32G和MT29F64G芯片的地址信息可以定义如下表:&&对于镁光的MT29F128G芯片而言,由于存储密度提升了,所以整个芯片由两个Device构成,每个Device包括两个Die,每个Die容纳了两个Plane。MT29F128G芯片内部的基本存储单元Device的结构描述如下:&&MT29F128G的地址信息定义如下表:&&在了解到NAND Flash的内部结构之后,我们需要思考从软件层面如何利用好NAND Flash的内部结构,从而提升整体的IO性能。&Plane单元拥有独立的数据寄存器,是否可以并发Plane操作从而提升IO性能呢?以MT29F128G芯片为例,每个Die可以被分成2个物理Plane。每个Plane包含一个4314字节的数据寄存器,一个4314字节的数据Cache寄存器,以及一个由4K页构成的Block Array。由于两个Plane的数据寄存器是物理上独立的,因此,这两个Plane可以同时执行Program、Read和Erase操作,通过这种方式可以提升NAND Flash的系统IO性能。两个Plane同时读数据的时序图如下所示:&&从上面的时序图可以看出,两个Plane之间的并发操作不是那么随意的。当需要从两个Plane同时读取数据的时候,首先加载第一个Plane的地址信息,然后加载第二个Plane的地址信息,当两个地址信息都加载完毕之后,发出结束命令30H。随后整个Die进入忙状态,R/B#信号置低。在Die处于忙状态时,无法对其进行任何操作,在这个阶段,数据从NAND Flash介质中加载到两个Plane的寄存器中。当R/B#信号恢复之后,可以读取两个Plane中的数据。值得注意的是,第二个Plane中的数据读取需要06H-E0H命令的支持。从这点上来看,由于两个Plane只是独立了数据寄存器,共享了操作寄存器,所以,不能很好的做到非常随意的数据并发。&两个Plane的并发写操作时序如下图所示:&&和并发读操作类似,两个Plane之间的并发写也不是随意的,需要同时做相同的操作。两个Plane的并发操作需要同时发起命令。对于写操作,首先需要加载两个Plane的访问地址。第一个地址期的结束符11H不会触发真正的编程操作;第二个地址期的结束符10H才会真正触发编程操作。一旦编程操作启动之后,状态信号R/B#就会置低,直到编程操作完成,状态信号才能恢复。&两个Plane的并发擦除操作时序如下图所示:&&和读写操作的原理一样,两个Plane的并发擦除需要同时加载两个Plane的地址信息,然后后台并发同时执行擦除操作。和串行操作相比,这种并发操作可以提升NAND Flash的整体性能。&所以,从上述的描述来看,虽然两个Plane之间的数据寄存器是完全独立的,但是,操作寄存器是共享的,可以让读写和擦除操作在这两个Plane上并发执行。但是,这种并发操作的条件是两个Plane必须同时进行相同的操作。而不是两个Plane可以随意、独立、并发执行不同的操作。这就是两个Plane并发操作的局限,但是即使是这样,如果软件层能够设计好的算法,能够充分的让多个Plane并发执行,那么IO性能还是可以大幅度的提升。&在NAND Flash芯片中,一个真正的独立并发单元是Die。以MT29F128G为例,一个Device内部有两个Die,在芯片内部,这两个Die拥有独立的操作寄存器、状态信号线,对外的控制、状态信号线是共享的。在这种情况下,芯片提供了一种Interleave的操作方式,可以完全并发这两个Die的读写、擦除操作。下图是两个Die的并发读时序图:&&从上图可以看出,两个Die内部拥有独立R/B#信号线,对外的状态信号线是内部状态信号的“逻辑与”结果。两个Die的操作可以独立、并发,只不过由于共享对外接口,因此在数据输出时还需要串行化。&Interleave的并发写时序如下图所示:&&和并发读操作类似,两个Die可以完全独立的并发执行写操作。&在Device级别这种并发操作显得更加随意。不同的Device拥有完全独立的对外接口,因此,两个Device可以同时执行独立的操作。&综上而言,在NAND Flash芯片内部有3种并发执行单元,分别是Device、Die和Plane。其中Plane是数据寄存器独立,因此,多个Plane之间可以并发的执行相同的操作;Die拥有独立的操作寄存器、独立的内部状态信号线,共享外部接口,因此,多个Die之间可以独立并发操作;Device之间拥有独立的控制、数据信号线,因此,多个Device之间可以随意并发。利用好NAND Flash芯片内部的这些并发单元,可以很好的提升闪存存储的IO性能。&
了这篇文章
类别:┆阅读(0)┆评论(0)扫二维码下载作业帮
1.75亿学生的选择
下载作业帮安装包
扫二维码下载作业帮
1.75亿学生的选择
flash制作计算器,12+12为什么等于1212而不是24我用的是输入文本,两个输入文本框分别输入12,按钮出现的结果却是1212.套用其他公式也出现了错误,结果为NaN.
云雀你二了1108
扫二维码下载作业帮
1.75亿学生的选择
  因为从输入文本框得到的数据类型是String,也就是字符串  所以当你输入两个12的时候,它所进行的运算不是12+12,而是"12"+"12"  不知道你套用其他公式指的是什么,总之不把数据类型转换过来,是无法进行数学运算的  将String转化为Number可以用Number()  将Number转化为String可以用String(),也可以用""+12这样的方法  假设两个输入文本框的名字为t1和t2,另有一个输出文本框名为t3  按下按钮btn的时候在输出文本框t3显示两者相加的结果  btn.addEventListener(MouseEvent.CLICK,addition)  function addition(e:MouseEvent):void  {  var num1:N  var num2:N  var num3:N  num1 = Number(t1.text); //在这里获取t1的数据并转化为数字  num2 = Number(t2.text);  num3 = num1 + num2; //进行相加  t3.text = String(num3); //在t3中显示,这句也可以写成t3.text=""+num3;  }  最后一个步骤,如果你不转化为String,有时flash也会帮你转化了再显示在文本框,有时则会报错.但理论上来说文本框是不能显示数字的,应该先转化为String,这一步最好还是不要省略  为了容易看懂把这个分了很多句来写···其实合并起来也可以用一句话搞掂  t3.text = "" + Number(t1.text) + Number(t2.text);  总之就是数据类型的转换,看懂了这些应该就能解决你提出的问题了,再根据你要制作的计算器功能修改吧
为您推荐:
其他类似问题
扫描下载二维码在C:\ti\C6748_StarterWare_1_20_04_01\examples\evmC6748\nand下的例程,是关于NANDFLASH的读写实验,此实验是基于EDMA3的NANDFLASH的读写操作。函数里面,关于EDMA3初始化以及param的参数设置做如下操作:
1: hNandDmaInfo-&DMAXferSetup& && && && &&&= EMIFANANDXferS //EDMA的读写配置
2;EMIFANANDXferSetup(NandInfo_t *nandInfo, unsigned char *data, unsigned int len, NandDmaDir_t dir)函数里的
3:retVal = EMIFANANDRxDmaConfig(nandInfo-&dataRegAddr, data, len);函数对相关param参数进行了设置
可是没有明确nandflash的地址,如下:
4:EMIFANANDRxDmaConfig(unsigned int csBaseAddr, unsigned char *data, unsigned int len)
5:{paramSet.srcAddr& & = csBaseA}
是不是将相应的函数做如1操作,在代码被封装的底层就已经进行了相应的函数操作,如地址的定义,以及其他相关NANDFLASH的EDMA3的param参数?
由于EDMA3被设置成手动触发,所以函数集:
6:retVal = NANDPageWrite(&nandInfo, blkNum, pageNum, &txData[0],&eccData[0]);
即对NANDFLASH的写操作,是不是此函数直接出发了EDMA3?效果和函数:
7:EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, 0, EDMA3_TRIG_MODE_MANUAL);一样呢?
EEWORLD 官方微信
Powered by
逛了这许久,何不进去瞧瞧?Server is too busy

我要回帖

更多关于 falshftp 的文章

 

随机推荐