RAM

单片机就是个小计算机,跳蚤虽小不但五脏惧全,有时还跳得很高呢!自然,大计算机少不得的数据存储系统,小不点的单片机一样有,而且往往和CPU集成在一起,更加显得小巧灵活。直到90年代初,国内容易得到的单片机就是8031:不带存储器的芯片,要想工作,还必需外加RAM和ROM,单片机成了3片机,...现在不同了,大的小的又是51,又是AVR又是STC,还有什么430,PIC等等,都各说各的好,可是谁业也不敢说"我不要存储器"!好,废话少说...

单片机内,有这么几种数据存储手段:

1. 程序存储器:里面存放的是单片机的灵魂:工作程序.小的可能只有1KB(最多只能装1024条8位数据,因为实际指令还有许多2字节,3字节指令,所以它还装不下1024条指令)大的也有128KB的.这些8位数据要么在工厂里做摸子光刻进去,要么一次性的烧写进去,要么...业余或开发最多的用编程器这么个特殊工具把调试成功的机器码装载进去,或者像AVR单片机那样自己花几块钱做一条下载线,把电脑里这些东西灌进去(或许是AVR最吸引人之处),它一旦进驻电脑的程序存储器中,除了借助上述装置便不能自由改写,在单片机运行时,只是从其中读出指令或固定的数据,所以给程序存储器一个"只读存储器"的别名,简写为ROM,包括用编程器写紫外线擦除内容的EPROM.用电擦除的EEPROM和现在新兴的FLASH ROM;一次性写入的ROM仅用于电路和程序固定的批量产品中,实际工作起来,都是一样的.

为了定位ROM中的数据,每个8位(bit:二进制位)存储单元都有一个固定的"地址",通常用16进数表示:例如对于一个所谓4K的ROM,地址从0000H到0FFFH,(即是从0000,0001...4095),单片机运行时从哪个地址取数据,完全由程序本身决定,并不要我们干预.记住,给单片机一通电,它经过一个短暂的复位过程,立即转向ROM的最低地址0000H,在这里面放置的往往是一条"跳转"指令,它从这里一步跳到另一个地址:程序的真正起始地址,例如51机的0080H.原因?以后再说...

难道ROM中就只有指令不能来点别的?看好罗,ROM是程序存储器,除了指令外,还包括运行程序必须的某些固定数据,例如:数据表.假如,我们要求在单片机的某口上输出00H到FFH(255)按正弦半波变化的数值,每秒10000次,那如果硬要它按照公式一个个计算,对于它来说未免力不从心,可是我们可以把预先计算好的数值存入ROM中,到时候直接取出不是好多了?...又如一个重要的应用:大家一定见过不少单片机的东西上面都有数码显示,那些个数字其实就是用单片机的口线控制数码管的字段电极电位,这些字形也是存放在ROM中的字模表,各个字模和0-9的数字(机器内当然是0000-0101二进数)对应起来,例如常见的共阳极7段数码管,必须在阳极加正电,7个阴极都是地电位,才能显示数字"8",数字8对应的显示字码值是二进数“10000000“(那个1对应的是小数点,高电位不让它显示)。这简直是非用不可了。。。ROM先说到这里

2. 数据存储器:这是个可以随时存取数据的一块存储器,也就是可以读(取)也可以写(存)的存储器,简称RAM。现在的单片机里面使用的RAM属于静态RAM或SRAM,这个和电脑用的内存条有所不同,只要你把数据写入SRAM后,只要不断电,或者不清除掉,这个数据就一直保存在那里,电脑是用的动态RAM,要不断给它加刷新脉冲才能保存数据。因为单片机处理的信息量比电脑小很多,所以它带的RAM也比较少:从完全不带、带128、256、...1K,2K,到4K,比ROM少多了。因为实际上RAM只是作为数据临时存放的地方,除非进行图像处理需要存放大量的数据外,一般对于执行较简单任务的单片机,有这么多也够用,如果实在不够用也只能采取外加SRAM如6116,6264等等来扩展。

为了对RAM单元存取8位二进数,当然也的和ROM一样用“地址”来标示它的具体位置假如某单片机有1K(1024)RAM,它的地址也是从0000到1024,或16进数的0000H到03FFH,可见和ROM的地址是一样的,不会混淆不清?不会,因为读ROM是由单片机的程序指针或转移指令或查表指令进行,而这些指令是不会进入RAM区的,读写RAM是另外的数据传送指令,也不会进入ROM区,这点也是和电脑不同之处,后者程序和数据都在内存条里面,地址不同,如果窜位了就会造成不可预见后果。单片机的这种存储器结构也称为哈佛结构。

RAM在单片机里的用途,主要是存放临时数据,例如用单片机测温,每秒测1次,显示1分钟的平均值(1分钟更新一次);我们先通过传感器,放大电路,A/D转换,把温度这个模拟量转变为成比例的二进数,然后每秒钟1次把数字量通过输入口顺序存入到单片机的RAM中,然后对他们进行两两求和再平均的计算(题外话:要单片机进行“除法“运算比较麻烦,例外的是除以2,4,8。。。却非常简单!----运用“右移”指令1,2,3次便可)最后的数值显示出来,然后把这60个存储单元统统写0清除旧数据,下次又如此这般地循环进行。。。

另外在单片机里面还有若干寄存器,数量不多但是作用很大,除了暂存数据,还可以交换、加工、传递等等,以及随时纪录单片机当前处于什么状态,输入输出口,也是作为特殊功能的寄存器存在,具体各有不同,就不是随便说说可以搞清楚的,要看有关书籍了。

来源:网络

围观 19
31

MCU(如: 基于Cortex V6M 的Cortex M0+ 等) Code 通常运行在内嵌Flash 中。在某些特定应用场合,需要将部分函数运行于RAM中。

为解决次问题,实现了一种解法,具体做法如下:

1. 实现要运行在RAM的 routine, 本rouTIne 使用纯汇编实现, 如:

__asm void program_word2addr(uint32_t addr, uint32_t data)

{

push {r3, r4, r5, lr} ;save some regsiters

/*your code for this rouTIne*/

pop {r3, r4, r5, pc}

}

2. 编译时,采用code 与运行位置无关的编译选项 如 (Keil--apcs /ropi/rwpi), 生成 *.axf;

3. 通过fromelf -c 将生成 *.axf 反汇编,找到对应program_word2addr 实现部分, 并将rouTIne 对应的binary code Copy 到所要应用的 Code 中,以只读数组的形式出现:

如:

const staic uint16_t s_flashProg2AddressCode[16] = {...., ....}

4. 定义 一个全局数组, 如 staTIc uint16_t g_code[16], size正好等于

s_flashProg2AddressCode的长度;

5. 定义一个函数指针, 如 static void (*callFlashPrg2Address)(uint32_t addr, uint32_t data)

6. 定义一个函数实现将Code 运行与 RAM如:

void run_prgcode_onram(uint32_t addr, uint32_t data)

{

memcpy(g_code,s_flashProg2AddressCode,32 );

callFlashPrg2Address = (void (*)(uint32_t addr, uint32_t data))((uin32_t)g_code + 1);

callFlashPrg2Address (address, data);

}

run_prgcode_onram, 便可以将program_word2addr 运行于RAM中。

callFlashPrg2Address = (void (*)(uint32_t addr, uint32_t data))((uin32_t)g_code + 1); +1 的目的,时由于运行平台为 Cortex V6M , 采用的thumb指令集,根据ARMSpec 要 求完成。

callFlashPrg2Address (address, data); 则是实现RAM运行program_word2addr 的关键所在。

来源:畅学单片机

围观 3
574

本文主要介绍的是ARM里的RAM和SDRAM有什么区别,首先介绍了RAM的类别及特点,其次对SDRAM做了详细阐述,最后介绍了RAM和SDRAM的区别是什么。

RAM介绍

Random-Access Memory(随机存取存储器),在计算机的组成结构中,有一个很重要的部分,就是存储器。存储器是用来存储程序和数据的部件,对于计算机来说,有了存储器,才有记忆功能,才能保证正常工作。存储器的种类很多,按其用途可分为主存储器和辅助存储器[或者内存储器和外存储器],主存储器简称内存,内存在电脑中起着举足轻重的作用,一般采用半导体存储单元。因为RAM是内存其中最重要的存储器,所以通常我们直接称之为内存。内存就是存储程序以及数据的地方,比如当我们在使用WPS处理文稿时,当你在键盘上敲入字符时,它就被存入内存中,当你选择存盘时,内存中的数据才会被存入硬(磁)盘。

RAM就是既可以从中读取数据,也可以写入数据。当机器电源关闭时,存于其中的数据就会丢失。我们通常购买或升级的内存条就是用作电脑的内存,内存条(SIMM)就是将RAM集成块集中在一起的一小块电路板,它插在计算机中的内存插槽上,以减少RAM集成块占用的空间。目前市场上常见的内存条有 128M/条、256M/条、512M/条等。

RAM的类别

根据存储单元的工作原理不同, RAM分为静态RAM和动态RAM。
  
静态随机存储器(SRAM)

静态存储单元是在静态触发器的基础上附加门控管而构成的。因此,它是靠触发器的自保功能存储数据的。

动态随机存储器(DRAM)

动态RAM的存储矩阵由动态MOS存储单元组成。动态MOS存储单元利用MOS管的栅极电容来存储信息,但由于栅极电容的容量很小,而漏电流又不可能绝对等于0,所以电荷保存的时间有限。为了避免存储信息的丢失,必须定时地给电容补充漏掉的电荷。通常把这种操作称为“刷新”或“再生”,因此DRAM内部要有刷新控制电路,其操作也比静态RAM复杂。尽管如此,由于DRAM存储单元的结构能做得非常简单,所用元件少,功耗低,已成为大容量RAM的主流产品。

RAM的特点

1、随机存取

所谓“随机存取”,指的是当存储器中的数据被读取或写入时,所需要的时间与这段信息所在的位置或所写入的位置无关。相对的,读取或写入顺序访问(SequenTIal Access)存储设备中的信息时,其所需要的时间与位置就会有关系。它主要用来存放操作系统、各种应用程序、数据等。

2、易失性

当电源关闭时RAM不能保留数据。如果需要保存数据,就必须把它们写入一个长期的存储设备中(例如硬盘)。RAM和ROM相比,两者的最大区别是RAM在断电以后保存在上面的数据会自动消失,而ROM不会自动消失,可以长时间断电保存。

3、对静电敏感

正如其他精细的集成电路,随机存取存储器对环境的静电荷非常敏感。静电会干扰存储器内电容器的电荷,引致数据流失,甚至烧坏电路。故此触碰随机存取存储器前,应先用手触摸金属接地。

4、访问速度

现代的随机存取存储器几乎是所有访问设备中写入和读取速度最快的,存取延迟和其他涉及机械运作的存储设备相比,也显得微不足道。

5、需要刷新(再生)

现代的随机存取存储器依赖电容器存储数据。电容器充满电后代表1(二进制),未充电的代表0。由于电容器或多或少有漏电的情形,若不作特别处理,数据会渐渐随时间流失。刷新是指定期读取电容器的状态,然后按照原来的状态重新为电容器充电,弥补流失了的电荷。需要刷新正好解释了随机存取存储器的易失性。

SDRAM介绍

SDRAM(Synchronous Dynamic Random Access Memory)同步动态随机存取存储器,同步是指Memory工作需要步时钟,内部的命令的发送与数据的传输都以它为基准;动态是指存储阵列需要不断的刷新来保证数据不丢失;随机是指数据不是线性依次存储,而是由指定地址进行数据读写。目前的168线64bit带宽内存基本上都采用SDRAM芯片,工作电压3.3V电压,存取速度高达7.5ns,而EDO内存最快为15ns。并将RAM与CPU以相同时钟频率控制,使RAM与CPU外频同步,取消等待时间,所以其传输速率比EDO DRAM更快。

SDRAM从发展到现在已经经历了四代,分别是:第一代SDR SDRAM,第二代DDR SDRAM,第三代DDR2 SDRAM,第四代DDR3 SDRAM.

第一代与第二代SDRAM均采用单端(Single-Ended)时钟信号,第三代与第四代由于工作频率比较快,所以采用可降低干扰的差分时钟信号作为同步时钟。

SDR SDRAM的时钟频率就是数据存储的频率,第一代内存用时钟频率命名,如pc100,pc133则表明时钟信号为100或133MHz,数据读写速率也为100或133MHz。

之后的第二,三,四代DDR(Double Data Rate)内存则采用数据读写速率作为命名标准,并且在前面加上表示其DDR代数的符号,PC-即DDR,PC2=DDR2,PC3=DDR3。如PC2700是DDR333,其工作频率是333/2=166MHz,2700表示带宽为2.7G。

DDR的读写频率从DDR200到DDR400,DDR2从DDR2-400到DDR2-800,DDR3从DDR3-800到DDR3-1666。

很多人将SDRAM错误的理解为第一代也就是 SDR SDRAM,并且作为名词解释,皆属误导,SDR不等于SDRAM。

  Pin:模组或芯片与外部电路电路连接用的金属引脚,而模组的pin就是常说的“金手指”。
  SIMM:Sigle In-line Memory Module,单列内存模组。内存模组就是我们常说的内存条,所谓单列是指模组电路板与主板插槽的接口只有一列引脚(虽然两侧都有金手指)。
  DIMM:Double In-line Memory Module,双列内存模组。是我们常见的模组类型,所谓双列是指模组电路板与主板插槽的接口有两列引脚,模组电路板两侧的金手指对应一列引脚。
  RDIMM:registered DIMM,带寄存器的双线内存模块
  SO-DIMM:笔记本常用的内存模组。
  工作电压:
  SDR:3.3V
  DDR:2.5V
  DDR2:1.8V
  DDR3:1.5V

ARM里的RAM和SDRAM有什么区别

RAM包括SRAM和DRAM,前者是静态随机存储器,主要是依靠触发器存储数据,无需刷新,而后者是动态随机存储器,依靠MOSFET中栅电容存储数据,需不断刷新以补充释放的电荷。由于单管就可以实现数据存储,集成度可以做到更高,功耗也更低,更为主流。需要注意的是由于刷新牵涉电容的充放电过程,DRAM的存取速度不及SRAM。

至于SDRAM,为同步动态随机存储器,属于DRAM的一种,其工作过程需要同步时钟的配合,因此可以不考虑路线延时不同的影响,避免不定态。普通的DRAM属于异步传输,存取数据时,必须等待若干个时钟以后才进行操作(考虑不定态),因为会花费较多的时间,影响了数据的传输速率。随着时钟频率的不断增高,这个瓶颈的限制就会越来越明显,SDRAM的优势也就更能体现出来。

本文转载自:电子产品世界

围观 16
1464

ROM和RAM指的都是半导体存储器,ROM是Read Only Memory的缩写,RAM是Random Access Memory的缩写。ROM在系统停止供电的时候仍然可以保持数据,而RAM通常都是在掉电之后就丢失数据,典型的RAM就是计算机的内存。

RAM有两大类:

一种称为静态RAM(Static RAM/SRAM),SRAM速度非常快,是目前读写最快的存储设备了,但是它也非常昂贵,所以只在要求很苛刻的地方使用,譬如CPU的一级缓冲,二级缓冲。

另一种称为动态RAM(Dynamic RAM/DRAM),DRAM保留数据的时间很短,速度也比SRAM慢,不过它还是比任何的ROM都要快,但从价格上来说DRAM相比SRAM要便宜很 多,计算机内存就是DRAM的。

DRAM分为很多种,常见的主要有FPRAM/FastPage、EDORAM、SDRAM、DDR RAM、RDRAM、SGRAM以及WRAM等,这里介绍其中的一种DDR RAM。

DDR RAM(Date-Rate RAM)也称作DDR SDRAM,这种改进型的RAM和SDRAM是基本一样的,不同之处在于它可以在一个时钟读写两次数据,这样就使得数据传输速度加倍了。这是目前电脑中用 得最多的内存,而且它有着成本优势,事实上击败了Intel的另外一种内存标准-Rambus DRAM。在很多高端的显卡上,也配备了高速DDR RAM来提高带宽,这可以大幅度提高3D加速卡的像素渲染能力。

内存工作原理:

内存是用来存放当前正在使用的(即执行中)的数据和程序,我们平常所提到的计算机的内存指的是动态内存(即DRAM),动态内存中所谓的"动态",指的是当我们将数据写入DRAM后,经过一段时间,数据会丢失,因此需要一个额外设电路进行内存刷新操作。

具体的工作过程是这样的:一个DRAM的存储单元存储的是0还是1取决于电容是否有电荷,有电荷代表1,无电荷代表0。但时间一长,代表1的电容会 放电,代表0的电容会吸收电荷,这就是数据丢失的原因;刷新操作定期对电容进行检查,若电量大于满电量的1/2,则认为其代表1,并把电容充满电;若电量 小于1/2,则认为其代表0,并把电容放电,藉此来保持数据的连续性。

ROM也有很多种,PROM是可编程的ROM,PROM和EPROM(可擦除可编程ROM)两者区别是,PROM是一次性的,也就是软件灌入后,就 无法修改了,这种是早期的产品,现在已经不可能使用了,而EPROM是通过紫外光的照射擦出原先的程序,是一种通用的存储器。另外一种EEPROM是通过 电子擦出,价格很高,写入时间很长,写入很慢。

举个例子,手机软件一般放在EEPROM中,我们打电话,有些最后拨打的号码,暂时是存在SRAM中的,不是马上写入通过记录(通话记录保存在EEPROM中),因为当时有很重要工作(通话)要做,如果写入,漫长的等待是让用户忍无可忍的。

FLASH存储器又称闪存,它结合了ROM和RAM的长处,不仅具备电子可擦除可编程(EEPROM)的性能,还不会断电丢失数据同时可以快速读取 数据(NVRAM的优势),U盘和MP3里用的就是这种存储器。在过去的20年里,嵌入式系统一直使用ROM(EPROM)作为它们的存储设备,然而近年 来Flash全面代替了ROM(EPROM)在嵌入式系统中的地位,用作存储Bootloader以及操作系统或者程序代码或者直接当硬盘使用(U盘)。

目前Flash主要有两种NOR Flash和NADN Flash。

NOR Flash的读取和我们常见的SDRAM的读取是一样,用户可以直接运行装载在NOR FLASH里面的代码,这样可以减少SRAM的容量从而节约了成本。

NAND Flash没有采取内存的随机读取技术,它的读取是以一次读取一块的形式来进行的,通常是一次读取512个字节,采用这种技术的Flash比较廉价。用户 不能直接运行NAND Flash上的代码,因此好多使用NAND Flash的开发板除了使用NAND Flah以外,还作上了一块小的NOR Flash来运行启动代码。

一般小容量的用NOR Flash,因为其读取速度快,多用来存储操作系统等重要信息,而大容量的用NAND FLASH,最常见的NAND FLASH应用是嵌入式系统采用的DOC(Disk On Chip)和我们通常用的"闪盘",可以在线擦除。目前市面上的FLASH 主要来自Intel,AMD,Fujitsu和Toshiba,而生产NAND Flash的主要厂家有Samsung和Toshiba。

NAND Flash和NOR Flash的比较

NOR和NAND是现在市场上两种主要的非易失闪存技术。Intel于1988年首先开发出NOR flash技术,彻底改变了原先由EPROM和EEPROM一统天下的局面。紧接着,1989年,东芝公司发表了NAND flash结构,强调降低每比特的成本,更高的性能,并且象磁盘一样可以通过接口轻松升级。但是经过了十多年之后,仍然有相当多的硬件工程师分不清NOR 和NAND闪存。

相"flash存储器"经常可以与相"NOR存储器"互换使用。许多业内人士也搞不清楚NAND闪存技术相对于NOR技术的优越之处,因为大多数情况下闪存只是用来存储少量的代码,这时NOR闪存更适合一些。而NAND则是高数据存储密度的理想解决方案。

NOR是现在市场上主要的非易失闪存技术。NOR一般只用来存储少量的代码;NOR主要应用在代码存储介质中。NOR的特点是应用简单、无需专门的 接口电路、传输效率高,它是属于芯片内执行(XIP, eXecute In Place),这样应用程序可以直接在(NOR型)flash闪存内运行,不必再把代码读到系统RAM中。在1~4MB的小容量时具有很高的成本效益,但 是很低的写入和擦除速度大大影响了它的性能。NOR flash带有SRAM接口,有足够的地址引脚来寻址,可以很容易地存取其内部的每一个字节。NOR flash占据了容量为1~16MB闪存市场的大部分。

NAND结构能提供极高的单元密度,可以达到高存储密度,并且写入和擦除的速度也很快。应用NAND的困难在于flash的管理和需要特殊的系统接口。

1、性能比较:

flash闪存是非易失存储器,可以对称为块的存储器单元块进行擦写和再编程。任何flash器件的写入操作只能在空或已擦除的单元内进行,所以大 多数情况下,在进行写入操作之前必须先执行擦除。NAND器件执行擦除操作是十分简单的,而NOR则要求在进行擦除前先要将目标块内所有的位都写为1。

由于擦除NOR器件时是以64~128KB的块进行的,执行一个写入/擦除操作的时间为5s,与此相反,擦除NAND器件是以8~32KB的块进行的,执行相同的操作最多只需要4ms。

执行擦除时块尺寸的不同进一步拉大了NOR和NADN之间的性能差距,统计表明,对于给定的一套写入操作(尤其是更新小文件时),更多的擦除操作必须在基于NOR的单元中进行。这样,当选择存储解决方案时,设计师必须权衡以下的各项因素:

● NOR的读速度比NAND稍快一些。

● NAND的写入速度比NOR快很多。

● NAND的4ms擦除速度远比NOR的5s快。

● 大多数写入操作需要先进行擦除操作。

● NAND的擦除单元更小,相应的擦除电路更少。

(注:NOR FLASH SECTOR擦除时间视品牌、大小不同而不同,比如,4M FLASH,有的SECTOR擦除时间为60ms,而有的需要最大6s。)

2、接口差别:

NOR flash带有SRAM接口,有足够的地址引脚来寻址,可以很容易地存取其内部的每一个字节。

NAND器件使用复杂的I/O口来串行地存取数据,各个产品或厂商的方法可能各不相同。8个引脚用来传送控制、地址和数据信息。

NAND读和写操作采用512字节的块,这一点有点像硬盘管理此类操作,很自然地,基于NAND的存储器就可以取代硬盘或其他块设备。

3、容量和成本:

NAND flash的单元尺寸几乎是NOR器件的一半,由于生产过程更为简单,NAND结构可以在给定的模具尺寸内提供更高的容量,也就相应地降低了价格。

NOR flash占据了容量为1~16MB闪存市场的大部分,而NAND flash只是用在8~128MB的产品当中,这也说明NOR主要应用在代码存储介质中,NAND适合于数据存储,NAND在CompactFlash、 Secure Digital、PC Cards和MMC存储卡市场上所占份额最大。

4、可靠性和耐用性:

采用flahs介质时一个需要重点考虑的问题是可靠性。对于需要扩展MTBF的系统来说,Flash是非常合适的存储方案。可以从寿命(耐用性)、位交换和坏块处理三个方面来比较NOR和NAND的可靠性。

A) 寿命(耐用性)

在NAND闪存中每个块的最大擦写次数是一百万次,而NOR的擦写次数是十万次。NAND存储器除了具有10比1的块擦除周期优势,典型的NAND块尺寸要比NOR器件小8倍,每个NAND存储器块在给定的时间内的删除次数要少一些。

B) 位交换

所有flash器件都受位交换现象的困扰。在某些情况下(很少见,NAND发生的次数要比NOR多),一个比特(bit)位会发生反转或被报告反转了。

一位的变化可能不很明显,但是如果发生在一个关键文件上,这个小小的故障可能导致系统停机。如果只是报告有问题,多读几次就可能解决了。

当然,如果这个位真的改变了,就必须采用错误探测/错误更正(EDC/ECC)算法。位反转的问题更多见于NAND闪存,NAND的供应商建议使用NAND闪存的时候,同时使用EDC/ECC算法。

这个问题对于用NAND存储多媒体信息时倒不是致命的。当然,如果用本地存储设备来存储操作系统、配置文件或其他敏感信息时,必须使用EDC/ECC系统以确保可靠性。

C) 坏块处理

NAND器件中的坏块是随机分布的。以前也曾有过消除坏块的努力,但发现成品率太低,代价太高,根本不划算。

NAND器件需要对介质进行初始化扫描以发现坏块,并将坏块标记为不可用。在已制成的器件中,如果通过可靠的方法不能进行这项处理,将导致高故障率。

5、易于使用:

可以非常直接地使用基于NOR的闪存,可以像其他存储器那样连接,并可以在上面直接运行代码。

由于需要I/O接口,NAND要复杂得多。各种NAND器件的存取方法因厂家而异。

在使用NAND器件时,必须先写入驱动程序,才能继续执行其他操作。向NAND器件写入信息需要相当的技巧,因为设计师绝不能向坏块写入,这就意味着在NAND器件上自始至终都必须进行虚拟映射。

6、软件支持:

当讨论软件支持的时候,应该区别基本的读/写/擦操作和高一级的用于磁盘仿真和闪存管理算法的软件,包括性能优化。

在NOR器件上运行代码不需要任何的软件支持,在NAND器件上进行同样操作时,通常需要驱动程序,也就是内存技术驱动程序(MTD),NAND和NOR器件在进行写入和擦除操作时都需要MTD。

使用NOR器件时所需要的MTD要相对少一些,许多厂商都提供用于NOR器件的更高级软件,这其中包括M-System的TrueFFS驱动,该驱 动被Wind River System、Microsoft、QNX Software System、Symbian和Intel等厂商所采用。

驱动还用于对DiskOnChip产品进行仿真和NAND闪存的管理,包括纠错、坏块处理和损耗平衡。

NOR FLASH的主要供应商是INTEL ,MICRO等厂商,曾经是FLASH的主流产品,但现在被NAND FLASH挤的比较难受。它的优点是可以直接从FLASH中运行程序,但是工艺复杂,价格比较贵。

NAND FLASH的主要供应商是SAMSUNG和东芝,在U盘、各种存储卡、MP3播放器里面的都是这种FLASH,由于工艺上的不同,它比NOR FLASH拥有更大存储容量,而且便宜。但也有缺点,就是无法寻址直接运行程序,只能存储数据。另外NAND FLASH 非常容易出现坏区,所以需要有校验的算法。

在掌上电脑里要使用NAND FLASH 存储数据和程序,但是必须有NOR FLASH来启动。除了SAMSUNG处理器,其他用在掌上电脑的主流处理器还不支持直接由NAND FLASH 启动程序。因此,必须先用一片小的NOR FLASH 启动机器,在把OS等软件从NAND FLASH 载入SDRAM中运行才行,挺麻烦的。

DRAM 利用MOS管的栅电容上的电荷来存储信息,一旦掉电信息会全部的丢失,由于栅极会漏电,所以每隔一定的时间就需要一个刷新机构给这些栅电容补充电荷,并且 每读出一次数据之后也需要补充电荷,这个就叫动态刷新,所以称其为动态随机存储器。由于它只使用一个MOS管来存信息,所以集成度可以很高,容量能够做的 很大。SDRAM比它多了一个与CPU时钟同步。

SRAM 利用寄存器来存储信息,所以一旦掉电,资料就会全部丢失,只要供电,它的资料就会一直存在,不需要动态刷新,所以叫静态随机存储器。

以上主要用于系统内存储器,容量大,不需要断电后仍保存数据的。

Flash ROM 是利用浮置栅上的电容存储电荷来保存信息,因为浮置栅不会漏电,所以断电后信息仍然可以保存。也由于其机构简单所以集成度可以做的很高,容量可以很大。 Flash rom写入前需要用电进行擦除,而且擦除不同与EEPROM可以以byte(字节)为单位进行,flash rom只能以sector(扇区)为单位进行。不过其写入时可以byte为单位。flash rom主要用于bios,U盘,Mp3等需要大容量且断电不丢数据的设备。

PSRAM,假静态随机存储器。

背景:

PSRAM具有一个单晶体管的DRAM储存格,与传统具有六个晶体管的SRAM储存格或是四个晶体管与two-load resistor SRAM 储存格大不相同,但它具有类似SRAM的稳定接口,内部的DRAM架构给予PSRAM一些比low-power 6T SRAM优异的长处,例如体积更为轻巧,售价更具竞争力。目前在整体SRAM市场中,有90%的制造商都在生产PSRAM组件。在过去两年,市场上重要的 SRAM/PSRAM供货商有Samsung、Cypress、Renesas、Micron与Toshiba等。

基本原理:

PSRAM就是伪SRAM,内部的内存颗粒跟SDRAM的颗粒相似,但外部的接口跟SRAM相似,不需要SDRAM那样复杂的控制器和刷新机制,PSRAM的接口跟SRAM的接口是一样的。

PSRAM容量有8Mbit,16Mbit,32Mbit等等,容量没有SDRAM那样密度高,但肯定是比SRAM的容量要高很多的,速度支持突发 模式,并不是很慢,Hynix,Coremagic, WINBOND .MICRON. CY 等厂家都有供应,价格只比相同容量的SDRAM稍贵一点点,比SRAM便宜很多。

PSRAM主要应用于手机,电子词典,掌上电脑,PDA,PMP.MP3/4,GPS接收器等消费电子产品与SRAM(采用6T的技术)相 比,PSRAM采用的是1T+1C的技术,所以在体积上更小,同时,PSRAM的I/O接口与SRAM相同.在容量上,目前有 4MB,8MB,16MB,32MB,64MB和128MB。比较于SDRAM,PSRAM的功耗要低很多。所以对于要求有一定缓存容量的很多便携式产品 是一个理想的选择。

转自: Andrew_qian

围观 29
1202

随着智能手机的发展,不管是看手机配置还是经常在生活中与网络中都经常听人有人讨论一些词。比如手机RAM多少或者ROM多少等等。可能大家都知道不管是ROM还是RAM越大越好,但对于ROM和RAM是什么意思以及两者之间的区别却不了解。

简单的说,一个完整的计算机系统是由软件和硬件组成的。其中,硬件部分由中央处理单元CPU(包括运算器和控制器)、存储器和输入/输出设备构成。目前个人电脑上使用的主板一般只能支持到1GB的内存,即使是INTEL目前最高阶的450NX芯片组也只能支持到4GB。

单片机的一个主要作用就是数据信息的处理,而在处理数据的过程中,需要一些“容器”来存放这些数据。这就好比烧饭要用到锅碗瓢盆一样。在这里,我们称这些“容器”为“存储器”。

存储器的物理实质是一组(或多组)具备数据输入/输出和数据存储功能的集成电路,用于充当设备缓存或保存同定的程序及数据。存储器按存储信息功能的不同,可分为只读存储器ROM和随机存储器RAM

RAM

RAM是指通过指令可以随机的、个别的对各个存储单元进行访问的存储器,一般访问时间基本固定,而与存储单元地址无关。RAM的速度比较快,但其保存的信息需要电力支持,一旦丢失供电即数据消失,所以又叫易失性存储器,还有一种很有趣的叫法是“挥发性存储器”,当然这里“挥发”掉的是数据而不是物理上的芯片。在51单片机中,RAM主要用来保存数据、中间结果和运行程序等,所以也把RAM叫做数据存储器。

ROM

ROM英文概念是 Read Only Memory,只读式存储器,在计算机中,是一种类型的内存。此类型内存常被用于存储重要的或机密的数据。理想上认为,此种类型的内存是只能读取,而不允许擦写。在51单片机中,ROM一般用来存放常数、数据表格、程序代码等,所以也叫做程序存储器

ROM和RAM区别

至于ROM与RAM的主要区别相信大家也已经想到了。在手机中,RAM是指手机内存,属于手机内部存储器,属于随机存储,速度高于ROM,对于手机配置性能起着重要的决定性,另外掉电后,数据被清空,比如手机运行着QQ与其它软件,重启手机后,软件就没有处于登录状态,这点也比较好理解吧。

嵌入式中,ROM和RAM到底有何不同?
  

而ROM则属于外部存储,比如我们经常可以购买SD卡放入手机里面,则就是手机ROM,手机ROM就是我们通常说的存储卡,也可以简单的理解成手机硬盘吧。用来存储手机系统文件、图片、电影等等,不会随着掉电而丢失数据,ROM越大存储的数据就越多。

ROM存放指令代码和一些固定数值,程序运行后不可改动;RAM用于程序运行中数据的随机存取,掉电后数据消失。。

ROM即只读存储器。ROM中的信息一次写入后只能被读出,而不能被操作者修改或删除。一般用于存放固定的程序或数据表格等。

不能被操作者修改或删除。一般用于存放固定的程序或数据表格等。

当然,“只读”这个“传统”的概念有时是可以被一些新特性的器件颠覆的。下面介绍的这两种类型的ROM就可以使用适当的方法进行擦除或改写。

1.EPROM

EPROM 与一般的ROM的不同点在于,它可以用特殊的装置擦除或重写其中的内容。

2.闪存FLASH

闪速存储器,又称PEROM, 它是完全非易失的,可以在线写入,并且可以按页连续字节写入,读出速度快。

RAM即随机存储器。这就是我们平常所说的内存,主要用来存放各种现场的输入/输出数据、中间计算结果,以及与外部存储器交换信息,或是作堆桟用。它的存储单元根据具体需要可以读出或改写。

RAM只能用于暂时存放程序和数据。一旦电源关闭或发生断电,RAM中的数据就会丢失。而ROM中的数据在电源关闭或断电后仍然会保留下来。这也许就是二者最大的区别吧。

来源: eepw.com

围观 22
1641

常见存储器概念:RAM、SRAM、SDRAM、ROM、EPROM、EEPROM、Flash。存储器可以分为很多种类,其中根据掉电数据是否丢失可以分为RAM(随机存取存储器)和ROM(只读存储器),其中RAM的访问速度比较快,但掉电后数据会丢失,而ROM掉电后数据不会丢失。

在单片机中,RAM主要是做运行时数据存储器,FLASH主要是程序存储器,EEPROM主要是用以在程序运行保存一些需要掉电不丢失的数据。

FLASH:单片机运行的程序存储的地方。

SRAM:存储单片机运行过程中产生的了临时数据。

EEPROM:视用户的需要而定,一般用来存储系统的一些参数,这些参数可能需要修改,也可能不会修改。

ROM和RAM指的都是半导体存储器,ROM是Read Only Memory的缩写,RAM是Random Access Memory的缩写。ROM在系统停止供电的时候仍然可以保持数据,而RAM通常都是在掉电之后就丢失数据,典型的RAM就是计算机的内存。另外,一些变量,都是放到RAM里的,一些初始化数据比如液晶要显示的内容界面,都是放到FLASH区里的(也就是以前说的ROM区),EEPROM可用可不用,主要是存一些运行中的数据,掉电后且不丢失

RAM 又可分为SRAM(Static RAM/静态存储器)和DRAM(Dynamic RAM/动态存储器)。SRAM 是利用双稳态触发器来保存信息的,只要不掉电,信息是不会丢失的。DRAM是利用MOS(金属氧化物半导体)电容存储电荷来储存信息,因此必须通过不停的给电容充电来维持信息,所以DRAM 的成本、集成度、功耗等明显优于SRAM。 SRAM速度非常快,是目前读写最快的存储设备了,但是它也非常昂贵,所以只在要求很苛刻的地方使用,譬如CPU的一级缓冲,二级缓冲。DRAM保留数据的时间很短,速度也比SRAM慢,不过它还是比任何的ROM都要快,但从价格上来说DRAM相比SRAM要便宜很多,计算机内存就是DRAM的。

内存工作原理:内存是用来存放当前正在使用的(即执行中)的数据和程序,我们平常所提到的计算机的内存指的是动态内存(即DRAM),动态内存中所谓的"动态",指的是当我们将数据写入DRAM后,经过一段时间,数据会丢失,因此需要一个额外设电路进行内存刷新操作。

具体的工作过程是这样的:一个DRAM的存储单元存储的是0还是1取决于电容是否有电荷,有电荷代表1,无电荷代表0。但时间一长,代表1的电容会放电,代表0的电容会吸收电荷,这就是数据丢失的原因;刷新操作定期对电容进行检查,若电量大于满电量的1/2,则认为其代表1,并把电容充满电;若电量小于1/2,则认为其代表0,并把电容放电,藉此来保持数据的连续性。

而通常人们所说的SDRAM 是DRAM 的一种,它是同步动态存储器,利用一个单一的系统时钟同步所有的地址数据和控制信号。使用SDRAM不但能提高系统表现,还能简化设计、提供高速的数据传输。在嵌入式系统中经常使用。

ROM也有很多种,PROM是可编程的ROM,PROM和EPROM(可擦除可编程ROM)两者区别是,PROM是一次性的,也就是软件灌入后,就无法修改了,这种是早期的产品,现在已经不可能使用了,而EPROM是通过紫外光的照射擦出原先的程序,是一种通用的存储器。另外一种EEPROM是通过电子擦出,价格很高,写入时间很长,写入很慢。手机软件一般放在EEPROM中,我们打电话,有些最后拨打的号码,暂时是存在SRAM中的,不是马上写入通过记录(通话记录保存在EEPROM中),因为当时有很重要工作(通话)要做,如果写入,漫长的等待是让用户忍无可忍的。

Flash也是一种非易失性存储器(掉电不会丢失),它擦写方便,访问速度快,已大大取代了传统的EPROM的地位。由于它具有和ROM一样掉电不会丢失的特性,因此很多人称其为Flash ROM。FLASH存储器又称闪存,它结合了ROM和RAM的长处,不仅具备电子可擦出可编程(EEPROM)的性能,还不会断电丢失数据同时可以快速读取数据(NVRAM的优势),U盘和MP3里用的就是这种存储器。在过去的20年里,嵌入式系统一直使用ROM(EPROM)作为它们的存储设备,然而近年来Flash全面代替了ROM(EPROM)在嵌入式系统中的地位,用作存储bootloader以及操作系统或者程序代码或者直接当硬盘使用(U 盘)。

目前Flash主要有两种NOR Flash和NADN Flash。NOR Flash的读取和我们常见的SDRAM的读取是一样,用户可以直接运行装载在NOR FLASH里面的代码,这样可以减少SRAM的容量从而节约了成本。NAND Flash没有采取内存的随机读取技术,它的读取是以一次读取一快的形式来进行的,通常是一次读取512个字节,采用这种技术的Flash比较廉价。用户不能直接运行NAND Flash上的代码,因此好多使用NAND Flash的开发板除了使用NAND Flah以外,还作上了一块小的NOR Flash来运行启动代码。

一般小容量的用NOR Flash,因为其读取速度快,多用来存储操作系统等重要信息,而大容量的用NAND FLASH,最常见的NAND FLASH应用是嵌入式系统采用的DOC(Disk On Chip)和我们通常用的“闪盘”,可以在线擦除。目前市面上的FLASH 主要来自Intel,AMD,Fujitsu和Toshiba,而生产NAND Flash的主要厂家有Samsung和Toshiba。

转自: http://www.cnblogs.com/yuandongtao1989/p/6674276.html

围观 30
1232

其实关于Flash调试和RAM调试的概念,我也是从调试Kinetis的时候才开始接触,最初只是随便用用,没有深究,之后用的多了才开始深入研究两者之间的区别,发现里面大有文章可作,这也是我为什么后来又把本文的前缀改成【原创精品】的缘故,翻看了网上的一些资料,大多是授人以鱼的文章,所以觉着有必要在这里谈谈自己的一点看法,做个笔记。

最近一直埋头于毕业论文的撰写当中,真是有种“两耳不闻窗外事,一心只写毕业论文”的感觉啊。成天大眼对小眼地面对着word、viso和知网客户端等等文字编辑工具真是有种麻木的赶脚,不写论文不知道,一写论文吓一跳,感觉让我写上几万行代码也比坐在电脑面前憋出几万字论文来的轻巧,“问君能有几多愁,恰似一江春水向东流”,哎,突然间发现,人生最最痛苦的不是人死了钱没花了,而是写了十几天的论文才发现,晕,还有一多半没写呢,不过木有办法,只能硬着头皮上了,再此之前还是更篇博客为好,不然该沉底落灰了(话说貌似断更了好长时间了,不过幸好不是写小说,不然该被拍砖了),哈哈~

闲话少说,下面进入正题。其实关于Flash调试和RAM调试的概念,我也是从调试Kinetis的时候才开始接触,最初只是随便用用,没有深究,之后用的多了才开始深入研究两者之间的区别,发现里面大有文章可作,这也是我为什么后来又把本文的前缀改成【原创精品】的缘故,翻看了网上的一些资料,大多是授人以鱼的文章,所以觉着有必要在这里谈谈自己的一点看法,做个笔记:


上图为在IAR环境下的Flash调试界面和RAM调试界面

首先说说什么是Flash调试和RAM调试,Flash调试就是通常意义下的普通调试,即将编译链接之后的code下载到单片机的ROM区,数据放到RAM区,然后进行调试;而RAM调试则是将数据放到RAM区的同时再从RAM区中额外开辟出一段空间存放可执行code,这样就是code和数据同时运行在RAM区里面。

至于为什么要刻意区分出这两种调试方式,其实在低端MCU领域是没有RAM调试这个概念的,其中很大一部分原因是它没有足够大的RAM空间在存放编译后code代码的同时仍然可以拿出额外的空间作为数据RAM的,而在高端MCU领域中,比如ARM,动辄几十KB的RAM是很常见的,在不运行超大工程的情况下是完全可以拿出一部分空间运行代码的,所以也就出现了RAM调试这种方法了。

相比于Flash调试,RAM调试则与生俱来的带来两个最大的先天优势,一个是RAM的可擦写的次数理论上是无限的,在调试代码的期间我们往往是需要不断下载更新的,而Flash的擦写次数是有限的(一般几万次、几十万次不等,虽然看起来足够多,但是也心疼的慌),因此在调试期间我们可以选择RAM调试;另一个方面,则更是RAM调试的强项(Flash真够悲催的),在RAM区的代码执行速率和效率远高于需要不断地读写Flash区代码的,这点毋庸置疑,所以在当今智能手机比拼硬件的时代,我们选择一款强大的CPU是应该的,但是要想让系统运行的更流畅,足够大的机载RAM是必须的,呵呵。当然RAM调试的缺点是掉电丢失,在RAM区运行的代码在掉电的情况下是不会被保存的,下次上电单片机仍然会执行Flash区内部的老的代码,这点是需要注意的,很多人忘记考虑这点,在RAM调试功能完毕,等拿到现场单片机独立运行的时候却发现程序是不对的,咳咳,那当然不对啦。。。

理论部分介绍完毕,下面我们结合IAR开发环境来分析一下怎么实现Flash调试和RAM调试的。其实我们仔细研究发现,Flash调试和RAM调试在IAR下的区别只是.icf配置文件的不同罢了,其实很简单很容易理解,也就是把单片机的内存映射改变了,下面单拿出两者不同的部分晒出来(重要部分加了注释,供参考):

flash调试的256KB_Pflash.icf文件:

/*-Specials-*/
define symbol __ICFEDIT_intvec_start__ = 0x00000000;/* 中断向量的起始地址为ROM的首地址 */
/*-Memory Regions-*/
define symbol __ICFEDIT_region_ROM_start__ = 0x0;
define symbol __ICFEDIT_region_ROM_end__ = 0x00040000;/* 256k ROM空间 */
define symbol __ICFEDIT_region_RAM_start__ = 0x1fff8410;
define symbol __ICFEDIT_region_RAM_end__ = 0x20000000;

define exported symbol __VECTOR_TABLE = 0x00000000;/* 中断向量表放在ROM区0起始地址 */
define exported symbol __VECTOR_RAM = 0x1fff8000;

define symbol __code_start__ = 0x00000410;/* 代码开始区地址在ROM区 */

place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec };
place at address mem:__code_start__ { readonly section .noinit };

place in ROM_region { readonly, block CodeRelocate}; /* 将只读代码放到ROM区 */

place in RAM_region { readwrite, block CodeRelocateRam,
block CSTACK, block HEAP };
RAM调试的64k_ram.icf文件:

/*-Specials-*/
define symbol __ICFEDIT_intvec_start__ = 0x1fff8000;/* 中断向量的起始地址为RAM的首地址 */
/*-Memory Regions-*/
define symbol __ICFEDIT_region_ROM_start__ = 0x0;
define symbol __ICFEDIT_region_ROM_end__ = 0x0;/* 将ROM空间置0 */
define symbol __ICFEDIT_region_RAM_start__ = 0x1fff8000;
define symbol __ICFEDIT_region_RAM_end__ = 0x20000000;

define exported symbol __VECTOR_TABLE = 0x1fff8000;/* 中断向量表放在RAM区首地址 */
define exported symbol __VECTOR_RAM = 0x1fff8000;

define symbol __code_start__ = 0x1fff8410;/* 将代码开始区地址在RAM区 */

place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec };
place at address mem:__code_start__ { readonly section .noinit };

place in RAM_region { readonly, block CodeRelocate }; /* 将只读代码放到RAM区 */

place in RAM_region { readwrite, block CodeRelocateRam,
block CSTACK, block HEAP };

上面的代码我就不多做详细解释了,通过注释和对比估计大多数博友应该会理解了,不明白的地方欢迎下面留言共同探讨。

作者:jicheng0622博客。

围观 17
1219

一、内部RAM

共256个单元,用户使用前128个单元,用于存放可读写数据,后128个单元被专用寄存器占用。

前128单元具体分为:

1、工作寄存器区:共4个组,每组为8个存储单元,即00H-07H,08H-0FH,10H-17H,18H-1FH,具体选择哪一个由程序状态字(PSW)中的RS1和RS0的组合决定(在此我就不展开了,呵呵……)

2、位寻址区:20H-2FH,共16个单元,每一位可以进行位寻址(16*8=128个位地址),就是每一个触发位,就是bit可以寻址

3、便笺区:从30H-7FH,共80个单元,用于存放用户数据或作堆栈区使用。

4、从80H-FFH为专用寄存器占用,其中还离散的分布SFR(21个特殊功能寄存器)

二、256B

其中00H~7FH

可分为3个区域:

00H~1FH 是通用寄存器区

20H~2FH 是位寻址区

30H~7FH 是用户RAM区

80H~FFH是特殊功能寄存器区

三、AT89S51单片机的ram,只有128字节,地址范围:00H~7FH。

SFR不是RAM,是特殊功能寄存器,地址范围:80H~FFH,SFR在其中离散分布着。

AT89S52单片机的ram,就有256字节,地址范围:00H~FFH。

SFR,特殊功能寄存器,仍然在地址范围:80H~FFH。

两者的地址重叠了,区别方法如下:

对80H~FFH直接寻址,就是读写SFR,特殊功能寄存器;

对80H~FFH间接寻址,就是读写RAM。

先说说这几个词是什么意思:

1,DATA,51的内部RAM,只有128B(字节)大小,不管是最新的什么增强型单片机;

2,XDATA,外部RAM,只能使用MOVX寻址

3,CODE,代码区,即是你的代码的大小,AT89C51为4K,C52为8K等,增强型的有更多的选择。

然后说明一下,几种RAM的区别:

1,DATA,也是上面1提到的DATA RAM,占51的128B;

2,IDATA,大小也为128B,与DATA构成256字节的内存(如AT89C52)

3,PDATA,外部RAM的前256B(就是一个页的大小),是XDATA的一部分;

4,XDATA,外部RAM

所以你的那个单片机的1280B,其实组成为:

DATA :128B

IDATA:128B

XDATA:1024B

所以你的问题,“使用片内RAM”打勾只是软件仿真用的;你的XDATA用了758B,说明你特意用XDATA关键字定了这么大的内存,比如大数组或者内存模式时,使用了lager模式,那么编译器会自动把超出的部分放到XDATA里,我猜你应该是这里选择了lager模式,不过你的内容这么大,也只能选择lager模式。

来源:互联网

围观 47
667
订阅 RSS - RAM