嵌入式芯片中的 SRAM 内容细讲

什么是 RAM?

RAM 指的是“随机存取”,意思是存储单元都可以在相同的时间内被读写,和“顺序访问”(如磁带)相对。

RAM 不等于 DRAM,而是一类统称,包括 SRAMDRAM 两种主要类型。

静态随机存取存储器(SRAM):无需周期性刷新即可保持数据,访问速度快,功耗低,适合存储运行时数据。与 Flash/ROM 区别:Flash 擅长存储代码和常量、掉电不丢失;SRAM 擅长临时数据读写、速度更快但掉电即丢失。

举个例子!!!!STM32F103C8T6 只有 20KB SRAM,你如果搞显示缓存、音频缓存、AI卷积模型、图像中间层数据,瞬间就爆了。

TFT LCD 显示缓存(Frame Buffer)

实时数据缓冲(如ADC/DMA大量采样)

临时变量堆栈、RTOS任务堆栈空间扩展

音频录放缓存、图像缓存

边缘AI推理中间层缓存

通俗易懂来说,使用电脑时,我们会提到内存和内存条的概念,电脑维修的朋友有时候会说加个内存条电脑就不卡了。实际上对于 PC 来说一些情况下卡顿就是电脑同时运行的程序太多了,电脑处理速度变慢的现象。而程序是动态加载到内存中的,一种解决方法就是增加电脑的内存来增加同时可处理的程序的数量。对于单片机也是一样的,高性能有时候需要通过增加大内存来获得。内存是存储器的一种,由于微机架构设计了不同的存储器放置不同的数据,所以我们也简单来了解一下存储器。

分类方式类别代表器件示例
按存取方式随机存取存储器 (RAM)SRAM、DRAM
顺序存取存储器 (SAM)磁带
按数据保持易失性存储器SRAM、DRAM
非易失性存储器Mask ROM、EPROM、EEPROM、Flash
按功能用途主存(内部存储器)嵌入式 MCU/SoC 内部 SRAM、DDR DRAM
辅存(外部存储器)硬盘(HDD)、固态盘(SSD)、U 盘、SD 卡
按存储介质半导体存储器SRAM、DRAM、Flash
磁性存储器磁盘、磁带
光学存储器CD、DVD、Blu‑ray
机械存储器(软盘等)3.5″ 软盘

SRAM 在 MCU 中的位置与类型

类型作用地址示例(STM32F4)特点
主 SRAM存放堆、栈、全局变量、BSS 等0x2000_0000 – 0x2002_0000容量通常几十 KB – 几百 KB
CCM/AXI SRAM高速数据交换(DSP、DMA)0x1000_0000 – 0x1000_8000无缓存访问、无等待状态、适合 DMA/Motor
备份 SRAM低功耗保持0x4000_4000 – 0x4000_8000仅在 VBAT 供电时保持

主 SRAM:系统运行的主要工作区;

CCM(Core Coupled Memory):紧耦合于 CPU,访问延迟最低;

备份 SRAM:在待机/掉电模式下由独立供电域维持,用于保存关键数据。

在我们 STM32 编程学习中我们常常只关心按读写功能分类的 ROM RAM 两种,因为嵌入式程序主要对应到这两种存储器。对于 RAM ,目前常见的是 SRAM DRAM ,它们因工作方式不同而得名,它们主要有以下的特性,
项目SRAM(静态存储器)DRAM(动态存储器)
英文全称Static Random Access MemoryDynamic Random Access Memory
存储原理使用锁存器(通常由 4~6 个晶体管)保持状态利用 MOS 电容存储电荷,易泄漏,需周期性刷新
数据保持只要不断电,可永久保存数据需定期刷新电荷,否则数据丢失
访问速度快,纳秒级较慢,几十纳秒以上
是否需要刷新
功耗静态功耗高(持续供电),动态功耗较低静态功耗低,但因频繁刷新导致动态功耗高
集成度/面积面积大、集成度低,单位成本高面积小、集成度高,单位成本低
价格便宜
稳定性稳定,不易受干扰容易受干扰,需刷新保护
常见用途MCU 内部 RAM、CPU 缓存(L1/L2)、Cache、FPGA Block RAMPC 主内存、外接内存(SDRAM、DDR 系列)、手机内存
类型举例SRAM、SSRAM(同步 SRAM)FPRAM、EDO DRAM、SDRAM、DDR、DDR2/3/4/5、RDRAM、SGRAM、WRAM 等
对于我们编写的 STM32 程序中的变量, 在默认配置下是加载到 STM32 RAM 区中执行的。而像程序代码和常量等编译后就固定不变的则会放到 ROM 区。
SRAM 芯片架构详解 IS62WV51216 方案
图中 A0~18 为地址线,总共 19 根地址线(即 2^19=512K 1K=1024 ); IO0~15 为数据线,
总共 16 根数据线。 CS2 CS1 都是片选信号,不过 CS2 是高电平有效 CS1 是低电平有效; OE
是输出使能信号(读信号); WE 为写使能信号; UB LB 分别是高字节控制和低字节控制信
号;
信号名称含义详细说明
A0~A18地址线(共 19 根)共 2¹⁹ = 524,288 地址(即 512K 地址空间)
IO0~IO15数据线(共 16 根)每个地址可读写 16 位数据(即 2 字节)
CS1芯片选择信号(低电平有效)必须为低才响应操作
CS2芯片选择信号(高电平有效)必须为高才响应操作
OE输出使能(Output Enable)为低时,读数据才会输出到 IO 引脚上
WE写使能(Write Enable)为低时执行写操作(和 OE 配合控制读写)
UBUpper Byte Enable(高字节控制)为低时,写/读数据的 D8~D15 有效
LBLower Byte Enable(低字节控制)为低时,写/读数据的 D0~D7 有效
VCC电源通常为 3.3V
GND地线-

写操作流程:

1. CS1 = 0,CS2 = 1(片选有效)
2. WE = 0(写有效)
3. OE = 1(关闭输出)
4. 地址 A0~A18 设置好
5. IO0~15 上提供写入数据
6. UB / LB 控制写哪一半数据


读操作流程:

1. CS1 = 0,CS2 = 1(片选有效)
2. WE = 1(写无效)
3. OE = 0(使能输出)
4. 地址 A0~A18 设置好
5. SRAM 把数据放在 IO0~15 上供读取
6. UB / LB 控制读取哪一半数据
 

ps:字节访问控制(UB/LB 应用场景)如果你只想访问 一个字节(8 位),不必读/写整个 16 位数据,可以使用 UBLB 控制:

UB = 0, LB = 1 → 写/读 高字节(IO8~IO15)

UB = 1, LB = 0 → 写/读 低字节(IO0~IO7)

UB = 0, LB = 0 → 写/读 全 16 位

UB = 1, LB = 1 → 禁止写/读(无操作)

这对嵌入式系统中进行字节级访问很有用,特别是在 ARM Cortex-M MCU 上通过 FMC 总线访问时。

XM8A51216 方案 

XM8A51216 使用了所谓 “XRAM免刷新技术”,其实本质还是一种 改进型异步 SRAM,其主要特点是:

不需要外部刷新(不像 DRAM)

访问速度高达 10~15ns

内部结构优化,功耗更低、价格更优

可以做到稳定供货,适合国产替代项目

FSMC 引脚功能SRAM 引脚
FSMC_A0~A18A0~A18
FSMC_D0~D15IO0~IO15
FSMC_NE3CS(片选)
FSMC_NOEOE
FSMC_NWEWE
FSMC_NBL0LB
FSMC_NBL1UB

 

STM32 FSMC引脚SRAM 引脚
FSMC_A0 ~ A18A0 ~ A18
FSMC_D0 ~ D15IO0 ~ IO15
FSMC_NE3(片选)CS1(低有效)
FSMC_NOE(读使能)OE
FSMC_NWE(写使能)WE
FSMC_NBL0 / NBL1LB / UB
GND / VCC / VCCO电源供电

 软件初始化步骤(裸机或HAL库)

RCC_AHB3PeriphClockCmd(RCC_AHB3Periph_FSMC, ENABLE);

类型举例
SRAM(静态RAM)IS62WV51216、XM8A51216 等
NOR Flash用于存储程序或字库
NAND Flash大容量Flash
LCD(带并口)TFT、OLED 等使用 8080 接口的显示屏
扩展FPGA通过 FSMC 扩展高速通信

FSMC_NORSRAMInitTypeDef FSMC_InitStructure;
FSMC_NORSRAMTimingInitTypeDef FSMC_Timing;

FSMC_Timing.FSMC_AddressSetupTime = 2;
FSMC_Timing.FSMC_DataSetupTime = 5;
FSMC_Timing.FSMC_ClockDivision = 2;

FSMC_InitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM3;
FSMC_InitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable;
FSMC_InitStructure.FSMC_MemoryType = FSMC_MemoryType_SRAM;
FSMC_InitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b;
FSMC_InitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable;
FSMC_InitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable;
FSMC_InitStructure.FSMC_ReadWriteTimingStruct = &FSMC_Timing;
FSMC_InitStructure.FSMC_WriteTimingStruct = &FSMC_Timing;

FSMC_NORSRAMInit(&FSMC_InitStructure);
FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM3, ENABLE);

内存访问(直接指针操作)

#define SRAM_BASE_ADDR  ((uint16_t *)0x68000000)
SRAM_BASE_ADDR[0] = 0x1234;
uint16_t val = SRAM_BASE_ADDR[0];
 

高level的应用,

带缓存机制的数据采集系统(FIFO双缓存切换)

你可以做一个「双缓冲」机制,比如用 FSMC-SRAM 存数据帧,采集和处理同时进行,一边 DMA 填数据,一边 MCU 分析处理。

FSMC+DMA 联动(真正零拷贝)

你可以设置 DMA 从 SRAM 直接输出数据到 LCD(或 DAC),配合 FSMC 写 SRAM 的位置,做到零CPU干预的持续数据流。

做成简易内存管理堆(SRAM 动态 malloc/free)

模拟内存堆,自己写内存分配器,把外扩 SRAM 当作 “扩展堆区”,适合嵌入式 Python、RT-Thread 等系统内存池扩展。

AI 模型中间层缓存

用 FSMC SRAM 放置 CNN 模型运行中间的 feature map,避免 Flash 数据频繁搬运,适合高帧率物体识别、人脸识别。

与 FPGA 联动的共享内存接口

你可以用 FSMC 接到 FPGA,FPGA 的SRAM接口与你 MCU 共享内存,完成高速的数据交互。比如 MCU 控制 + FPGA 实时图像处理的结构。

如果后续要做某个特定场景,比如:显示缓存、AI缓存、动态堆,或者搞点骚操作比如和 FPGA 联动共享内存,我可以帮你进一步设计结构,甚至搞定驱动代码。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/77514.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

标准的JNI (Java Native Interface) 加载函数 JNI_OnLoad

1.JNI_OnLoad 在 Android Native 开发中&#xff0c;JNI_OnLoad 是动态注册本地方法的标准入口点。以下是一个标准实现示例及其说明&#xff1a; JNI_OnLoad 标准实现 #include <jni.h> #include <string>// 声明本地方法对应的 C/C 函数 jint native_add(JNIEnv…

算法导论思考题

2-1 在归并排序中对小数组采用插入排序 c. 假定修改后的算法的最坏情况运行时间为 Θ \Theta Θ(nknlg(n/k))&#xff0c;要使修改后的算法与标准的归并排序具有相同的运行时间&#xff0c;作为n的一个函数&#xff0c;借助 Θ \Theta Θ记号&#xff0c;k的最大值是什么&#…

JavaScript 性能优化

JavaScript 性能优化是提高 Web 应用性能的关键步骤,特别是在处理大量数据、复杂计算或频繁的 DOM 操作时。以下是一些常见的 JavaScript 性能优化技巧和策略: 文章目录 @[TOC]一、代码层面优化1. **减少全局变量**2. **避免使用 `with` 语句**3. **使用局部变量**4. **减少 …

NLP高频面试题(四十七)——探讨Transformer中的注意力机制:MHA、MQA与GQA

MHA、MQA和GQA基本概念与区别 1. 多头注意力(MHA) 多头注意力(Multi-Head Attention,MHA)通过多个独立的注意力头同时处理信息,每个头有各自的键(Key)、查询(Query)和值(Value)。这种机制允许模型并行关注不同的子空间上下文信息,捕捉复杂的交互关系。然而,MHA…

51单片机的原理图和PCB绘制

51单片机最小系统原理图 加了两个led灯和按键检测电路。 PCB中原件摆放位置 成品 资源链接&#xff1a;https://download.csdn.net/download/qq_61556106/90656365

使用注解方式整合ssm时,启动tomcat扫描不到resource下面的xxxmapper.xml

解决org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.xxx.mapper.方法 在Spring与Mybatis整合时&#xff0c;可能会遇到这样的报错 原因&#xff1a; 其原因为mapper路径的映射错误&#xff0c;表示在尝试执行某个 Mapper 接口的方法时…

提示词设计:动态提示词 标准提示词

提示词设计:动态提示词 标准提示词 研究背景:随着人工智能与司法结合的推进以及裁判文书公开数量增多,司法摘要任务愈发重要。传统司法摘要方法生成质量有待提升,大语言模型虽有优势,但处理裁判文书时存在摘要结构信息缺失、与原文不一致等问题。研究方法 DPCM方法:分为大…

Jenkins 多分支管道

如果您正在寻找一个基于拉取请求或分支的自动化 Jenkins 持续集成和交付 (CI/CD) 流水线&#xff0c;本指南将帮助您全面了解如何使用 Jenkins 多分支流水线实现它。 Jenkins 的多分支流水线是设计 CI/CD 工作流的最佳方式之一&#xff0c;因为它完全基于 git&#xff08;源代…

跨境电商管理转型:日事清通过目标管理、流程自动化助力智优美科技项目管理升级与目标落地复盘

1.客户背景介绍 深圳市智优美科技有限公司是一家专业从事外贸B2C的电子商务公司&#xff0c;公司总部位于深圳市宝安区&#xff0c;旗下拥有三家子公司。目前销售的品类有&#xff1a;家居用品、电子产品、电子配件产品等&#xff0c;在深圳外贸电商行业销售额稳居行业前10名。…

基于Docker+k8s集群的web应用部署与监控

项目架构图 server ip master 192.168.140.130 node1 192.168.140.131 node2 192.168.140.132 ansible 192.168.140.166 jumpserver 192.168.100.133 firewall 192.168.1.86 nfs 192.168.140.157 harbor 192.168.140.159 Promethethus 192.168.140.130 Jen…

量子计算与经典计算融合:开启计算新时代

一、引言 随着科技的飞速发展&#xff0c;计算技术正迎来一场前所未有的变革。量子计算作为前沿技术&#xff0c;以其强大的并行计算能力和对复杂问题的高效处理能力&#xff0c;吸引了全球科技界的关注。然而&#xff0c;量子计算并非要完全取代经典计算&#xff0c;而是与经典…

【HarmonyOS 5】makeObserved接口详解

【HarmonyOS 5】makeObserved接口详解 一、makeObserved接口是什么&#xff1f; makeObserved 接口&#xff08;API version 12 起可用&#xff09;用于将非观察数据转为可观察数据&#xff0c;适用于三方包类、Sendable 装饰的类、JSON.parse 返回的对象、collections.Array…

豆瓣图书数据采集与可视化分析(二)- 豆瓣图书数据清洗与处理

文章目录 前言一、查看数据基本信息二、拆分pub列三、日期列处理四、价格列处理五、出版社列处理六、评价人数列处理七、缺失值处理八、重复数据处理九、异常值处理十、完整代码十一、清洗与处理后的数据集展示 前言 豆瓣作为国内知名的文化社区&#xff0c;拥有庞大且丰富的图…

Wasm -WebAssembly简介

WebAssembly 是什么&#xff1f; WebAssembly/wasm WebAssembly 或者 wasm 是一个可移植、体积小、加载快并且兼容 Web 的全新格式 WebAssembly&#xff08;简称 Wasm&#xff09;是一种二进制指令格式&#xff0c;设计用于在现代 Web 浏览器中高效运行程序。它可以被认为是一…

驱动开发硬核特训 · Day 15:电源管理核心知识与实战解析

在嵌入式系统中&#xff0c;电源管理&#xff08;Power Management&#xff09;并不是“可选项”&#xff0c;而是实际部署中影响系统稳定性、功耗、安全性的重要一环。今天我们将以 Linux 电源管理框架 为基础&#xff0c;从理论结构、内核架构&#xff0c;再到典型驱动实战&a…

【SpringBoot】99、SpringBoot中整合RabbitMQ实现重试功能

最近在做一个项目,需要使用 MQ 实现重试功能,在这里给各位分享一下。 1、整合 RabbitMQ <!-- rabbitmq消息队列 --> <dependency><groupId>org.springframework.boot</groupId><

AI 中的 CoT 是什么?一文详解思维链

文章目录 CoT 的组成CoT 的作用CoT 的推理结构变体CoT 的特点CoT 的适用场景总结 在人工智能领域&#xff0c;尤其是自然语言处理和机器学习中&#xff0c;有一种名为思维链&#xff08;Chain of Thought&#xff0c;CoT&#xff09;的技术&#xff0c;它正逐渐改变着我们对 AI…

Vue3集成Element Plus完整指南:从安装到主题定制上

一、Element Plus简介 Element Plus是一套基于Vue 3.0的桌面端组件库&#xff0c;由饿了么前端团队开源维护。它提供了丰富的UI组件&#xff0c;能够帮助开发者快速构建企业级中后台产品。 1. 安装与卸载 bash 复制 下载 # 安装最新版本 npm install element-plus -S# 卸…

Java29:Spring MVC

一&#xff1a;Springmvc简介 1.简介&#xff1a; Spring Web MVC 是基于Servlet API构建的原始Web框架&#xff0c;从一开始就包含在Spring Framework中。正式名称“Spring Web MVC” 来自其源模块名称&#xff08;spring-webmvc&#xff09;但它通常被称为“Spring Mvc” …

VLC搭建本机的rtsp直播推流和拉流

媒体---流---捕获设备&#xff0c;选择摄像头&#xff0c;点击串流 x下一步 选择rtsp&#xff0c;点击添加 看到了端口&#xff0c;并设置路径&#xff1a; 选择Video -H 264 mp3(TS) 点击下一个&#xff0c; 点击流&#xff0c;就开始推流了 拉流&#xff0c;观看端&#x…