PSRAM在数据缓冲应用中可以取代SRAM或SDRAM

PSRAM(Pseudo Static Random Access Memory)是一种结合了SRAM接口和DRAM内核的存储器,提供类似SRAM的快速访问,但成本更低且容量更大。适用于物联网和语音交互领域,尤其在需要小封装、大容量和低成本的场景下。相比于DRAM,PSRAM读取速度更快,而与SRAM相比,PSRAM容量更大且价格更低。常见的PSRAM类型包括SPI、QPI和OPI,分别具有不同的接口速度和带宽。在设计中,PSRAM可以作为SRAM或SDRAM的替代品,尤其是在对读取速度有一定要求但又不需达到SRAM级别的应用中。

PSRAM它具有类SRAM的接口协议:给出地址、读、写命令,就可以实现存取,不像DRAM需要memory controller来控制内存单元定期数据刷新,因此结口简单;但它的内核是DRAM架构:1T1C一个晶体管一个电容构成存储cell,而传统SRAM需要6T即六个晶体管构成一个存储cell。由此结合,他可以实现类SRAM的接口有可实现较大的存储容量。

物联网时代赋予了PSRAM新的活力,尤其在语音交互领域,PSRAM以其小封装、大容量、低成本,开始显露器独特优势。

同样在一些网络收音机中,使用PSRAM,能够是声音播放非常平滑,提供优越的用户体验。

为追求小型化,现在已经有串行化的PSRAM:

  1. SPI PSRAM: 8-pin SOP封装,最高速率可以达到104MHz, 具有片选CS、CLK、SI、SO 4个信号脚。

2.QPI PSRAM: 8-pin SOP封装,最高速率104MHz, 有额外的3个双向数据管脚,由此带宽峰值可以达到416Mbps。

3.OPI PSRAM: 24 脚封装,有8个串行数据线,最高时钟频率达到133MHz,最高带宽可以达到133x8 x2=2.128Gbps。这里x2是因为它可以实现DDR,以提高数据带宽。

PSRAM在一些数据缓冲应用中可以取代SRAM或者SDRAM: 高速、大容量PSRAM非常贵;而SDRAM需要很多管脚、需要设计DRAM控制器、实现数据刷新等,再尺寸、设计复杂度等上不经济。

在传统的MCU中,都有SPI接口,因此使用PSRAM没有问题。对应QPI/OPI,设计上需要一些配合。

与DRAM相比的优势区别:
相对于DRAM来说,PSRAM在容量大小上并不占据优势,更多使用DRAM的客户,会在读取速度上考虑用到PSRAM,因为PSRAM相对于DRAM的读取速度要快。

与SRAM相比的优势区别:

对比SRAM,pSRAM市面上的产品比SRAM的容量大一倍以上,PSRAM目前最大容量达到64Mbit,并有并口跟SPI接口两种模式,对需要更少I/0的设计应用更为广泛,其次,pSRAM在价格上要低于SRAM。

总结来说
如果在设计应用中考虑读取速度要比DRAM快的,但是又不需要达到SRAM的读取速度要求,一般SRAM的读取速度最快可以到8ns,可以选用PSRAM.

<think>我们正在讨论链接脚本(Linker Script)中的SRAM part和PSRAM part。根据引用[1],XIP(Execute in place)是指代码直接在外部存储器(如FlashPSRAM)中执行,而无需复制到内部存储器(如SRAM)。STM32H7S7L8支持这种特性。 在链接脚本中,SRAM part和PSRAM part分别代表: 1. **SRAM part**: 通常指芯片内部的静态随机存取存储器(Static RAM)。它的访问速度快,但容量较小。在链接脚本中,这部分内存通常用于存放需要快速访问的数据,例如: - 堆栈(Stack和Heap) - 全局变量(尤其是需要频繁读写的变量) - 中断向量表(如果配置在RAM中) 2. **PSRAM part**: 伪静态随机存取存储器(Pseudo Static RAM)。它是一种动态RAM(DRAM),但具有类似SRAM的接口。PSRAM通常位于芯片外部,容量较大,但访问速度比内部SRAM慢。在支持XIP的系统中,PSRAM也可以用于存放代码(即程序可以直接在PSRAM中运行,无需拷贝到内部SRAM)。在链接脚本中,PSRAM部分通常用于: - 存放较大的数据(如数组、缓冲区) - 如果支持XIP,则也可以存放代码段(.text) 在链接脚本中,你会看到类似这样的定义: ``` MEMORY { SRAM (xrw) : ORIGIN = 0x20000000, LENGTH = 512K /* 内部SRAM */ PSRAM (xrw) : ORIGIN = 0x60000000, LENGTH = 8M /* 外部PSRAM */ } ``` 然后,通过SECTIONS指令,将不同的段(如.data, .bss, .text等)分配到这两个内存区域中。例如: ``` SECTIONS { .text : { /* 代码放在PSRAM中,因为支持XIP */ *(.text) } > PSRAM .data : { /* 已初始化的全局变量,放置在SRAM中,因为需要快速访问 */ *(.data) } > SRAM AT> PSRAM /* AT>表示加载地址在PSRAM,但运行时在SRAM(需要初始化时拷贝) */ .bss : { /* 未初始化的全局变量,放在SRAM */ *(.bss) } > SRAM } ``` 注意: - 对于支持XIP的系统中,.text段通常放在外部存储器(如PSRAMFlash)中,因为这样可以节省内部SRAM的空间。 - 但是,如果某段代码对性能要求极高,也可能将其复制到内部SRAM中运行(虽然这会占用SRAM空间)。 - 对于.data段(已初始化的全局变量),通常其初始化值存储在非易失性存储器(如FlashPSRAM)中,但在程序启动时需要将其复制到SRAM中,因为程序运行时需要快速读写这些变量。 引用[2]和[4]提到了关于变量定位到SDRAM(类似PSRAM)的问题,以及链接脚本如何将ELF文件中的段映射到内存地址。这进一步说明了链接脚本中定义不同存储器区域的重要性。 因此,在链接脚本中定义SRAM part和PSRAM part,就是为了指导链接器将程序的不同部分(代码、数据)分配到合适的物理存储器上,以平衡存储容量和性能的需求。 [^1]: 引用[1]介绍了XIP的概念和STM32H7S7L8的存储器资源。 [^2]: 引用[2]提到了将变量定义到SDRAM中的尝试。 [^4]: 引用[4]解释了链接脚本的作用以及如何生成BIN文件。 §§相关问题§§ 1. 如何在链接脚本中指定变量存储在特定的内存区域(如PSRAM)? 2. XIP(原地执行)技术对系统启动时间有何影响? 3. 在STM32H7系列中,如何配置使用PSRAM运行代码? 4. 链接脚本中的AT>关键字有什么作用? </think>在链接脚本(Linker Script)中,`SRAM part`和`PSRAM part`分别指代不同的物理内存区域,它们在嵌入式系统开发中扮演关键角色。以下是两者的详细解释: ### 1. **SRAM part(静态随机存取存储器部分)** - **物理特性**:芯片内置的高速易失性存储器,访问速度极快(纳秒级),但容量较小[^1]。 - **链接脚本中的作用**: ```ld MEMORY { SRAM (rwx) : ORIGIN = 0x20000000, LENGTH = 128K /* 起始地址+长度 */ } ``` - **存放内容**: - 栈(Stack)和堆(Heap) - 频繁读写的全局变量 - 中断向量表(如配置在RAM中) - 实时性要求高的函数代码 - **典型操作**:程序启动时需将初始化数据从Flash拷贝到SRAM(通过`__data_load/_data_start`等符号实现) ### 2. **PSRAM part(伪静态随机存取存储器部分)** - **物理特性**:外部扩展的类DRAM存储器,容量大(通常MB级),但访问速度较慢(微秒级),需控制器管理刷新[^1][^2]。 - **链接脚本中的作用**: ```ld MEMORY { PSRAM (rwx) : ORIGIN = 0x60000000, LENGTH = 8M } ``` - **存放内容**: - 大型数据缓冲区(如图像/音频数据) - 文件系统缓存 - 支持XIP(原地执行)的代码段(无需拷贝到SRAM)[^1] - **关键特性**: - 通过`.xip_section`等自定义段名映射 - 需初始化存储器控制器才能访问 ### 3. **实际应用对比** | **特性** | SRAM part | PSRAM part | |------------------|-------------------------------|--------------------------------| | 访问速度 | 极快 (10-100ns) | 较慢 (100+ns) | | 容量 | 较小 (KB级) | 较大 (MB级) | | 功耗 | 较高 | 较低 | | 典型用途 | 关键变量/实时函数 | 媒体数据/XIP代码[^1] | | 是否需要初始化 | 上电即用 | 需配置存储器控制器[^2] | ### 4. **配置示例** ```ld SECTIONS { .text : { *(.text) /* 默认代码段 */ *(.xip_text*) /* XIP专用代码段 → PSRAM */ } > PSRAM .data : { _sdata = .; /* SRAM数据起始标记 */ *(.data*) _edata = .; /* SRAM数据结束标记 */ } > SRAM AT> FLASH /* 加载地址在FLASH,运行地址在SRAM */ .psram_buffer : { *(.psram_data*) /* PSRAM数据缓冲区 */ } > PSRAM } ``` > **关键作用**:通过精确划分内存区域,链接脚本确保: > 1. 高频访问数据位于SRAM以提升性能 > 2. 大容量资源存放于PSRAM优化成本 > 3. XIP代码直接从PSRAM执行,节省SRAM空间[^1][^4] [^1]: XIP技术支持代码直接在外部存储器执行,无需复制到内部SRAM。 [^2]: 外部存储器(如SDRAM/PSRAM)需先初始化控制器才能使用。 [^4]: 链接脚本通过地址映射生成可直接烧写的BIN文件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值