ROM、RAM、闪存

ram和rom:
rom:生产时写入,一次成型。
prom:可写一次
eprom/eeprom:可写多次
flash rom:闪存(Flash Memory) 非易失闪存技术:NOR flash、NAND flash

实际应用:
RAM:
RAM有两大类,一种称为静态RAM(Static RAM/SRAM),SRAM速度非常快,是目前读写最快的存储设备了,但是它也非常昂贵,所以只在要求很苛刻的地方使
用,譬如CPU的一级缓冲cache。另一种称为动态RAM(Dynamic RAM/DRAM),DRAM保留数据的时间很短,速度也比SRAM慢,不过它还是比任何的ROM都要快,
但从价格上来说DRAM相比SRAM要便宜很多,计算机内存就是DRAM的。

ROM:
手机的ROM和传统的ROM(Read Only Memory)又有些不一样,它分为两部分,一部分是用于系统,另外一部分是用作用户存储数据。而存储卡则很好理解了,常用的有tf卡,用于存储用户数据。
在过去的20年里,嵌入式系统一直使用ROM(EPROM)作为它们的存储设备,然而近年来Flash全面代替了ROM(EPROM)在嵌入式系统中的地位,用作存储Bootloader以及操作系统或者程序代码或者直接当硬盘使用(U盘)。 

实际应用:
NOR Flash 的读取和我们常见的 SDRAM 的读取是一样,用户可以直接运行装载在 NOR FLASH 里面的代码,这样可以减少 SRAM 的容量从而节约了成本。 
NAND Flash 没有采取内存的随机读取技术,它的读取是以一次读取一块的形式来进行的, 通常是一次读取 512 个字节,采用这种技术的 Flash 比较廉价。用户 不能直接运行 NAND Flash 上的代码,因此好多使用 NAND Flash 的开发板除了使用 NAND Flah 以外,还作上了 一块小的 NOR Flash 来运行启动代码。
NOR主要应用在代码存储介质中,NAND适合于数据存储,NAND在CompactFlash、Secure Digital、PC Cards和MMC存储卡市场上所占份额最大。
NOR flash占据了容量为1~16MB闪存市场的大部分,而NAND flash只是用在8~128MB的产品当中,这也说明NOR主要应用在代码存储介质中,NAND适合于数据存储,NAND在CompactFlash、Secure Digital、PC Cards和MMC(多媒体存储卡Multi Media Card)存储卡市场上所占份额最大。


手机市场:
    在手机市场中NOR FLASH是当之无愧的领导者,目前大部分手机使用的是NOR+PSRAM的XiP存储架构,其中NOR FLASH用来存储代码和数据,PSRAM作为MCU
和 DSP执行运算时的数据缓存。随着手机功能的日益丰富,需要更大的代码和数据存储空间,这时如果选择大容量的NOR FLASH,成本将非常昂贵,因此,一些高端手机 中开始加入NAND来作为多媒体数据的一个存储载体。从性价比来看,NOR FLASH的最大存储容量不能超过1GB,否则就没有竞争优势了;并且,以PSRAM的结构和特性,它的容量很难超过256MB,这种组合将成 为多媒体手机的一个限制。造成这个问题的原因主要是早期手机基带等IC技术掌握在欧美公司手中,他们对于成本考量并不是非常关注,而今,国内IC厂商的崛 起和手机市场的激烈竞争,使得所有的设计师开始考虑如何降低BOM COST。
    和大部分手机采用的存储结构对比。XiP架构是现在使用最多的,而新的高速处理平台正在向代码映射存储器架构发展,也就是NAND+SDRAM方式。 虽然NAND闪存有一些应用问题,但是NAND闪存单位bit成本加上其缺点导致的额外成本仍然要比NOR闪存的单位bit成本低。
RAM的容量又分标称容量、实际容量和可用容量三种,标称容量即我们看手机参数的容量,即1G、2G这些。实际容量会比标称容量少一些,这其除了一些小量的损耗(算法、颗粒的不同)之外,部分手机还会被GPU占用一部分RAM,所以一些2G的手机看到的实际容量会是1.7G~1.8G。而可用容量又会比实际容量再少一些,是由于系统占用以及后台程序的占用的原因,一般2G的手机刚开机的时候可用RAM会有1.3G左右,而1G的手机可用有400M左右。

存储卡的标称容量和实际容量比较接近,例如16G的存储卡可用容量都会达到14G甚至15G。

=============================
NOR flash之所以可以片内执行,就是因为他符合CPU去指令译码执行的要求。CPU送一个地址出来,NORflash就能给一个数据让CPU执行,中间不需要额外的处理操作。
NAND flash不一样是因为nand flash有地址,数据,命令共用IO口的问题,cpu把地址发出来之后,并不能直接得到数据,还需要控制线的操作才能完成。说白了,就是他没有专用的SRAM接口。还有个解压缩问题,NOR flash虽然把数据给cpu了,但是这个数据一般还是会通过解压缩到SDRAM中执行的,这有个好处是执行快;另外,如果不压缩直接执行,flash就要很大,成本会上去。

NAND flash之所以能够启动,并不是说他片内执行,是因为NAND有文件系统,通过映射得到数据,一般都在CPU内部有个小的启动模块引导文件系统。详细的不是特别了解,需要找软件驱动人员解答。

======================================

NOR FLASH并不能替代RAM

首先,NOR FLASH 是很常见的一种存储芯片,数据掉电不会丢失.NOR FLASH支持Execute On Chip,即程序可以直接在FLASH片内执行(这意味着存储在NOR FLASH上的程序不需要复制到RAM就可以直接运行).这点和NAND FLASH不一样.因此,在嵌入式系统中,NOR FLASH很适合作为启动程序的存储介质.NOR FLASH的读取和RAM很类似(只要能够提供数据的地址,数据总线就能够正确的给出数据),但不可以直接进行写操作.对NOR FLASH的写操作需要遵循特定的命令序列,最终由芯片内部的控制单元完成写操作.


  然后,nor flash可以像内存一样直接读出,但写是不能这样的,要通过命令擦除写入。程序的code和只读数据放入flash,要改变的只能放在ram里。

程序一般默认分下面几个段,代码段(默认名称一般为.text或.code),只读数据段(默认名称一般.ro),有初始化值的读写数据段(默认名称一般.rw), 无初始化值的读写数据段(默认名称一般为.zi),还有堆栈段。当然你还可以定义自定义的段,自定义的段需指明是什么类型的段,是只读段,还是读写段。

代码段当然就是代码了,一般这个是只读的,因为如果可以允许随意修改代码段的机器代码,会造成无法预知的后果,因此这个段可以映射在norflash中。

只读数据段一般是恒常量,恒常量么,当然是只读的,所以这个也可以映射在norflash中。

.rw段一般包括有初始化值的全局变量,这个由于是变量,当然不能映射在norflash中了。

.zi段一般包括不带初始化值的全局变量,这个也是变量,当然也不能映射在norflash中。

堆栈段同样是读写段,不能映射在norflash中。

上述各段的放置位置是由链接器链接时由链接脚本决定的,如果你没有设置自己的链接脚本,编译器会按默认的链接规则分布上述各段,如果你指定了链接脚本,会按你自己定义的链接脚本的链接顺序来链接为可执行程序。

一般当链接地址指向RAM中时,默认的链接顺序是这样的, 从低地址向高地址,首先是代码段,然后是只读段,然后是RW段和ZI段,再上面一般是堆,最上面是堆栈段,堆栈段是向下增长的。

如果链接地址设置在FLASH中时,默认的链接顺序一般是,代码段和只读段放在FLASH中,其他段放在RAM中。

如果自己定义链接脚本,虽然可以讲RW段和ZI段放在FLASH里编译过去,但程序写RW段和ZI段是不会成功的,因此程序执行也不会是正确的。








  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值