伪静态随机存储器(PSRAM)

概述

PSRAM(Pseudo Static Random Access Memory,伪静态随机存储器)是一种兼具 SRAM 易用性与 DRAM 高密度特性的存储器。它内部集成刷新控制器并对软件完全透明,因此既能像 SRAM 一样通过简单接口按地址随机读写,又能提供接近 DRAM 的存储容量与更低的单位成本。

芯片通过 PSRAM 控制器(PSRAMC)与 PSRAM 通信,实现数据的高速传输,适用于音视频处理、图像传输等需要较大数据缓冲区、且对带宽有一定要求的应用场景。

功能特性

PSRAM 设备特性

  • 存储单元:基于 DRAM 电容结构,集成内部刷新控制器。

  • 并行接口:数据线(DQ0~DQn)与控制信号(CS、CK/CK#、DQS、RESET)。

  • 自动刷新:内部刷新控制器定期维护数据完整性,无需软件干预。

  • 温度自适应刷新:集成温度传感器,高温(>85°C)时自动缩短刷新间隔以保障数据可靠性,常温时延长间隔以降低功耗。

  • 高速访问:支持 DDR(Double Data Rate,双倍数据速率)传输模式,适合高带宽数据处理。

  • Burst 访问:支持连续地址读写,提升数据传输效率。

  • 随机访问:允许在任意地址读写数据。

  • 低功耗模式:支持半睡眠(half-sleep)和深度睡眠(Deep-sleep)两种状态。深度睡眠模式下所有刷新操作停止,数据将丢失。

PSRAM 控制器特性

RTL8721Dx:
  • 时钟频率:最高 200 MHz

  • 支持双倍数据速率(DDR)

  • 8 位数据位宽(DQ8)

  • 支持 PHY 层自动校准

  • 支持半休眠与深度掉电模式

  • 驱动强度可软件配置

  • 对软件透明:只需访问基地址(0x6000_0000)即可访问 PSRAM 内存。

架构

PSRAMC 的结构如下图所示,分为 PHY 层和 SPIC 控制器两部分:

  • PHY 层:物理层,负责时序校准、可编程驱动强度配置和信号完整性增强,直接对接 PSRAM 设备。

  • SPIC 控制器:控制层,负责时序控制、协议转换、仲裁和刷新调度。CPU、DMA 等主控通过 AXI 总线访问 SPIC,进而访问 PSRAM 设备。

../../_images/psram_control_architecture.svg

使用方法

初始化 PSRAM

启动后自动初始化

设备启动后,Bootloader 会自动判断芯片是否集成 PSRAM,随后执行型号检测,选择最优的时钟频率,完成初始化,无需用户干预。初始化启动日志示例如下:

[PSRAM-I] PSRAM Ctrl CLK: 400000000 Hz
[BOOT-I] Init WB PSRAM

DQS 延迟校准

PSRAM 通过额外的 DQS(Data Strobe)信号线与 DQ(Data)数据信号线保持同步。受走线长度、芯片内部路径等因素影响,DQS 与 DQ 之间可能出现相位偏移,导致采样出错。因此初始化完成后,芯片会自动进行 DQS 延迟校准:通过动态调整 DQS 与 DQ 的相位对齐,优化信号的采样窗口。

校准成功的启动日志示例如下:

[PSRAM-I]  Cal win size 16

备注

当校准窗口大小 Cal win size 小于 9 时视为校准失败。此时建议检查信号完整性或适当降低 PSRAM 时钟频率;若仍无法通过校准,请联系 Realtek。

内存布局规划

通过 menuconfig 选择 PSRAM 的链接策略(Link Option),如下:

----MENUCONFIG FOR General----
...
CONFIG Link Option  --->
        IMG1(Bootloader) running on FLASH or SRAM? (FLASH)  --->
        IMG2(Application) running on FLASH or PSRAM? (FLASH)  --->
            (X) FLASH
            ( ) SRAM
            ( ) PSRAM
         IMG2 Data and Heap in SRAM or PSRAM? (SRAM)
            (X) SRAM
            ( ) PSRAM
    [*] ALL PSRAM USED FOR APPLICATION HEAP
...

上述选项用于决定各固件与数据段的存放位置:

  • IMG2(Application) running on FLASH or PSRAM:选择应用程序代码(IMG2)的运行空间。选择 PSRAM 可将应用代码放入 PSRAM 运行,以缓解 Flash 容量或带宽压力。

  • IMG2 Data and Heap in SRAM or PSRAM:选择应用程序数据段与堆的存放位置。数据量较大时可选择 PSRAM

  • ALL PSRAM USED FOR APPLICATION HEAP:勾选后将全部 PSRAM 空间划归应用程序堆使用。

备注

各配置对内存布局的具体影响,参考 RAM 内存布局

如果启动日志中出现如下打印,说明当前的内存布局中 PSRAM 的大小和 PSRAM 设备的实际大小不匹配,需要更新 ameba_layout.ldPSRAM_END 的值为 PSRAM 设备的实际末尾地址。

[PSRAM-W] PSRAM_END mismatch: layout=0x60400000, actual=0x60800000, please update ameba_layout.ld

使用须知

高温下使用 PSRAM

PSRAM 依靠周期性刷新维持数据完整性。为避免刷新操作集中占用带宽,PSRAMC 采用 分布式刷新 策略:将刷新命令均匀分散到正常访问的间隙中执行,对软件透明。分布式刷新的最大间隔由 TCEM(Chip Select 低电平最大时间)决定。

TCEM 参数由 SDK 预设,芯片可能采用常温下的标准刷新模式。若应用场景涉及高温(T > 85℃),用户需按以下流程修改代码以确保数据可靠性。

配置规则

PSRAM 在不同温度范围下的刷新规则如下表所示:

温度范围

刷新策略

最大刷新间隔

T ≤ 85°C

标准刷新模式

4μs

85°C < T ≤ 125°C

增强刷新模式

1μs

修改步骤

  1. 定位代码文件。

    打开 SDK 中的 ameba_psram.c 文件,找到函数 PSRAM_CTRL_Init()

  2. 修改代码。

    Psram_Tcem_T25 为常温(T ≤ 85°C)参数宏,Psram_Tcem_T85 为高温(T > 85°C)参数宏(对应上表的增强刷新模式)。高温场景下, 保持其他内容不变 ,将 Psram_Tcem_T25 修改为 Psram_Tcem_T85 即可。

    psram_ctrl->TPR0 = (CS_TCEM(Psram_Tcem_T85 * 1000 / PsramInfo.PSRAMC_Clk_Unit / 32) |
                      (TPR0_OTHER_FIELDS));
    

Row Hammer 效应防护

物理机制与风险

  • 成因:高频次访问目标行(Aggressor Row)会导致 相邻行(Victim Row) 电容因电荷泄漏特性而产生异常电荷流失。

  • 后果:引发单比特翻转(SEU)或多比特翻转(MBU),导致数据损坏。

防护方案

  • 分布式行刷新:硬件自动执行,将刷新操作均匀分散,避免高频访问集中。

  • Cache 访问稀释:在启用 Cache 的 PSRAM 系统中,Cache 通过减少对物理内存的直接访问频率,显著降低 Row Hammer 发生概率:

    • 预取缓冲:将随机访问合并为突发传输,减少物理行激活次数。

    • 写合并:聚合分散的写操作,减少行地址切换频率。

备注

正常使用场景不会出现对同一行的高频激活访问。如果用户确实有此应用场景且引发了相邻行的比特翻转,请联系 Realtek。