当前位置: 首页 > web >正文

[MCU]SRAM

MCU存储体系

1.SRAM
2.FLASH
3.TCM

SRAM

SRAM(Static Random-Access Memory):静态随机存取存储器.
特点:访问速度快、断电丢失、不

SRAM分类

1.系统SRAM:连接在系统总线上,所有外设和CPU都可访问
2.TCM SRAM:紧耦合内存,专为CPU高速访问设计(如ARM的DTCM)
3.外设SRAM:某些外设专用的缓冲区(如USB、DMA等
在这里插入图片描述
128KB = 128 * 1024 byte = 0x20000
地址范围:0x2000_0000 ~ 0x2002_0000

SYS SRAM与TCM DRAM的区别

在这里插入图片描述

SYS SRAMTCM SRAM
共享资源:多主设备(CPU/DMA/外设)通过总线矩阵访问物理隔离:独立于总线矩阵的专用接口
缓存支持:通常配合Cache使用提升性能零等待状态:与CPU寄存器同级别的访问速度
动态分配:支持标准内存管理 “malloc”静态分配:需显式指定变量位置
SYS SRAM 和AP SRAM区别

在这里插入图片描述

SYS SRAM

mcu访问错误的sram地址可能会导致总线访问失败

TCM SRAM

ITCM Instruction Tightly Coupled Memory :指令紧耦合存储器,用于存储需要快速执行的代码(如中断处理程序、关键算法)

DTCM Data Tightly Coupled Memory :数据紧耦合存储器,用于存储需要快速访问的数据(如实时控制变量、DSP数据)

WIFI FW SRAM

在无线芯片(如WiFi/BT Combo芯片)的架构设计中,FW SRAM(固件SRAM)和SYS SRAM(系统SRAM)是两种不同的内存区域,它们在功能和使用方式上有显著差异
在这里插入图片描述

内存属性

内存区域通常被划分为缓存(Cacheable, C)、非缓存(Non-Cacheable, NC)、安全(Secure, S)和非安全(Non-Secure, NS)四种属性

C /NC

在嵌入式系统和MCU开发中,SRAM的缓存(Cacheable, C)和非缓存(Non-Cacheable, NC)区域是两种重要的内存配置方式
在这里插入图片描述
在这里插入图片描述

S /NS

SRAM的安全(Secure, S)和非安全(Non-Secure, NS)区域划分
在这里插入图片描述

调试指令

查看内存段指令
`arm-none-eabi-size -A -x your_elf_file.elf`

分配变量到不同SRAM区域

“ram_extra0_bss”
“tcm_data”

__attribute__((section(".ram_extra0_bss"))) 
static uint32_t system_ram_var;// 使用宏简化
#define SYS_RAM_VAR __attribute__((section(".ram_extra0_bss")))
SYS_RAM_VAR uint8_t buffer[1024];

ld文件指定SYS SRAM 和 TCM SRAM内存地址范围

MEMORY {/* 定义内存区域 */SRAM (rwx) : ORIGIN = 0x20000000, LENGTH = 512KTCM  (rwx) : ORIGIN = 0x10000000, LENGTH = 128K
}SECTIONS {/* 系统SRAM区域 */.ram_extra0_bss (NOLOAD) : {__ram_extra0_start__ = .;*(.ram_extra0_bss*). = ALIGN(4);__ram_extra0_end__ = .;} > SRAM/* TCM区域 */.tcm_section : {*(.tcm_data*)} > TCM
}

测试

#pragma once#ifdef __GNUC__
#define SYS_RAM_ALLOC(name) \__attribute__((section(#s(.ram_extra0_bss, __LINE__))) \__attribute__((aligned(4))) name#define TCM_ALLOC(name) \__attribute__((section(".tcm_data"))) \__attribute__((aligned(32))) name
#else
#error "Compiler not supported"
#endif// 使用示例
SYS_RAM_ALLOC(static uint32_t sys_var);  // 分配到系统SRAM
TCM_ALLOC(float32_t dsp_buffer[256]);   // 分配到TCM
http://www.xdnf.cn/news/2427.html

相关文章:

  • JVM指令手册:深入理解字节码执行机制
  • 图像生成新势力:GPT-Image-1 与 GPT-4o 在智创聚合 API 的较量
  • 大数据学习栈记——Hive4.0.1安装
  • 整合 | 大模型时代:微调技术在医疗智能问答矩阵的实战应用20250427
  • 正则表达式详解
  • π0.5:带开放世界泛化的视觉-语言-动作模型
  • C++学习:六个月从基础到就业——模板编程:模板特化
  • web字符转义
  • Maven概述
  • Leetcode837.新21点
  • GRS认证审核内容?GRS认证基本概述?GRS认证的好处?
  • 【应用密码学】实验二 分组密码(2)
  • 「浏览器即OS」:WebVM技术栈如何用Wasm字节码重构冯·诺依曼体系?
  • 革新桌面自动化:微软UFO²操作系统深度解析与未来展望
  • C++笔记-模板进阶和继承(上)
  • 最佳实践-HENGSHI SENSE 可视化创作中如何引入数据集市的成果
  • 企业数据赋能 | 应用模板分享:汽车销售仪表板
  • Ubuntu下MySQL的安装
  • 前端高频面试题day2
  • 【MySQL】表的CRUD
  • 第1讲、#PyTorch教学环境搭建与Tensor基础操作详解
  • 计算机网络学习笔记 4-6章
  • 量子网络:构建未来通信的超高速“高速公路”
  • css面板视觉高度
  • 爬虫技术入门:基本原理、数据抓取与动态页面处理
  • Git 全面解析:从核心概念到生态应用
  • setup和hold互卡问题剖析
  • 【NVM】管理不同版本的node.js
  • AOSP Android14 Launcher3——动画核心类QuickstepTransitionManager详解
  • Animate 中HTMLCanvas 画布下实现拖拽、释放、吸附的拼图游戏