小Z聊固态:NAND闪存颗粒的打开方式
关注固态硬盘产品的各位朋友应该发现了,近来几乎各大品牌的固态硬盘产品都涨价了!虽然涨幅不算太大,但是在价格十分敏感的电子消费产业,还是十分耐人寻味的,特别是一些经典热销产品的涨价就更是让人看不懂了。
下图是笔者统计过的,从6月15日起到6月30日止,京东商城上热销的部分品牌的销量最高产品的价格变化图。通过图表可以看到,除了金士顿和浦科特旗下的两款固态硬盘在统计中没有大的变化外,其余各大品牌,诸如三星、东芝、闪迪、ocz等都有着不同幅度的涨价。
在前面几期的“小Z聊固态”中,我们知道固态硬盘最大的制造成本其实在于闪存颗粒,闪存颗粒的价格变化直接影响到固态硬盘产品的价格变化。看到这里,我想部分朋友已经可以猜到为什么此次固态硬盘产品集体涨价了。
没错,原因就和上次机械硬盘因为泰国洪水淹没大部分机械硬件加工商导致全行业涨价一样,此次三星位于西安的全球最大的NAND闪存制造厂的停电事故,影响了NAND的正常生产,再加上处于闪存颗粒生产的旺季,市场上的NAND闪存供不应求,因而出现了大范围的固态硬盘价格上扬。
那么又有人问了,“一个三星NAND闪存厂竟能影响到全行业?难道没有其他闪存厂能够替代它吗?”
今天,小Z就借着这个话题和大家一起聊聊闪存颗粒和闪存厂的那些事。
在固态硬盘领域,掌握了闪存颗粒几乎可以说就掌控了固态市场。目前,全球范围内从事NAND flash的厂商大大小小不计其数,但具有统治地位的就只有区区六家,他们分别是三星(Samsung)、东芝(Toshiba)、英特尔(intel)、海力士(SK hynix)、美光(Micron)、闪迪(SanDisk),这六家从事NAND FLASH制造的厂商几乎垄断了全球大部分的市场份额,接下来我们就一一介绍。
半导体霸主:英特尔(intel)
英特尔公司(IntelCorporation)总部位于美国加州,工程技术部和销售部以及6个芯片制造工厂位于美国俄勒冈州波特兰。
英特尔的创始人罗伯特·诺伊斯RobertNoyce和戈登·摩尔GordonMoore原本希望他们新公司的名称为两人名字的组合——MooreNoyce,但当他们去工商局登记时,却发现这个名字已经被一家连锁酒店抢先注册。不得已,他们采取了“IntegratedElectronics(集成电子)”两个单词的缩写为公司名称。现任CEO是BrianKrzanich。
英特尔公司在随着个人电脑普及,英特尔公司成为世界上最大设计和生产半导体的科技巨擘。除了为全球日益发展的计算机工业提供建筑模块,包括微处理器、芯片组、板卡、系统及软件等,公司在半导体顶层技术的研发中始终处于世界领先地位,拥有多项半导体生产专利技术,长期位列全球半导体厂商排行榜的首位。
intel早期闪存颗粒的编号信息
在固态硬盘领域,早期的英特尔自产自研的闪存颗粒,多用于自家高端产品,或是合作紧密的友商产品中,几乎很少输出。
到了中期,英特尔和美国著名的半导体厂商美光进行了深度合作,共建晶圆制造厂,并将晶圆厂中品质和纯度较高的闪存颗粒用于自家的产品,如intel 710系列就是采用的eMLC企业级颗粒,而将品质低的颗粒用于低端产品和输出到第三方,例如intel 320系列以及部分威刚、OCZ产品,在此就不一一论述了。
intel 540s采用海力士16nm闪存颗粒
到了后期,也就是现在intel几乎已经很少在中低端产品中使用自家颗粒了,会根据产品定位不同,灵活选择。例如,最新发布的针对消费级市场的INTEL 540S系列就是采用的海力士16nm闪存颗粒,而面向高性能和安全应用的SSD Pro 5400s则是采用美光和intel合资的16nm闪存。
晶圆之光:美光(Micron)
美光科技(MicronTechnology,以下简称美光科技)位于美国爱德荷州首府波伊西市,于1978年由WardParkinson、JoeParkinson、DennisWilson和DougPitman创立,1981年成立自有晶圆制造厂。
美光科技是全球最大的半导体储存及影像产品制造商之一,其主要产品包括DRAM、NAND闪存和CMOS影像传感器。美光科技先进的产品广泛应用于移动、计算机、服务、汽车、网络、安防、工业、消费类以及医疗等领域,为客户在这些多样化的终端应用提供针对性的解决方案。
在1990年代初期,美光科技成立MicronComputers(美光电脑)子公司来制造个人电脑,该公司即后来的MicronElectronics(美光电子)。
1998年亦并购了Rendition公司来制造3D加速芯片。
2002年美光卷入了内存价格操纵丑闻。
2007年3月21日首次在中国西安成立了工厂,主要生产DRAM和NAND快闪存储器。
美光flash颗粒的命名规则
在固态硬盘领域,美光和intel进行了深度合作,并于2006年在美国犹他州Lehi地区合资共建,25nm工艺闪存制造厂IMFT,而根据相关文件披露,IMFT生产的晶元,49%销售给Intel,另外51%则归美光。
除了生产闪存颗粒,美光还拥有固态硬盘生产线以及市场终端品牌英睿达。不同于intel闪存颗粒,多用于自家产品,美光的闪存颗粒因其性能稳定,深受OEM厂商热捧,并大量输出到各大OEM厂商以及各大品牌固态硬盘厂商。
自产自销:三星(Samsung)
如果说英特尔是半导体行业的绝对领路人和开创者的话,那么三星毫无疑问是最强的追逐者和竞争者。
三星电子(SamsungElectronics)作为韩国电子产品生产企业,是韩国规模最大的企业,同时也是三星集团子公司中规模最大且在国际市场处于领先地位的企业。
该公司在全世界共65个国家拥有生产和销售法人网络,员工数多达157,000人,早在2009年超越惠普(HP)跃升为世界最大的IT企业,其中LCDTV、LEDTV和半导体等产品的销售额均在世界上高居榜首。
在庞大的三星集团内部,半导体事业部可谓是打造三星帝国的一等功臣。
三星集团创始人李秉哲不顾公司众人反对,毅然决然地于1983年在日本东京正式开始进军半导体行业。对此他曾经表示,三星符合韩国缺乏资源的自然条件,只有开发高附加值、技术含量高的产品才能实现企业的第二次飞跃。
在此后的10个月内,三星电子在世界上第三个推出64KDRAM,这在国内外经济界引起强烈反响。然而,日后由于半导体价格暴跌,企业在事业之初陷入困境。尽管如此,三星的存储器半导体依然取得了长足的发展,1992年率先开发成功64MDRAM,终于在世界上确保了最强的技术实力;1993年如愿以偿地荣登存储器半导体世界第一的宝座。此后于1994年和1996年连续开发成功256M和1GDRAM,这同样拥有‘世界最先开发’的荣耀,这样,半导体逐渐成为韩国具有代表性的产业。2002年NANDFlash位居世界榜首;2006年与2007年分别在世界上率先研制成功50纳米级DRAM和30纳米级NAND等,三星电子在存储器领域的占有率超过30%,成为业界的强者。
三星750evo采用自家闪存颗粒
拥有大量的世界顶尖的半导体专利技术的三星,近些年也没有停止研发的脚步。就固态硬盘行业而言,三星是业界首个将TLC闪存颗粒运用于固态硬盘产品的厂商,同时研发出全球领先的3D-NAND闪存颗粒技术,极大的提升了闪存颗粒的实际使用容量,进一步压缩了闪存颗粒的体积,引发了闪存颗粒的又一次革命。
三星flash颗粒编号信息表
作为半导体厂商,三星也和intel一样,有着完整的闪存颗粒生产线,却都仅将颗粒运用于自家产品,三星家更是做得彻底,所有原产颗粒都不允许输出,仅装备于自家固态品牌。因而,很多关于三星闪存的具体参数信息很少见诸于网络。
闪存缔造者:东芝(Toshiba)
作为我们的邻居,韩国在闪存制造上有三星,而日本则有东芝。
东芝(TOSHIBA)是日本最大的半导体制造商,亦是第二大综合电机制造商,隶属于三井集团旗下。东芝原名东京芝浦电气株式会社,1939年由株式会社芝浦制作所和东京电气株式会社合并而成;从1875年开创至今,已经走过了133年的漫长历程。
早在80年代东芝与NEC是世界上最大的两家半导体制造商,同时东芝还是闪存存储标准SD协会的董事会成员之一,是多项规格标准的制定者和推动者,拥有着半导体闪存行业多项世界第一和生产专利,到了90年代,东芝已经成长为世界排名前5的芯片厂,在2008年东芝排名第3,仅次于英特尔和三星,但排在德州仪器和意法之前,到了今天东芝依旧在世界半导体行业、芯片制造行业有着举足轻重的作用。
具体到固态硬盘领域,东芝原厂闪存颗粒几乎占领了主流的固态硬盘市场,成为有一定实力的固态硬盘厂商首选颗粒。究其缘由,一则是东芝近百年的生产制造经验带来的严格的品控,二则是东芝乐于向外输出优质原厂闪存颗粒。
目前,几乎所有大品牌的固态硬盘厂商都使用过东芝相关型号的闪存颗粒。例如浦科特全系列M6V/M7V/M6S PLUS等产品,还有金士顿的v300/uv400,OCZ几乎全系列等。
东芝flash颗粒编号示意图
东芝flash颗粒编号示意图
东芝flash颗粒编号示意图
除了制造原厂闪存颗粒外,还有更多的二线厂商使用东芝原厂的白片颗粒,以及部分厂商使用的东芝黑片,可以说几乎所有主流固态硬盘厂商都使用过东芝制造的闪存颗粒。
同时和三星、intel一样,东芝自家也有固态硬盘终端产品,从开山之作东芝Q系列,东芝Q200,东芝Q300一直到东芝Q300 PRO,每一款源自东芝的新品都带给消费者许多惊喜。
性价比之王:海力士(SK Hynix)
闪存颗粒作为固态硬盘制造中最花费成本的核心器件,提供极高性价比的产品也是能有极大的市场。
海力士脱胎于韩国另一家半导体制造企业现代内存,并于2001年更名为海力士,2012年正式更名为SK hynix。
海力士半导体在1983年以现代电子产业有限公司成立,在1996年正式在韩国上市,1999年收购LG半导体,2001年将公司名称改为(株)海力士半导体,从现代集团分离出来。2004年10月将系统IC业务出售给花旗集团,成为专业的存储器制造商。2012年2月,韩国第三大财阀SK集团宣布收购海力士21.05%的股份从而入主这家内存大厂。
海力士半导体多年前已经在韩国制造了4条8英寸晶圆生产线和一条12英寸晶圆生产线,并在美国俄勒冈州有一条8英寸生产线。2004年及2005年全球DRAM市场占有率处于第二位,中国市场占有率处于第一位。并在世界各地有销售法人和办事处,共有员工15000人。
海力士部分flash颗粒产品编号示意图
如今的海力士半导体,一直以行业最高水平的投资效率、生产效率、销售效率,在竞争激烈的半导体行业站稳脚跟,并以快速的更新能力和极高的性价比,成为众多固态硬盘厂商欢迎的原厂颗粒提供商。
目前,intel旗下多款产品采用了海力士颗粒,例如从intel pro 2500到最新的intel 540s。同时国内许多新兴厂商都在使用有着高性价比的SK Hynix闪存颗粒,例如金泰克等。
闪存帝国:闪迪(SanDisk)
在闪存卡领域,闪迪绝对是行业的巨擘,而在固态硬盘领域,闪迪也凭借着其拥有着完整的闪存颗粒加工体系,成为固态硬盘行业的巨头之一。
SanDisk (闪迪)公司是全球最大的闪速数据存储卡产品供应商。诞生于1988年加利福尼亚帕罗奥多,该公司由非易失性存储技术领域的国际权威Harari Eli博士在1988年创立。
闪迪作为全球唯一一家有权制造和销售所有主要闪存卡格式的公司,拥有超过4900多项关于存储、闪存颗粒等相关技术的专利,并在全球各地拥有着多条闪存颗粒加工制造厂。
闪迪至尊极速系列采用闪迪颗粒
早在2005年,就和日本存储大厂东芝合作,在位于日本四日市运营处的建立起NAND flash闪存 300mm工艺的晶片制造厂,并与2011年正式投入生产。
鉴于闪迪在闪存卡拥有着全球唯一的全系列生产线,因而闪迪原厂的闪存颗粒多用于自身产品消化,并没有大规模投入市场。同时鉴于在NAND flash生产上,闪迪几乎和东芝成为一家人,许多相关产品编号信息暂时无法查询。
总结:
intel和美光、东芝和闪迪、自产自销的三星、性价比的海力士,目前市场上存在的闪存颗粒六大巨头都根据自己的实际特点,你追我赶的占领市场高地,近乎垄断了固态硬盘闪存颗粒的所有市场份额。
然而就六大品牌内部比较,由于各大品牌的侧重点不同,主攻方向的差异。在没有限定的前提下,无法区分到底谁家颗粒好,谁家颗粒烂,但是唯一具有参考意义的便是,下次选购固态硬盘的时候,有这六大厂商的品牌logo,至少要比没有品牌logo来路不明的颗粒强得多得多。
智能座舱之存储篇第三篇---NAND Flash 一眼就看明白了
上期内容我们重点说了NAND FLASH本身的一些特殊性,比如写之前要进行擦除,而且存在坏块的可能性性,所以很多车厂在评估NAND FLASH的时候,会评估目前容量的冗余量是多少,要保障有足够多的空间去预防坏块的产生后的数据搬移。
这期内容重点说说NAND FLASH的一些操作特性,怎么进行控制和读取的。这期的内容有点硬核,需要有一些专业知识的人进行阅读,科普类的文章咱们下期继续。
NAND FLASH的硬件特性介绍
上图是镁光 NAND FLASH MT29F1G08ABAEAH4的引脚(Pin)所对应的功能,简单翻译如下:
1. I/O0 ~ I/O7:用于输入地址/数据/命令,输出数据
2. CLE:Command Latch Enable,命令锁存使能,在输入命令之前,要先在模式寄存器中,设置CLE使能
3. ALE:Address Latch Enable,地址锁存使能,在输入地址之前,要先在模式寄存器中,设置ALE使能
4. CE#:Chip Enable,芯片使能,在操作Nand Flash之前,要先选中此芯片,才能操作
5. RE#:Read Enable,读使能,在读取数据之前,要先使CE#有效。
6. WE#:Write Enable,写使能,在写取数据之前,要先使WE#有效。
7. WP#:Write Protect,写保护
8. R/B#:Ready/Busy Output,就绪/忙,主要用于在发送完编程/擦除命令后,检测这些操作是否完成,忙,表示编程/擦除操作仍在进行中,就绪表示操作完成.
9. Vcc:Power,电源
10. Vss:Ground,接地
11. N.C:Non-Connection,未定义,未连接。
实际项目的NAND FLASH原理图
上图中我们可以发现有两个地方需要上拉电阻R/B#:、WP#,其他都是CPU同nand flash直接相连接。通过查询flash 的datasheet可以发现,这两个引脚是开漏极输出,需要上拉电阻。
而且可以看到电路设计中WP#引脚一端接上拉电阻,一端通过二极管和0欧姆电阻连接到CPU复位引脚,CPU主芯片平台的复位是低电平复位,WP#引脚是低电平的时候写保护有效,这样做的目的就是,在复位期间,即CPU复位引脚为低电平期间此时WP#引脚也为二极管电压(0.7V)为低电平,为写保护状态,在复位期间,CPU引脚状态不定,容易对flash进行误操作。这样做的目的就是硬件实现在CPU复位期间,flash是写保护状态,不允许写入的。
很多时候掉电产生的擦除数据,导致数据丢失无法开机、无法保存掉电记忆等等问题都可以使用这个方案来对策解决问题。
为何需要ALE和CLE
比如命令锁存使能(Command Latch Enable,CLE)和地址锁存使能(Address Latch Enable,ALE),那是因为,Nand Flash就8个I/O,而且是复用的,也就是,可以传数据,也可以传地址,也可以传命令,为了区分你当前传入的到底是啥,所以,先要用发一个CLE(或ALE)命令,告诉nand Flash的控制器一声,我下面要传的是命令(或地址),这样,里面才能根据传入的内容,进行对应的动作。否则,nand flash内部,怎么知道你传入的是数据,还是地址,还是命令啊,也就无法实现正确的操作了。
Nand Flash只有8个I/O引脚的好处
1. 减少外围引脚:相对于并口(Parellel)的Nor Flash的48或52个引脚来说,的确是大大减小了引脚数目,这样封装后的芯片体积,就小很多。现在芯片在向体积更小,功能更强,功耗更低发展,减小芯片体积,就是很大的优势。同时,减少芯片接口,也意味着使用此芯片的相关的外围电路会更简化,避免了繁琐的硬件连线。
2. 提高系统的可扩展性,因为没有像其他设备一样用物理大小对应的完全数目的addr引脚,在芯片内部换了芯片的大小等的改动,对于用全部的地址addr的引脚,那么就会引起这些引脚数目的增加,比如容量扩大一倍,地址空间/寻址空间扩大一倍,所以,地址线数目/addr引脚数目,就要多加一个,而对于统一用8个I/O的引脚的Nand Flash,由于对外提供的都是统一的8个引脚,内部的芯片大小的变化或者其他的变化,对于外部使用者(比如编写nand flash驱动的人)来说,不需要关心,只是保证新的芯片,还是遵循同样的接口,同样的时序,同样的命令,就可以了。这样就提高了系统的扩展性。
片选无关(CE don’t-care)技术
Nand flash支持一个叫做CE don’t-care的技术,字面意思就是,不关心是否片选,那有人会问了,
如果不片选,那还能对其操作吗?答案就是,这个技术,主要用在当时是不需要选中芯片却还可以继续操作的这些情况:在某些应用,比如录音,音频播放等应用中,外部使用的微秒(us)级的时钟周期,此处假设是比较少的2us,在进行读取一页或者对页编程时,是对Nand Flash操作,这样的串行(Serial Access)访问的周期都是20/30/50ns,都是纳秒(ns)级的,此处假设是50ns,当你已经发了对应的读或写的命令之后,接下来只是需要Nand Flash内部去自己操作,将数据读取除了或写入进去到内部的数据寄存器中而已,此处,如果可以把片选取消,CE#是低电平有效,取消片选就是拉高电平,这样会在下一个外部命令发送过来之前,即微秒量级的时间里面,即2us-50ns≈2us,这段时间的取消片选,可以降低很少的系统功耗,但是多次的操作,就可以在很大程度上降低整体的功耗了。
总结起来简单解释就是:由于某些外部应用的频率比较低,而Nand Flash内部操作速度比较快,所以具体读写操作的大部分时间里面,都是在等待外部命令的输入,同时却选中芯片,产生了多余的功耗,此“不关心片选”技术,就是在Nand Flash的内部的相对快速的操作(读或写)完成之后,就取消片选,以节省系统功耗。待下次外部命令/数据/地址输入来的时候,再选中芯片,即可正常继续操作了。这样,整体上,就可以大大降低系统功耗了。
NAND FLASH 的读操作详细解读
以最简单的read操作为例,解释如何理解时序图,以及将时序图中的要求,转化为代码。解释时序图之前,让我们先要搞清楚,我们要做的事情:那就是,要从nand flash的某个页里面,读取我们要的数据。要实现此功能,会涉及到几部分的知识,至少很容易想到的就是:需要用到哪些命令,怎么发这些命令,怎么计算所需要的地址,怎么读取我们要的数据等等。
就好比你去图书馆借书,想想是一个什么样的流程,首先得告诉馆长你要要借书还是还书、然后把要借书的位置告诉馆长,最后是把图书卡或者借书证件给馆长,此时就耐心等待要借的书籍了。
下面,就一步步的解释,需要做什么,以及如何去做:
1.需要使用何种命令
首先,是要了解,对于读取数据,要用什么命令。
下面是datasheet中的命令集合:
很容易看出,我们要读取数据,要用到Read命令,该命令需要2个周期,第一个周期发0x00,第二个周期发0x30。
2.发送命令前的准备工作以及时序图各个信号的具体含义
知道了用何命令后,再去了解如何发送这些命令。
Nand Flash数据读取操作的时序图
注:此图来自镁光的型号MT29F1G08ABAEAH4:E的nand flash的数据手册(datasheet)。
我们来一起看看,我在图中的特意标注的①边上的红色竖线。
红色竖线所处的时刻,是在发送读操作的第一个周期的命令0x00之前的那一刻。让我们看看,在那一刻,其所穿过好几行都对应什么值,以及进一步理解,为何要那个值。
(1)红色竖线穿过的第一行,是CLE。还记得前面介绍命令所存使能(CLE)那个引脚吧?CLE,将CLE置1,就说明你将要通过I/O复用端口发送进入Nand Flash的,是命令,而不是地址或者其他类型的数据。只有这样将CLE置1,使其有效,才能去通知了内部硬件逻辑,你接下来将收到的是命令,内部硬件逻辑,才会将受到的命令,放到命令寄存器中,才能实现后面正确的操作,否则,不去将CLE置1使其有效,硬件会无所适从,不知道你传入的到底是数据还是命令了。
(2)而第二行,是CE#,那一刻的值是0。这个道理很简单,你既然要向Nand Flash发命令,那么先要选中它,所以,要保证CE#为低电平,使其有效,也就是片选有效。
(3)第三行是WE#,意思是写使能。因为接下来是往nand Flash里面写命令,所以,要使得WE#有效,所以设为低电平。
(4)第四行,是ALE是低电平,而ALE是高电平有效,此时意思就是使其无效。而对应地,前面介绍的,使CLE有效,因为将要数据的是命令,而不是地址。如果在其他某些场合,比如接下来的要输入地址的时候,就要使其有效,而使CLE无效了。
(5)第五行,RE#,此时是高电平,无效。可以看到,知道后面低6阶段,才变成低电平,才有效,因为那时候,要发生读取命令,去读取数据。
(6)第六行,就是我们重点要介绍的,复用的输入输出I/O端口了,此刻,还没有输入数据,接下来,在不同的阶段,会输入或输出不同的数据/地址。
(7)第七行,R/B#,高电平,表示R(Ready)/就绪,因为到了后面的第5阶段,硬件内部,在第四阶段,接受了外界的读取命令后,把该页的数据一点点送到页寄存器中,这段时间,属于系统在忙着干活,属于忙的阶段,所以,R/B#才变成低,表示Busy忙的状态的。
介绍了时刻①的各个信号的值,以及为何是这个值之后,相信,后面的各个时刻,对应的不同信号的各个值,大家就会自己慢慢分析了,也就容易理解具体的操作顺序和原理了。
3.如何计算出,我们要传入的地址
在介绍具体读取数据的详细流程之前,还要做一件事,那就是,先要搞懂我们要访问的地址,以及这些地址,如何分解后,一点点传入进去,使得硬件能识别才行。
此处还是以MT29F1G08ABAEAH4:E为例,此nand flash,一共有1024个块,每个块内有64页,每个页是2K+64 Bytes,假设,我们要访问其中的第1000个块中的第25页中的1208字节处的地址,此时,我们就要先把具体的地址算出来:
物理地址=块大小×块号+页大小×页号+页内地址=1000×128K+2K×25+1208=0x7D0CCB8,接下来,我们就看看,怎么才能把这个实际的物理地址,转化为nand Flash所要求的格式。
在解释地址组成之前,先要来看看其datasheet中关于地址周期的介绍:
图 Nand Flash的地址周期组成
结合时序图的2,3阶段,我们可以看出,此nand flash地址周期共有4个,2个列(Column)周期,2个行(Row)周期。
而对于对应的,我们可以看出,实际上,列地址CA0~CA10,就是页内地址,11位地址范围是从0到2047,即2K,而多出的A11,理论上可以表示2048~4095,但是实际上,上述规格书中说明当CA11为1时,CA【10:6】都必须为0,所以我们最多也只用到了2048~2112,用于表示页内的oob区域,其大小是64字节。
PA0~PA5,称作页号,页的号码,可以定位到具体是哪一个页。由6个位控制,最多寻址64页,符合规格书中的一块有64页。
而其中,BA6~BA15,表示对应的块号,即属于哪个块,有10个位控制,寻址范围为1024个块。
// 可见:地址的传输顺序是是 页内地址,页号,块号。从小到大。
简单解释完了地址组成,那么就很容易分析上面例子中的地址了:
0x7D0CCB8 = 0111 1101 0000 1100 0000 1100 1011 1000,分别分配到4个地址周期就是:
1st 周期,CA7~CA0 :1011 1000 = 0x B8
2nd周期,CA11~CA8 :0000 1100 = 0x 0C
3rd周期,BA7~PA0 :0000 1100 = 0x 0C
4th周期,A27~A20 :0111 1101 = 0x 7D
注意,上图图中对应的,*L,意思是低电平,由于未用到那些位,datasheet中强制要求设为0,所以,才有上面的2nd周期中的高4位是0000.。因此,接下来要介绍的,我们要访问第1000个块中的第25页中的1208字节处的话,所要传入的地址就是分4个周期,分别传入2个列地址的:0xB8,0x0C,然后再传2个行地址的:0x0C,0x7D,这样硬件才能识别。
4.读操作过程的解释
准备工作终于完了,下面就可以开始解释说明,对于读操作的,上面图中标出来的,1-6个阶段,具体是什么含义。
(1) 操作准备阶段:此处是读(Read)操作,所以,先发一个图5中读命令的第一个阶段的0x00,表示,让硬件先准备一下,接下来的操作是读。
(2) 发送两个周期的列地址。也就是页内地址,表示,我要从一个页的什么位置开始读取数据。
(3) 接下来再传入三个行地址。对应的也就是页号。
(4) 然后再发一个读操作的第二个周期的命令0x30。接下来,就是硬件内部自己的事情了。
(5)Nand Flash内部硬件逻辑,负责去按照你的要求,根据传入的地址,找到哪个块中的哪个页,然后把整个这一页的数据,都一点点搬运到页缓存中去。而在此期间,你所能做的事,也就只需要去读取状态寄存器,看看对应的位的值,也就是R/B#那一位,是1还是0,0的话,就表示,系统是busy,仍在”忙“(着读取数据),如果是1,就说系统活干完了,忙清了,已经把整个页的数据都搬运到页缓存里去了,你可以接下来读取你要的数据了。
对于这里。估计有人会问了,这一个页一共2048+64字节,如果我传入的页内地址,就像上面给的1028一类的值,只是想读取1028到2011这部分数据,而不是页开始的0地址整个页的数据,那么内部硬件却读取整个页的数据出来,岂不是很浪费吗?答案是,的确很浪费,效率看起来不高,但是实际就是这么做的,而且本身读取整个页的数据,相对时间并不长,而且读出来之后,内部数据指针会定位到你刚才所制定的1208的那个位置。
(6) 接下来,就是“窃取“系统忙了半天之后的劳动成果的时候了,呵呵。通过先去Nand Flash的控制器中的数据寄存器中写入你要读取多少个字节(byte)/字(word),然后就可以去Nand Flash的控制器的FIFO中,一点点读取你要的数据了。
至此,整个Nand Flash的读操作就完成了。
对于其他操作,可以根据上面的分析,一点点自己去看datasheet,根据里面的时序图去分析具体的操作过程,然后对照代码,会更加清楚具体是如何实现的。
NAND FLASH 搭配NOR FLASH的优缺点
常见的应用组合就是,用小容量的Nor Flash存储启动代码,比如uboot,系统启动后,初始化对应的硬件,包括SDRAM等,然后将Nand Flash上的Linux 内核读取到内存中,做好该做的事情后,就跳转到SDRAM中去执行内核了。
这样的好处是由于NAND 本身有坏块的可能性,所以为了保障启动万无一失,很多要求高级安全的产品,标注必须从NOR Flash启动uboot,而且从NOR启动还有一个好处就是启动速度快,NAND Flash的优点是容量大,但是读取速度不快,比不上NOR Flash,比如一些对于开机速度有要求的产品应用,比如车载液晶仪表,这类产品为了快速启动一般都是NOR FLASH+EMMC的配置,当然像赛普拉斯平台直接上hyperflash那就更快了。
NAND Flash的ECC校验简单说明
我们先来说说为什么需要ECC校验这个事情,其实上一篇文章我们说过由于NAND flash的自身的不稳定性,存在位翻转的现象,所以就存在写入到flash中的数据和读出来的数据不一样的情况发生,此时就需要有一个检验的机制,防止读出来的不正确,还可以纠正过来。
其实这个就类似于去银行存钱,你存了1W,过几天去银行去取钱的时候发现只有9000了,这个时候你就会拿出存条找银行理论,上次明明存的就是1W啊,你少的1000必须跟我纠正过来,其实这个就是NAND flash的ECC检验原理,发现有读出来的数据和存进去的数据不正确,此时就需要去纠正回来,当然这里的纠正的数据是有限制的,不是所有数据出错都能纠正过来。
ECC 校验是在奇偶校验的基础上发展而来的,它将数据块看作一个矩阵,利用矩阵的行、列奇偶信息生成 ECC 校验码。它能够检测并纠正单比特错误和检测双比特错误,但对双比特以上的错误不能保证检测。它克服了传统奇偶校验只能检出奇数位出错、校验码冗长、不能纠错的局限性。每 nbit 的 Ecc 数值可满足 2的n次方bit 数据包的校验要求。
当往Nand Flash 的Page 中写入数据的时候,每256字节我们生成一个ECC 校验和,称之为原ECC校验和,保存到 PAGE 的OOB数据区中。当从Nand Flash 中读取数据的时候,每 256 字节我们生成一个ECC校验和,称之为新 ECC 校验和。
校验的时候,根据上述ECC生成原理不难推断:将从 OOB 区中读出的原 ECC校验和新ECC校验和按位异或,若结果为0,则表示不存在错(或是出现了ECC无法检测的错误):若3个字节异或结果中存在11个比特位为1,表示存在一个比特错误,且可纠正;若3个字节异或结果中只存在1个比特位为1,表示OOB区出错:其他情况均表示出现了无法纠正的错误。
这两期我们基本上把NAND FLASH的相关设计和使用都完整讲了一遍,下期会讲讲车载DRAM和EMMC的相关内容,敬请期待。
相关问答
nand flash 详解?Nand-flash存储器是flash存储器的一种,其内部采用非线性宏单元模式,为固态大容量内存的实现提供了廉价有效的解决方案。Nand-flash存储器具有容量较大,改写速...
arm CPU集群 如何启动?启动方式(1)norflash:2MB,从norflash的0地址处开始运行第一条代码,所以代码一定要放在norflash的最前端(2)nandflash:128MB,但是nandflash没有参...
2280固态硬盘 怎么看?方法如下:1、首先我们打开电脑上面的电脑管家。2、打开电脑管家之后我们点击最下面一排的最后一个【工具箱】3、点击之后我们在分栏里面找到【硬件检测】4...
Uboot设备树如何移植?移植方法:你只能通过NandFlash控制器访问NandFlash,即是只要知道Nand控制器的寄存器地址即可。NandFlash不是一个RamLike的器件。Uboot放入nand中,在nand...
CHECKINGNVRAM中文是什么意思啊?下面是我在网上找的解释:CHECKING:检查NVRAM:非易失性随机访问存储器(Non-VolatileRandomAccessMemory),是指断电后仍能保持数据的一种RAM。如果...
nand flash 是什么颗粒?TLC是闪存一种类型,全称为Triple-LevelCellTLC芯片技术是MLC和TLC技术的延伸,最早期NANDFlash技术架构是SLC(Single-LevelCell),原理是在1个...
NAND Flash 和Nor Flash 到底有什么区别?1、存储架构不同NORFlash架构提供足够的地址线来映射整个存储器范围。这提供了随机访问和短读取时间的优势,这使其成为代码执行的理想选择。另一个优点是100%...
嵌入式 Flash 读写操作该如何进行设计?Flash存储芯片的通讯方式以SPI居多,在实现flash读写时就是要实现SPI的通讯协议,与EEPROM不同的是,SPI在操作时是按照PAGE页进行整页擦除写入的,这一点需要注...
spi nand 和spiflash有什么不同?SPⅠNAND是SPI总线接口的闪存,一般用于移动硬盘或计算机固态硬盘,它的容量很大,通常都是以GB为单位的。而SPlFLASH通常是指SPl总线接口的存储芯片,容量都是...
ssd nand 区别?SSD指的固态硬盘,固态硬盘上存储信息的方式是采用Flash芯片,Flash芯片主要分为NANDFlash和NorFlash。简单来说,SSD硬盘是一个由若干个NANDFlash或者NorFl...