打印
[应用相关]

为什么单片机内部RAM这么少?

[复制链接]
709|18
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jcky001|  楼主 | 2022-12-5 09:36 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

也许大家都注意到了,在过去的20多年的时间里,微控制器(MCU)经历了跨越式的发展,这反映在很多方面,比如更高的系统时钟、更多的外设模块、更加便利的调试手段、32位的内核等。但MCU内部的数据内存空间,则始终在十几K(16~32KB)的左右徘徊。虽然有些基于Cortex M4核单片机有多达265kB RAM的型号,但在众多单片机型号阵列中,它们是寥寥无几。

那么,究竟什么原因使得单片机很容易拥有多达数 MB的程序Flash空间,而数据内存只有那么小呢?

在一篇博文“Why do microcontrollers have so little RAM?[1]”中,众人给出了单片机RAM容量小的很多原因。

在所有影响单片机内RAM增加的原因中,一个基础的问题就是RAM会占用很多硅片面积,这也会直接引起芯片价格的增加。这是因为在同样的硅片上,占用硅片面积大会使得MCU数量就会减少,特别是在晶圆片的边界部分造成更大的浪费。祸不单行,面积大的IC也更会产生缺陷,使得成品率下降。

第二个原因就是制作RAM的工序复杂。可以通过不同手段优化RAM生产工艺,但在制作MCU过程中, 同一芯片不可能经历过多的工序。有一些芯片加工服务厂商专门生产DRAM,这是利用特殊的半导体电容技术来极大减少RAM所占用的硅片面积,但DRAM需要通过不停刷新来维持其内部数据。为了延迟DRAM单元保持数据的能力,就要求晶体管漏电流小,这也会造成晶体管的运行速度降低。这需要在速度和数量之间做折中,但这种折中工艺不利于制作高速逻辑电路。


使用特权

评论回复
沙发
jcky001|  楼主 | 2022-12-5 09:37 | 只看该作者

此外,大容量RAM电路在后期的测试阶段也会消耗大量的时间,从而增加生产的时间成本。所以,经济原因造成生产RAM的专门厂商兴起。

功耗是另外一个限制因素。单片机系统通常对功耗有限制,很多情况下,单片机通过进入睡眠状态来减少耗电量。普通的SRAM耗电量很小,通过备用电池往往可以工作很多年。但DRAM则需要通过不断刷新来维持存储的数据。一旦停止刷新,由于漏电流的存在,DRAM的内容在不到一秒钟的时间内就会消失。所以,单片机中不能够使用DRAM而只能使用占用硅片面积更大的SRAM。

在现代CPU技术中,往往在新品中保留数量较少的SRAM作为缓存(Cache),而将大容量的DRAM作为CPU外部的数据存储空间。

有一些非常酷的手段可以将不同生产工艺的RAM和MCU制作工艺融合在一起,例如多芯片封装技术(Multi-Chip Package),将RAM新品放在MCU芯片上面堆叠一起进行封装,这比在电路板上将RAM与MCU集成更加节省系统体积,也提高数据传输速率。

最后一个原因,就是在绝大多数单片机应用的场合所需要的RAM的容量都比较少。比如在嵌入式控制领域,很多很多传感器信息都可以用极少字节的数据来表示,用于控制的参数和控制逻辑占用数据空间也很少。

所以,当需要大量RAM的应用出现的时候,往往就会直接采用集成有大容量DRAM的电路板来工作。通过外部集成大容量RAM芯片,要远比MCU内部集成的RAM更加经济。

除了前面的原因之外,单片机指令集也会限制RAM访问空间。比如Microchip公司的单片机,PIC10LF320,是12bit的指令,它只能够范围128字节的RAM空间。对于8031单片机,直接寻址的RAM空间也只有128字节。如果访问更大的外部存储空间,则需要借助于执行效率更低的间接指令。

单片机总线结构分为Harvard结构和Von Neumann结构,后者中,程序和数据存储空间是在同一个访问空间中。如果单片机中集成了大量的Flash区,那么留给数据RAM空间访问地址就少了。

此外,高效的C语言编译器,可以有效重复应用有限的RAM空间完成所需要的任务。在复杂的应用中,往往会采用多个单片机协同完成,这大大提高系统实时特性。巧妙的设计方案会避免嵌入式系统对大容量RAM的需求。所以,有人认为,正是由于没有大量需要高RAM容量的应用要求,是造成现在单片机内部RAM少的真正原因。

别忘了,早期那些令我们着迷的电子游戏,虽然有着炫酷的图形界面,但它们连程序带数据总共也只有8k字节的存储空间,比如吃豆子游戏,太空入侵游戏等。让我们向早期的这些极简风格嵌入式编程人员致敬吧。


使用特权

评论回复
板凳
天天向善| | 2022-12-5 11:53 | 只看该作者
一般应用用不到大容量,实在要大容量,可以选择外扩RAM。

使用特权

评论回复
地板
LLGTR| | 2022-12-5 13:23 | 只看该作者
基本上够用呗,除了开发屏幕的设备,RAM几十KB就够用了。

使用特权

评论回复
5
jf101| | 2022-12-5 14:09 | 只看该作者
其实一般几百K的RAM就够用了,对于再大的程序就是外置的RAM进行

使用特权

评论回复
6
V853| | 2022-12-5 22:21 | 只看该作者
51单片机8KB的RAM都可以开发很多产品了,256KB能胜任市场上大多数产品了

使用特权

评论回复
7
sonicll| | 2022-12-6 09:10 | 只看该作者
本帖最后由 sonicll 于 2022-12-6 09:13 编辑

SRAM主要是占用面积大,现在高端产品上有3D堆叠技术,比如AMD的ryzen 7 5800x3D,把一片大容量SRAM堆叠封装在CPU上层,但是价格比较贵

使用特权

评论回复
8
SantaBunny| | 2022-12-6 10:08 | 只看该作者
一般够用的,实在想要大容量,可以选择外扩RAM

使用特权

评论回复
9
MessageRing| | 2022-12-6 11:12 | 只看该作者
这些基本够用的了

使用特权

评论回复
10
Clyde011| | 2024-10-16 07:08 | 只看该作者

电源电压处于1.6V到5.5V之间

使用特权

评论回复
11
公羊子丹| | 2024-10-16 08:01 | 只看该作者

电压范围称为工作电源电压

使用特权

评论回复
12
万图| | 2024-10-16 09:04 | 只看该作者

内部电路工作电圧是通过内部电压调节器调节电源电压得到的

使用特权

评论回复
13
Uriah| | 2024-10-16 10:07 | 只看该作者

单片机的外部都连接有象电池等电源部分

使用特权

评论回复
14
帛灿灿| | 2024-10-16 12:03 | 只看该作者

通常选择0.01μF~0.1μF的陶瓷电容作为旁路电容。

使用特权

评论回复
15
Bblythe| | 2024-10-16 13:06 | 只看该作者

主时钟振荡器主要用作CPU的工作时钟

使用特权

评论回复
16
周半梅| | 2024-10-16 15:02 | 只看该作者

防止因瞬间大电流引起的电源电压下降

使用特权

评论回复
17
Pulitzer| | 2024-10-16 16:05 | 只看该作者

要在外部连接一个振荡电路提供时钟信号

使用特权

评论回复
18
童雨竹| | 2024-10-16 18:01 | 只看该作者

与15号引脚连接的C1称为旁路电容

使用特权

评论回复
19
Wordsworth| | 2024-10-16 19:04 | 只看该作者

时序电路是按时钟信号(CK)的上升沿(信号从L→H的变化)或下降沿(信号从H→L的变化)同步工作的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1505

主题

4522

帖子

6

粉丝