PSRAM 与嵌入式系统中的其他存储器对比¶
PSRAM(伪静态 RAM,pseudo-static RAM)是许多嵌入式产品中介于稀缺的片上 SRAM 与非易失性存储之间的实用容量层。帧缓冲区、大型图形资源、音频缓冲区、模型数据,或内部 SRAM 容纳不下的应用工作集,都可以放在其中。对于可穿戴设备等部分低功耗产品,PSRAM 在系统级功耗上可能比独立 DRAM 子系统更合适;实际结果取决于存储器件、控制器、电源状态和工作负载。PSRAM 仍是易失性工作内存,不能替代 Flash,也不一定适合存放对延迟(latency)要求严格的数据。
本页介绍如何在 SRAM、PSRAM 和持久化存储之间分配数据。选定具体 SKU 后,请查阅 SF32 系列以及对应芯片、模组或开发板的文档,确认其实际搭载的存储器。
一句话理解
PSRAM 在内部使用动态的、类 DRAM 的存储单元,但在存储器件内管理刷新(refresh),因此主机可以用更接近静态 RAM 的方式访问它。
实用原则很简单:用 PSRAM 解决容量问题;将要求确定性低延迟的工作留给 SRAM;并将外部存储器接口视为共享的性能与功耗预算。
静态与动态:“伪”从何而来¶
这里的静态与动态,指的是 RAM 存储单元在持续供电时如何保持数据,而不是数据能否在断电后保留:SRAM 和 DRAM 都是易失性存储器。
- SRAM 的一个 bit 保存在静态锁存器中。写入后,只要器件持续供电且工作条件符合规格,它便无需周期性刷新也能保持有效。代价是存储单元较大,从而限制容量并增加每位的芯片面积和成本。
- DRAM 的一个 bit 以电容中的电荷形式保存。电荷会随时间泄漏,因此必须在电荷下降过多之前周期性地读取并恢复,即执行刷新操作。较小的单元带来 DRAM 的密度优势,但通常需要支持 DRAM 的控制器来安排刷新并遵守时序规则。
PSRAM 通常采用类似 DRAM 的动态存储单元阵列。器件自行完成刷新,并在内部处理大部分 DRAM 特有的控制工作。因此,对主机而言,它的使用方式更接近 SRAM:主机直接读写可寻址的存储空间,无需自行安排周期性刷新。这并不意味着所有 PSRAM 都与 SRAM 具有相同的电气接口和时序。所谓伪静态,指的是动态 RAM 对外提供类似静态 RAM 的访问方式,而不是其存储单元变成了静态单元。
这种简化发生在接口层,并未消除物理层面的取舍。PSRAM 仍有器件相关的命令延迟、突发传输行为、时钟上限、睡眠模式、访问限制和功耗。请阅读所选 PSRAM 的数据手册,不要将所有 PSRAM 器件视为可互换。
PSRAM 不是什么
PSRAM 不是非易失性存储器,不保证具有内部 SRAM 的访问延迟,也不保证系统带宽足够。它解决的是容量问题;延迟、功耗和带宽代价取决于所选器件和工作负载。
存储器类型比较¶
| 存储器类型 | 断电后保留数据? | 核心特性 | 典型优势 | 主要设计取舍 | 典型嵌入式用途 |
|---|---|---|---|---|---|
| SRAM | 否 | 静态锁存器;无需刷新 | 内部 SRAM 通常延迟低且可预测;实际时序取决于 SoC 存储访问路径和总线竞争 | 存储密度较低,因此片上容量有限;常开设计还需关注漏电 | 栈、热点代码/数据、DMA 描述符、对中断敏感的缓冲区、紧耦合存储器 |
| DRAM | 否 | 以电容保存数据,需要外部 DRAM 控制器管理刷新 | 大容量时密度高、每位成本低 | 刷新、控制器复杂度、行/Bank 时序和电源管理工作 | 应用处理器系统和高容量嵌入式系统的主存储器 |
| PSRAM | 否 | 类 DRAM 存储,刷新/控制由存储器件内部处理;主机侧的使用模型类似 SRAM | 扩展内部 SRAM 之外的工作存储容量;在部分低至中等带宽设计中,可能比独立 DRAM 子系统更易集成、系统功耗也可能更低 | 相比内部 SRAM,延迟更高且更难预测;有限的接口带宽还需由多个使用方共享 | 帧缓冲区、大型 UI/音频/AI 缓冲区、解压后的资源和应用工作集 |
| RRAM / ReRAM | 是 | 通过改变单元电阻状态表示数据 | 可能实现紧凑的嵌入式非易失性存储器,待机功耗低 | 写入特性、耐久性、保持性、离散性和供货取决于工艺与产品 | 在已支持该技术时,用于非易失性配置、代码/数据存储或专用嵌入式存储用途 |
| MRAM | 是 | 通过磁状态表示数据 | 访问快、耐久性高且无需刷新 | 成本、密度、写入能耗和可用容量取决于 MRAM 世代及具体产品 | 在已支持的器件中,用于持久状态、代码/数据存储或快速非易失性工作数据 |
此表为定性比较。“更快”“密度更高”和“功耗更低”只是方向,不是器件选型结论。工艺节点、接口、温度、访问模式、待机模式、封装和控制器配置都可能改变看似显然的比较结果。
PSRAM 为何适合低功耗产品¶
PSRAM 通常面向与传统独立 DRAM 不同的工作点:在中等容量和带宽需求下,提供更简单的接口、更少的控制器开销和低功耗器件状态。对于不需要 DRAM 级带宽的可穿戴、便携式和电池供电设计,这种组合在部分系统中可能降低系统级功耗,但并非普遍结论。应结合实际器件、控制器、电源状态和代表性工作负载进行比较。
这并不意味着 PSRAM 在每字节存储或每次访问的功耗上都更低。高频运行的 PSRAM 接口、持续扫描的帧缓冲区,以及大量的显示、音频或 AI 数据传输,仍可能成为存储器功耗的主要来源。应按实际时钟、电压、温度和访问模式,比较所选器件的活动、待机、数据保持和唤醒电流;器件支持且确实有节能收益时,再使用 Half-Sleep 等模式。
各类存储器在系统中的位置¶
可以从数据的生命周期和访问的紧迫程度入手:
- 将对中断敏感、频繁访问且对延迟要求严格的代码和数据放在内部 SRAM,或文档明确支持的其他低延迟存储器中。
- 如果增加容量带来的收益值得付出额外的延迟和带宽开销,可将运行时使用的大型数据工作集放在 PSRAM 中。
- 将必须在断电后保留的数据放在非易失性存储器中,通常使用 NOR Flash、NAND Flash 或 eMMC;系统支持时,也可使用 RRAM、MRAM。
- 将低频使用的资源保存在非易失性存储器中,仅在当前操作需要时搬运或解码所需部分。
一种常见的嵌入式布局如下:
这是安排数据存储位置的策略,并非每个缓冲区都必须遵循的固定规则。小型、频繁复用的图像可能更适合放在 SRAM;大型模型可能保留在 Flash 或 PSRAM;显示系统也可能因为完整帧缓冲区无法放入内部存储器而需要 PSRAM。
PSRAM 性能受接口带宽制约¶
PSRAM 容量并不意味着带宽无限。在支持的 SF32 配置中,主机可通过 OPI 或 HPI 等接口访问它;这条路径可能由 CPU 访问、缓存、DMA、图形、显示扫描输出、音频、无线和存储活动共享。即使 PSRAM 容量足够,当多个使用方同时请求接口时,产品仍可能出现卡顿或缓冲区欠载。
接口宽度与传输速率¶
原始有效载荷速率由数据线宽度、每个时钟的传输次数和所选接口时钟决定:
payload rate (MB/s) = data lines × transfers per clock × interface clock (MHz) ÷ 8
下表中的 DTR/DDR 行按每个时钟传输两次计算,双通道行还假设两个通道均以表列频率并发运行。这些只是计算前提,并不表示所有芯片、封装、存储器件或 SDK 配置都支持相应模式和频率。
| 接口与传输模式 | 有效载荷数据线数量 | 每时钟传输次数 | 每 MHz 的有效载荷速率 | 用于比较的代表性时钟 | 理论有效载荷速率 |
|---|---|---|---|---|---|
| QSPI / STR | 4 | 1 | 0.5 MB/s | 72 MHz | 36 MB/s |
| QSPI / DTR | 4 | 2 | 1 MB/s | 72 MHz | 72 MB/s |
| OPI / DDR | 8 | 2 | 2 MB/s | 144 MHz | 288 MB/s |
| 双通道 OPI / DDR | 2 × 8 = 16 | 2 | 4 MB/s | 144 MHz | 576 MB/s |
| HPI / DDR | 16 | 2 | 4 MB/s | 144 MHz | 576 MB/s |
| 双通道 HPI / DDR | 2 × 16 = 32 | 2 | 8 MB/s | 144 MHz | 1,152 MB/s |
数据线列只计算有效载荷信号,不包括时钟、片选或其他控制引脚。这些时钟频率是文档中记载的示例,不是整个系列的上限。SF32LB52-DevKit-LCD 开发板指南列出了 144 MHz OPI-PSRAM 和 72 MHz、STR 模式的 QSPI-NOR;SF32LB58-DevKit-LCD 开发板指南列出了 144 MHz HPI-PSRAM,以及外部 Flash 工作在 72 MHz 的开发板型号。QSPI/DTR 行采用相同的 72 MHz 时钟,仅用于单独展示双倍数据速率传输的影响。双通道行假设两个通道可以并发使用,展示的是聚合总线宽度,并不保证单一 CPU 数据流可获得双倍的有效速率。这些数值是总线有效载荷上限,不是实测的应用吞吐量。命令/地址周期、虚周期(dummy cycle)、刷新、读写切换、控制器限制、缓存未命中、DMA 仲裁、PCB 信号完整性和并发使用方都会降低可用速率。有效配置取决于所选芯片、封装、存储器件和 SDK 配置。
思澈科技(SiFli)的芯片型号指南列出了以下双通道配置示例:SF32LB566VCB36 的 MPI1 上有 8 MB OPI-PSRAM,MPI2 上有 4 MB;SF32LB586VDD36 的两个接口各有 16 MB HPI-PSRAM;SF32LB587VEE56 的两个接口各有 32 MB HPI-PSRAM。这些具体型号用于说明存储拓扑,并不保证单个使用方能达到表中的双通道聚合有效载荷速率。进行带宽关键型设计前,应核对完整订购型号和 SDK 内存映射;同一系列的其他封装或 SKU 可能采用不同的存储拓扑。
双通道存储器为何重要¶
双通道的价值不只是提高总带宽。如果所选 SF32 的存储器映射和显示控制器配置允许分别安排数据,可以让一个通道主要服务带宽要求严格的使用方,另一个通道承担系统的其他访问。
RGB/DPI 显示是常见例子。显示控制器必须按像素时钟持续读取帧缓冲区;读取不及时可能造成缓冲区欠载、画面伪影或刷新不稳定。可以将帧缓冲区放在一个 PSRAM 通道对应的存储区域,将 CPU、ePicasso 或 DMA 访问的 UI 资源、音频缓冲区及其他工作数据放在另一个通道对应的区域,从而减少显示读取路径上不必要的争用。
这是一种带宽分配策略,并不保证所有配置都能获益。应核实器件是否支持所需的通道映射、帧缓冲区基地址是否位于预期通道,以及显示控制器和其他总线主机能否分别访问两个通道。还应测量扫描输出稳定性、帧时间,以及音频、蓝牙(Bluetooth)和 CPU 同时工作时的表现。地址交织、共享互连或不合适的缓冲区布局,都可能削弱预期收益。
缓存与外部存储器执行¶
对于支持 I-cache 和 D-cache、已启用相应缓存且已将外部存储区域映射为可缓存的 SF32 器件,缓存能显著减少代码或数据位于外部 DRAM/PSRAM 时的重复慢速访问:
- I-cache 将最近取用的指令行保留在 CPU 附近。具有局部性的代码,例如循环、反复调用的函数、RTOS 路径或 UI 代码,在一次填充缓存后可避免重复从 PSRAM 或 NOR 取指。
- D-cache 将最近读取的数据行保留在 CPU 附近。它有助于 CPU 重复读取表、资源和工作数据,但不会消除一次性流式访问所占用的带宽。
- **不具备硬件缓存一致性的 DMA,需要明确缓冲区所有权并维护缓存。**对于可缓存、但硬件不保证一致性的缓冲区,DMA 或外设读取 CPU 写入的数据前,应执行缓存清理(clean)。DMA 写入前,应按平台规定准备接收缓冲区,防止脏缓存行随后回写、覆盖新收到的数据。传输完成后,CPU 读取结果前应使过期缓存行失效(invalidate)。DMA 持有缓冲区期间,CPU 不应访问该缓冲区。
DMA 缓冲区的起始地址和分配大小应按缓存行对齐,且不能与其他数据共享缓存行。使共享的脏缓存行失效,可能丢失其他变量的修改;DMA 写入后再清理该缓存行,则可能覆盖新数据。请使用所选 SDK 或 RTOS 的 API,遵守其缓存行大小、传输完成检查和内存屏障要求,不要直接套用其他处理器的缓存 API 或对齐值。不可缓存或具备硬件一致性的缓冲区,应遵循平台各自的同步规则。
因此,缓存可以利用访问局部性减少重复访问,但不能替代带宽预算。连续读取帧缓冲区进行扫描输出,或一次性传输整个缓冲区,仍需占用相应的 PSRAM 接口带宽。
启动时将代码复制到 PSRAM 并执行(非 XIP)¶
思澈科技(SiFli)针对 SF32LB52x 和 SF32LB58x 发布的启动流程文档,均说明了将外部 NAND Flash 中的应用程序复制到 PSRAM 中执行的配置;两份文档也都列出了通过 SDIO 使用外置 SD Flash 的启动配置。思澈科技(SiFli)将这种方式称为非 XIP:XIP 是从 NOR Flash 的映射地址直接执行代码,存储地址与执行地址相同;非 XIP 则将代码从 Flash 复制到 RAM 执行,存储地址与执行地址不同。详见 SF32LB52x 启动流程文档和 SF32LB58x 启动流程文档(中文)。这些是有文档依据的特定配置,并不意味着所有 SKU 或开发板都支持。请核对目标器件支持的启动介质、内存映射、链接脚本/分区配置及 SDK。将选定代码放在 PSRAM 中执行可把紧缺的片内 SRAM 留给其他用途,但不能保证执行速度更快;应结合实际缓存设置、PSRAM 争用和代表性工作负载进行测量。
在具有代表性的思澈科技(SiFli)配置中,72 MHz QSPI/STR NOR 的原始有效载荷上限为 36 MB/s;144 MHz OPI/DDR 和 HPI/DDR PSRAM 的上限分别为 288 MB/s 和 576 MB/s;双通道变体的聚合上限则分别为 576 MB/s 和 1,152 MB/s。这些数值是接口有效载荷上限,不是应用性能结果。在受支持的配置中,PSRAM 更高的接口上限可能比 QSPI NOR 提供更多取指带宽,但不能仅凭此断定从 PSRAM 执行一定更快。实际结果取决于存储器件延迟、代码局部性、缓存配置、PSRAM 争用,以及应用受 CPU、缓存还是带宽限制。请测量启动时间、缓存未命中行为和代表性工作负载,不要根据原始总线速率比推断应用性能提升。
对于大量使用 PSRAM 的设计,请在目标硬件上验证:
- 峰值用户场景中,哪些使用方会并发读写 PSRAM?
- 缓冲区是顺序读写、突发读写、随机访问,还是被 CPU 重复访问?
- 缓存行为是否减少重复访问,且 DMA 周围的缓存维护步骤是否正确?
- 帧缓冲区能否采用局部刷新、更小的绘制缓冲区或压缩,而不是分配更大的完整帧缓冲区?
- 显示刷新、蓝牙音频和应用工作同时发生时会怎样?
- 所选 PSRAM 的待机或睡眠行为是否符合数据保持和电池寿命要求?
请测量帧时间、缓冲区欠载、CPU 停顿、电流和恢复行为。不要仅根据 PSRAM 容量或接口宽度推断系统性能。
适用 AP Memory PSRAM 的 Half-Sleep¶
部分 AP Memory PSRAM 器件提供 Half-Sleep 模式:这是一种能保留已存数据的超低功耗状态。当系统需要暂停 PSRAM 活动,但又不能在每次空闲后都从 Flash 重新填充缓冲区或重新计算数据时,它特别有用。
Half-Sleep 是器件特定的电源模式,不是所有 PSRAM 都具备的通用特性。AP Memory APS6408L-OBMx DDR OPI Xccela PSRAM 数据手册记录了其中一种实现。其进入和退出时序、模式寄存器编码、允许的时钟行为、电流、温度限制和数据保持保证都不能直接套用到其他 PSRAM 系列或版本;必须使用实际装配器件的数据手册及 SDK 支持。
相对功耗节省¶
以下比较依据 AP Memory 的 Rev. 3.7 数据手册,可从器件厂商网站获取。使用其中的限值前,请确认文档版本与实际器件相符。
对于同一 APS6408L-OBMx 参考器件在保持整个存储阵列数据时,AP Memory 公布了下列典型平均待机与 Half-Sleep 电流。在供电电压相同的条件下,相对电流降低比例也就是 PSRAM 的相对功耗降低比例。
| 温度 | 标准待机电流 | Half-Sleep 电流 | 相对降低比例 |
|---|---|---|---|
| 25 °C | 66 µA | 20 µA | 约 70% |
| 85 °C | 190 µA | 120 µA | 约 37% |
因此,在 25 °C 下,Half-Sleep 在保持整个存储阵列数据时,所用电流约为该参考器件标准待机电流的 30%。由于数据保持电流会随温度升高而增大,该模式在 85 °C 下节省的比例更小。这些数值比较的是两种空闲/保持状态,而不是 Half-Sleep 与活动读写电流的比较;它们是典型值,并非设计保证。部分阵列刷新设置可进一步改变电流,但可能不会保持每个存储区域;只有在数据保持策略允许时才能使用。
Half-Sleep 设计规则¶
不要混淆电流保证条件中的 150 ms 与该版本表 30 规定的 150 µs 最短 Half-Sleep 持续时间和 150 µs 退出时序。平均电流低并不意味着没有刷新电流尖峰,因此还应验证稳压器和去耦电容的动态响应。与 Half-Sleep 不同,深度掉电(Deep Power Down)会丢失存储内容,退出后模式寄存器恢复默认值。
参考数据手册的电流表注释限定为 64 Mb 器件、时钟不翻转的条件;25 °C 下的慢速刷新电流还要求启用 Slow Refresh Frequency。VDD 和 VDDQ 的规定范围为 1.62–1.98 V。规定的 Half-Sleep 电流仅在进入该模式 150 ms 后保证,但这并不意味着表中的典型值就是保证上限。对于更短的空闲时段,应测量进入、数据保持和退出全过程的电流波形,不能将稳定后的电流直接用于整个时段。
- 只有在所有 CPU、DMA、显示、音频、无线和存储使用方均已停止访问 PSRAM 区域后,才能进入 Half-Sleep。进入过程中或睡眠期间的事务可能损坏传输,或意外唤醒器件。
- 将退出视为需要调度的唤醒代价。固件必须在代码、DMA 或外设控制器再次访问 PSRAM 前预留规定的退出时间。
- 应让 PSRAM 供电以及所选器件要求的信号保持在数据保持规格范围内。Half-Sleep 只有在满足文档规定的供电条件时才保留数据;它不能替代非易失性存储器。
- 测量完整系统状态,而不仅是 PSRAM 电流。如果 CPU、显示、接口时钟或其他子系统仍保持活动,节省的功耗可能被抵消。
空闲间隔很短时,进入和退出模式的能耗可能超过节省的能耗。暂停时间较长时,用 Half-Sleep 保留帧缓冲区、已解码资源或模型缓冲区,可以避免重新加载或重建数据的开销。应在目标开发板上测量活动、Half-Sleep 和唤醒能耗,确定空闲时间至少多长才有净节能收益。
SF32 设计中的 PSRAM¶
SF32 的存储器配置取决于具体型号、封装和模组。思澈科技(SiFli)的 SF32LB5x 模组文档列出了 OPI-PSRAM 与 HPI-PSRAM 配置,容量和拓扑随模组型号而变化。有些配置采用合封 PSRAM,有些产品则引出外部存储器接口。不能仅凭 SF32 系列名称或外部存储器接口,就认为某个型号已经配有 PSRAM。
请查阅具体型号的产品页面和硬件设计指南,确认容量、接口、封装限制、布线要求,以及外设同时工作时的限制。PSRAM 的典型用途包括:
- **图形:**当 SRAM 不足时,使用 PSRAM 存放大型帧缓冲区、绘制缓冲区、图像或字体。图形概览说明从渲染到显示的流程及 PSRAM 带宽影响。
- **音频和蓝牙:**只有在测试并发流量后才使用它存放更大的队列或资源;对延迟敏感的控制结构应保留在合适的低延迟存储器中。
- **AI:**需要时可用于大型模型权重或张量;频繁访问或对延迟敏感的缓冲区,应放在文档明确支持且更适合的存储区域。
- 压缩:eZip可在解码前减少资源占用和传输流量。在支持的 SF32LB55x、SF32LB56x 和 SF32LB58x 器件上,TurboPixel通过固定压缩率的有损压缩,降低最终帧缓冲区所需的 PSRAM 容量及带宽;它不是资源存储格式。
实用选型原则¶
当问题是容量,且工作负载能够容忍所选存储路径的延迟和带宽限制时,选择 PSRAM。当问题是确定性延迟、频繁的小型随机访问,或时间关键的 DMA/控制路径时,应优先考虑更多内部 SRAM,或重新设计缓冲策略。当数据必须跨断电保留时,选择非易失性存储器;只有在确切 SoC 或存储器产品已公开 RRAM 或 MRAM 的可用性和工作限制时,才选择这两类技术。
稳健的架构会有意组合多个内存层级:用非易失性存储保存持久数据,用 PSRAM 容纳大型活动数据,用 SRAM 承载必须及时、可预测完成的工作。
最后更新: