[方案相关] 片内RAM和片外RAM的区别是什么?

[复制链接]
972|4
野玫瑰 发表于 2025-8-27 13:56 | 显示全部楼层 |阅读模式
片内RAM和片外RAM的区别是什么?


huahuagg 发表于 2025-8-28 13:24 | 显示全部楼层
片内的通常不大,但是速度快。
huahuagg 发表于 2025-8-28 13:25 | 显示全部楼层
片内RAM:集成在单片机芯片内部的存储器,就像电脑的内存条直接焊在主板上(甚至是和CPU在同一块硅片上),访问速度快,但容量小。

片外RAM:需要单片机通过外部总线(地址总线、数据总线)连接的外部存储芯片,就像给电脑额外加装一根内存条,容量可以很大,但访问速度慢。
huahuagg 发表于 2025-8-28 13:26 | 显示全部楼层
物理位置集成在单片机芯片内部作为独立芯片,位于单片机芯片外部
访问方式通过内部总线直接访问需要通过外部地址/数据总线并配合特定指令访问
访问速度极快,与CPU时钟同步,通常只需1-2个时钟周期较慢,需要操作总线、产生控制信号,通常需要多个时钟周期
容量大小较小,通常为几十字节到几十KB(现代通用单片机常见2K-64K)可以很大,从64KB到数MB甚至更大,取决于地址总线宽度和所选芯片
功耗低,因为是芯片内部电路,且总线长度短相对较高,需要驱动外部总线,信号翻转功耗大
成本增加片内RAM会显著提高芯片本身成本成本灵活,可根据需要选择合适容量的RAM芯片,单片机本身成本较低
引脚占用不占用额外的I/O引脚占用大量I/O引脚作为地址总线、数据总线和控制信号线
使用简便性由编译器/IDE自动管理,使用简单透明通常需要程序员手动初始化控制器,并自行管理读/写时序
地址空间通常拥有独立的地址空间(如51单片机的data/idata)或与程序存储器统一编址占用统一的存储器映射空间中的一段地址范围
典型应用存储局部变量、函数调用栈、频繁操作的数据、位变量存储大量数据、缓存、显示缓冲区或当片内RAM不足时作为补充

huahuagg 发表于 2025-8-28 13:26 | 显示全部楼层
以经典的8051单片机为例
这是理解内外RAM区别的绝佳模型。早期的8051架构将内存空间划分得非常清晰:

片内RAM:共128字节(增强型为256字节)。这128字节又分为:

工作寄存器区 (00H-1FH):4组通用寄存器。

位寻址区 (20H-2FH):16字节,每个位都可以直接操作。

通用RAM区 (30H-7FH):普通的随机存取存储器。

访问片内RAM使用MOV指令,速度非常快。

片外RAM:最多可扩展64KB。通过P0和P2口作为地址/数据总线来访问。

访问片外RAM必须使用MOVX指令(Move External),这条指令会产生RD或WR信号来控制外部RAM芯片的读/写。这个过程比内部MOV指令慢得多。

2. 以现代ARM Cortex-M内核单片机为例(如STM32)
现代单片机架构更为先进,通常采用统一编址(Von Neumann架构或Harvard架构的变种)。

片内RAM:通常称为SRAM,容量从几KB到几MB不等。所有对这片地址区域的访问都由芯片内部的矩阵总线(如AHB、APB)完成,速度极快(通常零等待周期)。

片外RAM:如果需要,可以通过FSMC(灵活静态存储器控制器)或FMC等接口连接外部SRAM或SDRAM芯片。这片外部RAM会被映射到处理器统一的地址空间中(例如,从0x6000 0000开始的一段地址)。访问这些地址时,内核的访问请求会被FSMC控制器接管,由FSMC产生复杂的时序信号去操作外部芯片,因此会有延迟。

如何选择?
优先使用片内RAM:由于速度极快、功耗低、使用方便,应优先将所有变量、栈、堆等放在片内RAM中。

当需要处理大量数据时扩展片外RAM:例如:

做图像处理或GUI,需要大容量的显示缓冲区。

做音频处理,需要存储大量的音频样本数据。

运行大型算法(如FFT)或缓存大量网络数据,导致片内RAM容量不足。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

57

主题

367

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部