加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

关于NOR Flash和NAND flash启动的问题

发布时间:2020-12-15 17:50:32 所属栏目:百科 来源:网络整理
导读:先贴出源博客的 位置: http://blog.chinaunix.net/uid-26404697-id-3152290.html,博主: 暴风lay 在原作之上稍作修改 ? ????? NOR Flash? 的 重要特点就是芯片内执行( XIP? , eXecute In Place ),这样程序可以直接在 Flash 闪存内运行,不必再把代码读
先贴出源博客的 位置: http://blog.chinaunix.net/uid-26404697-id-3152290.html,博主: 暴风lay
在原作之上稍作修改

?

????? NOR Flash?重要特点就是芯片内执行(XIP?eXecute In Place),这样程序可以直接在Flash闪存内运行,不必再把代码读到系统RAM中。

?注意:片内执行不是说程序在存储器内执行。CPU的基本功能就是取指、译码和执行。程序的执行最终还是在CPU中。norflash能在芯片内执行,就是指CPU的取指模块能够直接从norflash中把指令取出来,供后面的译码和执行模块使用。

疑问是:同样都是非易失性存储,为什么NOR?flash可以实现XIP,而NAND?flash就不可以???


首先,两者的结构不同:

我们知道ARM9是哈佛结构,也就是具有一条独立的地址总线和一条独立的数据总线。取指和取数是在两条总线上进行。

?
以TQ2440开发板上采用的NOR和NAND结构说明。

?????

?????????????????????????????????????????????????????? ???? NOR Flash ? ? ? ? ? ? ? ? ? ? ? ?

???????????????????????????????????????? ???NAND Flash

上图中,LADDR1-LADDR23为NOR地址线,LDATA为数据总线。可以看出:NOR采用的是地址线和数据线分开的结构,有足够的地址引脚寻址,这样就可以直接挂载到ARM的外接总线结构上,CPU给出一个地址就能直接读取NOR中存储的程序,而不需要经过中间的转化过程。

上图中,LADDR1-LADDR23为NOR地址线,LDATA为数据总线。可以看出:NOR采用的是地址线和数据线分开的结构,有足够的地址引脚寻址,这样就可以直接挂载到ARM的外接总线结构上,CPU给出一个地址就能直接读取NOR中存储的程序,而不需要经过中间的转化过程。

而NandFlash器件使用复杂的I/O串行地存取数据,控制、地址和数据信息共用LDATA这8个I/O引脚。这样的结构不能直接挂载到CPU的总线结构中。cpu把地址发出来之后,并不能直接得到数据,还需要控制线的操作才能完成。由于时序较为复杂,所以一般CPU最好集成NAND控制器,如果想用NandFlash作为系统的启动盘,就需要CPU具备特殊的功能。如s3c2440配备了一个SRAM的缓冲器名为“Stepingstone”。在被选择为NandFlash启动方式时会在上电时自动读取NandFlash4k数据到SRAM中。一般情况下,这4K的启动代码会复制NAND里面的内容到SRAM中,主程序就在SRAM中执行了。一般如果CPU不具备这种特殊功能,用户不能直接运行NandFlash上的代码,那可以采取其他方式,比如好多使用NandFlash的开发板除了使用NandFlash以外,还用上了一块小的NorFlash(一般1-4M)来运行启动代码。Nor Flash的启动程序复制Nand的程序到SRAM中执行。

?

?

其次:嵌入式系统中代码的执行方式主要有3种:

?

  ①?完全映射(fully shadowed)。嵌入式系统程序运行时,将所有的代码从非易失存储器(FlashROM等)复制到RAM中运行。

  ②?按需分页(demand paging)。只复制部分代码到RAM中。这种方法对RAM中的页进行导入/导出管理,如果访问位于虚存中但不在物理RAM中会产生页错误,这时才将代码和数据映射到RAM中。

?

  ③?eXecute In Place (XIP)在系统启动时,不将代码复制到RAM,而是直接在非易失性存储位置执行。RAM中只存放需要不断变化的数据部分。如果非易失性存储器的读取速度与RAM相近,则XIP可以节省复制和解压的时间NOR?FlashROM的读取速度比较快(约100 ns),适合XIP;而NAND Flash的读操作是基于扇区的,速度相对很慢(μs),因此不宜实现XIP系统。而NAND闪存写入速度比NOR快,更适合数据存储系统,比如U盘。

?

最后,Nand的坏块的随机分布:


芯片内执行主要是是看芯片可不可以线性存储代码(假如硬件支持芯片接口),只要能保证芯片的存储空间是线性的(也就是无坏块),都可以片上执行在读取Flash时候,容易出现位翻转(bitconvert)。?Flash的位翻转(一个bit位发生翻转)现象上,NAND的出现几率要比NorFlash大得多。这个问题在Flash存储关键文件时是致命的,所以在使用NandFlash时建议同时使用EDC/ECC等校验算法。?但是,如果能保证不出错,也还是可以进行XIP,可以在其上执行代码的:所谓XIP,就是CODE是在FLASH上直接运行. NANDFLASH只是不适合做XIP,sans-serif">但并不是不能做XIP要一段CODE能够正确的运行,sans-serif">要保证它的CODE是连续的,sans-serif">正确的由于一些电气特性的原因,NOR FLASH能够做到这一点,sans-serif">不存在坏道或坏块,sans-serif">所以能够做XIP.而对于NAND FLASH,?它只保证它的BLOCK 0是好的,sans-serif">其他的块并不保证,sans-serif">虽然出错的几率比较低,sans-serif">但还是有出错的可能,sans-serif">所以CODE可能无法连续正确地执行但只要你有额外的保障措施,sans-serif">比如说在执行CODE之前去做一次ECC校验,sans-serif">来确保CODE是连续正确的那你也可以做XIP。有人这么做了,sans-serif">而且也证明是成功的

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读