[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`

lst文件

链接器生成的.lst或.map文件中的"Sections"部分提供了关于程序各个段的详细信息

Idx Name          Size      VMA       LMA       File off  Algn
  0 .text         00001234  08000000  08000000  00010000  2**4

在这里插入图片描述

ld定义不同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 = 512K
    TCM  (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
### MCUSRAM的工作原理 MCU中的SRAM(静态随机存取存储器)是一种基于触发器电路的存储技术,能够在没有刷新操作的情况下保持数据稳定[^1]。其工作原理依赖于每个存储单元由多个晶体管组成,通常采用6个晶体管(6T)设计来实现一个比特的存储能力。这种设计使得SRAM具有快速访问速度和较低的功耗,同时不需要动态RAM(DRAM)所需的周期性刷新机制。 在MCU内部,SRAM直接连接到处理器内核,提供低延迟的数据访问。SRAM的地址总线和数据总线与MCU的内存控制器相连,通过读写控制信号实现对特定存储位置的访问。由于其高速特性,SRAM常用于缓存关键代码和实时数据。 ### 使用场景 MCU中的SRAM广泛应用于需要高性能、低延迟数据处理的嵌入式系统中。例如: - **堆栈管理**:程序运行时的函数调用和局部变量分配通常使用SRAM。 - **实时数据缓冲**:在通信协议或传感器数据处理中,SRAM用于临时存储高频采样的数据流。 - **固件执行**:部分MCU支持从SRAM中执行代码,以便实现更灵活的更新机制或提升性能[^3]。 - **外扩存储应用**:当内置SRAM容量不足时,可通过FMSC等接口外扩SRAM芯片以扩展内存资源,例如使用国产EMI7064芯片[^2]。 ### 技术特点 SRAM的技术特点主要体现在以下几个方面: - **高速度**:SRAM的访问时间非常短,通常在几纳秒范围内,适合需要快速响应的应用场景。 - **低功耗**:相比DRAM,SRAM在待机状态下消耗的电流更低,适合电池供电设备。 - **非易失性需求限制**:SRAM属于易失性存储器,断电后数据会丢失,因此不适合长期存储重要信息。 - **成本高**:由于每个存储单元需要多个晶体管,SRAM的成本远高于同等容量的DRAM或Flash存储器。 - **可编程性**:部分MCU允许通过SWD接口对SRAM进行动态编程,例如ARM Cortex-M3系列微控制器可以利用Python脚本结合硬件DLL调用来操控USB调试适配器,从而实现对SRAM的操作。 ### 优化技巧 为了高效利用MCU中的SRAM资源,开发者可以通过以下方式进行优化: - **内存分区管理**:将SRAM划分为不同的区域,分别用于代码执行、数据存储和堆栈管理,避免冲突。 - **减少全局变量使用**:尽量使用局部变量并通过编译器优化策略降低SRAM占用。 - **外扩SRAM选择**:当内置SRAM不足时,可以选择通过FMSC接口外扩SRAM芯片,如EMI7064。 - **动态内存分配控制**:谨慎使用malloc/free等动态内存分配函数,避免内存碎片化问题。 ```c // 示例:在C语言中使用静态数组代替动态分配以节省SRAM #define BUFFER_SIZE 128 uint8_t static_buffer[BUFFER_SIZE]; // 静态分配内存,避免动态分配带来的开销 ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值