最新消息:20210816 当前crifan.com域名已被污染,为防止失联,请关注(页面右下角的)公众号

【整理】Nand Flash为何不适合做XIP(eXecute In Place)

Flash crifan 5950浏览 0评论

【整理】Nand Flash为何不适合做XIP(eXecute In Place)

与Nand Flash对应的是另一种Flash:Nor Flash,其对应的特点是:
http://blog.csdn.net/farsight2009/archive/2009/06/03/4228093.aspx
“NorFlash的特点是芯片内执行(XIP,eXecute In Place),这样应用程序可以直接在flash闪存内运行,不必再把代码读到系统RAM中。如uboot中的ro段可以直接在NorFlash上运行,只需要把rw和zi段拷贝到RAM中运行即可。 ”

而相应地,Nand Flash比较特殊:
http://blog.csdn.net/farsight2009/archive/2009/06/03/4228093.aspx
“NandFlash器件使用复杂的I/O口来串行地存取数据,8个引脚用来传送控制、地址和数据信息。由于时序较为复杂,所以一般CPU最好集成NAND控制器。另外由于NandFlash没有挂接在地址总线上,所以如果想用NandFlash作为系统的启动盘,就需要CPU具备特殊的功能,如s3c2410在被选择为NandFlash启动方式时会在上电时自动读取NandFlash的4k数据到地址0的SRAM中。如果CPU不具备这种特殊功能,用户不能直接运行NandFlash上的代码,那可以采取其他方式,比如好多使用NandFlash的开发板除了使用NandFlash以外,还用上了一块小的NorFlash来运行启动代码。”

至于,为什么Nand Flash不能进行XIP的原因,主要是由于物理上的硬件限制,
在读取Flash时候,容易出现“位翻转(bit convert)”:
http://blog.csdn.net/farsight2009/archive/2009/06/03/4228093.aspx
“在Flash的位翻转(一个bit位发生翻转)现象上,NAND的出现几率要比NorFlash大得多。这个问题在Flash存储关键文件时是致命的,所以在使用NandFlash时建议同时使用EDC/ECC等校验算法。 ”

但是,如果能保证不出错,也还是可以进行XIP,可以在其上执行代码的:
http://www.cnemb.com/forum/read.php?tid=9354
“所谓XIP,就是CODE是在FLASH上直接运行. NANDFLASH只是不适合做XIP,但并不是不能做XIP.
要一段CODE能够正确的运行,要保证它的CODE是连续的,正确的.
由于一些电气特性的原因,NOR FLASH能够做到这一点,不存在坏道或坏块,所以能够做XIP.
而对于NAND FLASH, 它只保证它的BLOCK 0是好的,其他的块并不保证,虽然出错的几率比较低,但还是有出错的可能,所以CODE可能无法连续正确地执行.
但只要你有额外的保障措施,比如说在执行CODE之前去做一次ECC校验,来确保CODE是连续正确的.那你也可以做XIP. 事实上我就正在这么做,而且也证明是成功的. ”

【附录】

还是之前整理的这个帖子,说明的更详细:

关于Nand Flash和Nor Flash的XIP

http://hi.baidu.com/serial_story/blog/item/adb20a2a3f8ffe3c5243c1df.html

转载请注明:在路上 » 【整理】Nand Flash为何不适合做XIP(eXecute In Place)

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
83 queries in 0.182 seconds, using 22.02MB memory