嵌入式平台 RAM与ROM区分

本文深入解析ROM、RAM、NOR Flash及NAND Flash等存储器技术。探讨了各种存储器的特点,如ROM的非易失性,RAM的高速读写,NOR Flash的XIP能力,以及NAND Flash的大容量和高效擦写。同时,对比了NOR Flash与NAND Flash在性能、可靠性、用途及价格上的区别。

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

 

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

 

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

 

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,并把电容放电,藉此来保持数据的连续性。

 

NAND Flash和NOR Flash的比较

 

常用的Flash类型有:NOR Flash和NAND Flash两种。NOR Flash由Intel公司在1988年发明,以替代当时在市场上占据主要地位的EPROM和EEPROM。NANDFlash由Toshiba公司在1989年发明。两者的主要差别如下表所示。

 

                       

 

NOR

NAND

容量

1~32MB

16~512MB

XIP

Yes

No

性能

擦除

非常慢(5s)

快(3ms)

可靠性

比较高,位反转的比例小于NAND Flash 的10%

比较低:,位反转比较常见,必需有校验措施,比如“1-4 bit EDC/ECC”;必须有坏块管理措施

可擦除次数

10000~100000

100000~1000000

生命周期

低于NAND Flash的10%

是NOR Flash的10倍以上

接口

与RAM接口相同

I/O接口

访问方法

随机访问

顺序访问

易用性

容易

复杂

主要用途

常用于保存代码和关键数据

用于保存数据

价格

 NOR/NAND Flash的差别

 

NOR Flash支持XIP,即代码可以直接在NOR Flash上执行,无需拷贝到内存中。这是由于NOR Flash的接口与RAM完全相同,可以随机访问任意地址的数据。在NOR Flash上进行读操作的效率非常高,但是擦除和写操作的效率很低;另外,NOR Flash的容量一般比较小。

 

NAND Flash进行擦除和写操作的效率更高,并且容量更大。一般而言,NOR Flash用于存储程序,NAND Flash用于存储数据。基于NAND Flash的设备通常也要搭配NOR Flash以存储程序。

 

Flash存储器件由擦除单元(也称为块)组成,当要写某个块时,需要确保这个块已经被擦除。NOR Flash的块大小范围为64KB~128KB;NAND Flash的块大小范围为8KB~64KB,擦/写一个NOR Flash块需4S,而擦/写一个NAND Flash块仅需2ms。

 

NOR Flash的块太大,不仅增加了擦写时间,对于给定的写操作,NOR Flash也需要更多的擦除操作——特别是小文件,比如一个文件只有1KB,但是为了保存它却需要擦除大小为64KB~128KB的NOR Flash块。

 

NOR Flash的接口与RAM完全相同,可以随意访问任意地址的数据。而NAND Flash的接口仅仅包含几个I/O引脚,需要串行地访问。NAND Flash一般以512字节为单位进行读写。这使得NOR Flash适合于运行程序,而NAND Flash更适合于存储数据。

 

容量相同的情况下,NAND Flash的体积更小,对于空间有严格要求的系统,NAND Flash可以节省更多空间。市场上NOR Flash的容量通常为1~4MB(也有32MB的NOR Flash),NANDFlash的容量为8~512MB。容量的差别也使得NOR Flash多用于存储程序,NAND Flash多用于存储数据。

 

对于Flash存储器件的可靠性需要考虑3点:位反转、坏块和可擦除次数。所有Flash器件都遭遇位反转的问题:由于FLASH固有的电器特性,在读写数据过程中,偶然会产生一位或几位数据错误——这种概率很低,而NAND Flash出现的概率远大于NOR Flash。当位反转发生在关键的代码、数据上时,有可能导致系统崩溃。

 

当仅仅是报告位反转,重新读取即可;如果确实发生了位反转,则必须有相应的错误检测/恢复措施。在NAND Flash上发生位反转的概率更高,推荐使用EDC/ECC进行错误检测和恢复。

 

NAND Flash上面会有坏块随机分布,在使用前需要将坏块扫描出来,确保不再使用它们,否则会使产品含有严重的故障。NAND Flash每块的可擦除次数通常在100000次左右,是NOR Flash的10倍。另外,因为NAND Flash的块大小通常是NOR Flash的1/8,所以NAND Flash的寿命远远超过NOR Flash。

 

linux对NOR、NAND Flash的软件支持都很成熟。在NOR Flash上常用jffs2文件系统,而在NAND Flash上常用yaffs文件系统。在更底层,有MTD驱动程序实现对它们的读、写、擦除操作,它也实现了EDC/ECC校验。

 

 

转自百问网

 

 

 

转载于:https://www.cnblogs.com/CZM-/p/9610975.html

<think>我们被要求解释RAMROM的基本概念及其在嵌入式系统中的应用,并区分它们在嵌入式系统中的使用场景。参考了提供的引用材料,我们可以总结如下:###RAM(随机存取存储器)-**基本概念**:RAM是一种易失性存储器,只有在电源存在时才能保持数据。它可以随机读写数据,读写速度快。在嵌入式系统中,RAM主要用于存储运行时的临时数据,如变量、堆栈、缓存等。-**应用场景**:-**运行内存**:存储正在运行的程序和操作系统的临时数据。-**缓存**:作为CPU和存储设备之间的缓冲区,提高数据访问速度。-**变量存储**:程序运行过程中使用的全局变量、局部变量等。-**堆栈**:存储函数调用时的返回地址、局部变量等。###ROM(只读存储器)-**基本概念**:ROM是一种非易失性存储器,即使断电数据也不会丢失。在嵌入式系统中,ROM通常用于存储固件、启动代码、常量数据等。现代嵌入式系统中,ROM通常由Flash存储器(如NORFlash、NANDFlash)实现,因为它们可以电擦写,但本质上仍属于ROM的范畴。-**应用场景**:-**固件存储**:存储嵌入式系统的固件程序(如Bootloader、操作系统内核、应用程序代码)。-**启动代码**:系统上电后首先执行的代码(存储在ROM中)。-**常量数据**:如查找表、配置参数、字体库等不变的数据。###RAMROM的主要区别|特性|RAM|ROM||--------------|------------------------------|------------------------------||**易失性**|易失性(断电数据丢失)|非易失性(断电数据保留)||**读写能力**|可读可写|通常只读,但有些类型可编程||**速度**|读写速度快|读速度较快,写速度较慢||**用途**|运行时数据存储|存储固件和常量||**成本**|单位成本较高|单位成本较低|###在嵌入式系统中的使用场景1.**启动过程**:-系统上电后,CPU首先从ROM(通常是Flash)中读取启动代码(Bootloader)并执行。-Bootloader将应用程序代码从ROM加载到RAM中,然后跳转到RAM中执行(因为RAM的访问速度更快)。2.**程序执行**:-程序代码通常存储在ROM中(如Flash),但执行时会拷贝到RAM中运行(尤其是需要快速执行的代码)。-但是,有些嵌入式系统(如基于哈佛架构的微控制器)可以直接从Flash(ROM)执行代码,无需先加载到RAM,这称为XIP(eXecuteInPlace)技术。3.**数据存储**:-常量数据(如配置参数、字符串常量)通常存储在ROM中。-变量、堆栈、堆等运行时数据则存储在RAM中。4.**固件更新**:-ROM(特别是Flash)允许固件更新,嵌入式系统可以通过特定的接口(如UART、USB、OTA)更新ROM中的固件。###嵌入式系统中常见的存储器类型根据引用[2],嵌入式系统中常见的存储器包括:-**RAM类型**:SRAM(静态RAM)、DRAM(动态RAM)、SDRAM(同步DRAM)、DDRRAM(双倍数据速率RAM)。-**ROM类型**:PROM(可编程ROM)、EPROM(可擦除可编程ROM)、EEPROM(电可擦除可编程ROM)、Flash(包括NORFlash和NANDFlash)、eMMC(嵌入式多媒体卡,基于NANDFlash)。###总结在嵌入式系统设计中:-**ROM**(通常由Flash实现)用于存储固件和常量数据,确保系统掉电后程序不丢失。-**RAM**用于提供程序运行时的临时存储空间,其高速读写特性保证了系统的运行效率。合理配置ROMRAM的大小和类型,是嵌入式系统设计的关键。例如,复杂的系统可能需要大容量的SDRAM和NANDFlash,而简单的微控制器系统可能只需要片内Flash和SRAM。§§相关问题§§1.嵌入式系统中如何优化RAM的使用?2.Flash存储器(如NORFlash和NANDFlash)在嵌入式系统中有哪些具体应用?3.嵌入式系统启动过程中ROMRAM分别扮演什么角色?4.如何为嵌入式系统选择合适的存储器(ROMRAM)?5.嵌入式系统中如何实现固件更新(使用ROM)?</think>### RAMROM的基本概念及区别 #### **1. RAM(随机存取存储器)** - **本质特性**: - **易失性存储**:断电后数据丢失[^4] - **高速读写**:访问速度通常在纳秒级 - **随机存取**:可直接访问任意地址数据 - **物理结构**: ```mermaid graph LR A[RAM单元] --> B[存储电容] A --> C[控制晶体管] ``` 通过电容电荷存储数据(DRAM)或触发器锁存数据(SRAM) - **嵌入式应用场景**: - **程序运行时内存**:存储正在执行的代码和临时变量[^3] - **数据缓存区**:如DMA传输缓冲区、通信数据暂存区 - **操作系统堆栈**:函数调用栈和动态内存分配 - **实时数据处理**:ADC采集数据暂存、图像处理帧缓存 #### **2. ROM(只读存储器)** - **本质特性**: - **非易失性存储**:断电后数据永久保存[^1] - **写保护机制**:通常需特殊操作才能修改数据 - **高可靠性**:抗干扰能力强,寿命长达10万次擦写 - **物理结构**: ```mermaid graph TB D[ROM单元] --> E[浮栅晶体管] E --> F[电子隧穿效应] ``` 通过浮栅捕获电子实现数据存储(如Flash) - **嵌入式应用场景**: - **固件存储**:存储启动代码(Bootloader)和应用程序[^2] - **常量数据**:字体库、校准参数、配置表 - **安全密钥**:存储加密证书和身份标识 - **固件备份区**:保留系统恢复镜像 --- ### 核心区别对比表 | 特性 | RAM | ROM | |--------------|-------------------------|-------------------------| | **数据保持** | 需持续供电[^4] | 断电保留[^1] | | **读写速度** | 高速(ns级) | 中低速(μs级) | | **改写能力** | 无限次写 | 有限次写(Flash) | | **成本** | 高($/bit) | 低($/bit) | | **功耗** | 动态刷新耗电(DRAM) | 静态接近零功耗 | | **典型器件** | SRAM/DRAM/DDR | NOR/NAND Flash/EEPROM | --- ### 嵌入式系统中的协同工作模式 #### **系统启动流程(ROMRAM)** ```mermaid sequenceDiagram participant CPU participant ROM participant RAM CPU->>ROM: 上电读取Bootloader ROM-->>CPU: 返回初始化代码 CPU->>RAM: 加载应用程序 CPU->>RAM: 创建堆栈/变量区 loop 运行周期 CPU->>RAM: 读写运行数据 CPU->>ROM: 读取常量/代码段 end ``` #### **典型配置案例(GD32F303)** ```c // ROM中的固件代码(不可修改) const uint32_t CALIB_TABLE[] __attribute__((section(".rodata"))) = {0x3A5F, 0x8C21}; // RAM中的运行时变量 uint32_t adc_buffer[256] __attribute__((section(".sram"))); void main() { // 1. 从ROM加载校准表 uint32_t calib_val = CALIB_TABLE[0]; // 2. 在RAM中处理数据 adc_buffer[0] = read_adc(); // 3. DMA将RAM数据写入外设 dma_transfer(adc_buffer, &USART0->TXDATA); } ``` **关键配置**: 1. 链接脚本划分存储区域: ```ld MEMORY { ROM (rx) : ORIGIN = 0x08000000, LENGTH = 256K RAM (rwx): ORIGIN = 0x20000000, LENGTH = 64K } ``` 2. 启动文件初始化.data段(ROMRAM拷贝) 3. 编译器属性指定存储位置 --- ### 选型设计原则 1. **ROM选型考量**: - 启动速度要求 → 选择**NOR Flash**(XIP支持) - 大容量存储 → 选择**NAND Flash** - 小数据频繁修改 → 选择**EEPROM** 2. **RAM选型考量**: - 高速缓存 → **SRAM**(<1MB) - 大容量需求 → **SDRAM/DDR**(>1MB) - 超低功耗 → **PSRAM**(伪静态RAM) 3. **混合使用策略**: - 关键代码在ROM执行(XIP模式) - 高频代码拷贝到RAM执行(加速20-50%)[^3] - 使用RAM磁盘缓存ROM数据 > 典型嵌入式系统存储分布: > $$ \text{ROM} : \text{RAM} ≈ 4:1 \quad \text{(如512KB Flash + 128KB SRAM)} $$ ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值