捋清楚MCU上内存的分类和关系

从功能上进行分类,MCU一共需要两种存储资源:


 

ROM-用于存储运行程序

Flash闪存

        ROM的一种,有RAM和ROM的优势,掉电不会丢失数据,可电擦除数据;

分类:
NORFlash

        代码可以直接在NORFlash上运行,NORFlash数据线和地址线分开,可以像RAM实现随机寻址,读取任意一个字节,可以节省SRAM的容量,但是擦除需要按块擦除;

        分析:是否NORFlash能够完全替代SRAM?

        不能, NORFlash+SRAM一般为互补的组合方案,NORFlash的写入和擦除速度较慢,难以替代SRAM;

        NORFlash一般用于存储运行程序,SRAM用于存储需要频繁读写的数据,组合使用;

NandFlash

        按块读取擦写,一块一般为512Byte,一般用于存储系统固件和用户配置信息,NAND Flash不支持XIP(eXecute In Place,本地执行)功能。这意味着代码不能直接在NAND Flash中执行,而需要先被加载到RAM中,然后由CPU从RAM中取指、译码和执行。

固态硬盘使用的就是NandFlash

RAM-用于存储程序运行时的数据

按存储器用途分类:

IRAM(指令RAM)
DRAM(数据RAM)注意区别动态DRAM
D/IRAM(既可作指令RAM又可作数据RAM)
 

按存储器的类型和实现方式分类:

DRAM(Dynamic RAM):动态RAM

        数据保留时间短,需要一直进行电路刷新电路才能保存数据,SRAM>速率>ROM,但是比SRAM便宜很多;

SRAM(Static RAM):静态RAM

        传输速率很快,只要一直上电就可以保持数据,无需刷新电路,集成度低,贵;

SDRAM(Synchronous Dynamic RAM)同步动态随机存取内存    
  • 大数据处理:在需要处理大量数据的MCU应用中,如图像处理、视频处理、音频处理等,SDRAM可以提供足够的存储空间和高速的数据访问速度,以满足应用需求。
  • 多任务并发:在多任务并发处理的MCU系统中,SDRAM可以用于缓存多个任务的数据和指令,提高系统的并发处理能力和响应速度。
  • 代码执行:在某些情况下,开发者可能会将部分代码加载到SDRAM中执行,以提高程序的执行效率和灵活性。然而,需要注意的是,由于SDRAM是易失性存储器,在断电后数据会丢失,因此必须确保在断电前将关键数据保存到非易失性存储器中。
  • RTC RAM
  • 非易失性:RTC SRAM结合了RTC和SRAM的特点,能够在系统掉电后保持存储的数据不丢失。这得益于其内部的特殊电路设计和电源管理策略。
  • 实时时钟功能:RTC SRAM内置了实时时钟电路,能够提供当前日期和时间信息。这使得它非常适合于需要记录时间戳的应用场景。
  • 高速读写:由于采用了SRAM技术,RTC SRAM具有高速读写数据的能力。这有助于加快系统的响应速度和数据处理速度。
  • PSRAM(Pseudo Static RAM)伪静态随机存储器
  • 内核架构:PSRAM的内核是DRAM架构,这使得PSRAM能够实现较大的存储容量。
  • 功耗低:PSRAM的功耗远低于SDRAM,对于要求有一定缓存容量的很多便携式产品是一个理想的选择。
  • 自带刷新机制:PSRAM内部自带刷新机制,不需要像DRAM那样需要外部源不断刷新以保留数据。
  • 速度支持突发模式:PSRAM的速度并不是很慢,它支持突发模式,能够满足一定速度要求的应用场景。
  • 在物联网时代,PSRAM以其小封装、大容量、低成本的特点,在语音交互、网络收音机等领域得到广泛应用。它能够提供数据缓冲作用,解决网络数据的不稳定问题。
  • RAM的分布

    片内RAM(ON -Chip-RAM)
  • 片内RAM通常用于存储临时数据和变量,如全局变量、局部变量、堆栈等。
  • 它是执行中程序不可或缺的部分,因为程序运行时需要频繁访问这些内存区域以获取或存储数据。
  • 在对内存访问速度要求较高的场合,如中断服务例程和实时数据缓存中,片内RAM是首选。
  • 片外RAM(Off-Chip-RAM)
  • 片外RAM常用于需要大量内存的应用场景,如图像处理、大数据缓存、复杂的数据结构管理等。
  • 当片内RAM无法满足系统内存需求时,可以考虑使用片外RAM进行扩展。
  • 片外RAM也可以用于存储一些不常访问但需要长期保存的数据,以减轻片内RAM的负担。
  • SFR-特殊功能寄存器

    关于占用 ram 和 rom 空间是如何计算的

    ROM计算

    Code 段:代表的就是我们所编写的代码所占用的 flash 空间。当然需要注意的是,代码段的内容  是经过编译器优化以及汇编之后的大小,你在代码里添加注释,或者一些无意义的代码是不会增大code段的大小的。
    RO-data段:即read only – data,只读数据段。在代码中定义的 const 常量,printf 打印的固定字符等,这些均会被存放到此数据段内。

    RW-data(读写数据存储区):存储已初始化的全局变量和静态变量。

    ZI-data(零初始化数据区):存储未初始化的全局变量和静态变量,程序开始运行时初始化为0。

    直接提供给大家以下公式:

        Total RO  Size  = Code + RO Data            
        Total RW  Size  = RW Data + ZI Data          
        Total ROM Size  = Code + RO Data + RW Data 

    RAM计算

    引用如下:

    单片机/MCU内存分配解读_单片机内存-CSDN博客

    作者:weixin_41564872

    物联沃分享整理
    物联沃-IOTWORD物联网 » 捋清楚MCU上内存的分类和关系

    发表回复