IC:

概述

什么是 PSRAM?

PSRAM(伪静态随机存储器)是一种结合了 SRAM 的易用性和 DRAM 的高密度特性的存储器。它通过动态刷新机制实现类似 SRAM 的接口。

PSRAM 特性

  • 定期自动刷新以维护数据完整性,对软件层完全透明,无需显式管理刷新操作。

  • 集成温度传感器,在高温(>85°C)环境下自动缩短刷新间隔,常温低温下延长间隔,优化功耗效率。

  • 访问速度快,适合高速数据处理。

  • 接口简单,易于集成。

  • 密度中等,提供了比 SRAM 更高的存储容量。

PSRAM 应用场景

  • 嵌入式系统:如 IoT 设备、音频设备、Wi-Fi 模块等

  • 图形显示缓存:用于 LCD/OLED 屏幕驱动

  • 低功耗场景:电池供电设备

  • 实时数据处理:传感器数据缓存和通信协议栈

PSRAM 架构

物理结构

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

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

  • 双沿触发:支持 DDR(Double Data Rate)传输模式

  • 工作电压:1.7V~2.0V,核心电压 1.8V

控制结构

  • PHY:物理层,负责时序校准,可编程驱动强度,信号完整性增强

  • SPIC:控制层,用于时序控制,协议转换,仲裁等

  • Master:CPU、DMA、Crypto、Wi-Fi 等

PSRAM 的控制结构如下图所示:

../../rst_rtos/8_psram/figures/psram_control_architecture.svg

PSRAM 功能特性

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

  • Burst 访问:支持连续读写多个数据,提高数据传输效率

  • 待机模式(Standby):关闭部分电路以降低功耗,保留存储数据

  • 休眠模式(Deep-sleep):关闭所有功能电路,所有刷新操作停止,存储单元中的数据将丢失

PSRAM 使用方法

自动初始化 PSRAM

  • 在设备启动(Boot)之后,SDK 会自动判断芯片是否集成了 PSRAM,随后执行型号检测并进行初始化操作。

    以下是初始化 PSRAM 的日志示例:

    15:12:01.724  [PSRAM-I] PSRAM Ctrl CLK: 400000000 Hz
    15:12:01.724  [BOOT-I] Init WB PSRAM
    
  • 初始化完成后,自动进行 PSRAM DQS 延迟校准,通过动态调整 DQS 与 DQ 信号的相位对齐,从而优化信号的采样窗口。

    以下是校准成功的日志示例(当 WindowSize 小于 9 时,视为校准失败):

    15:12:01.724  [PSRAM-I] CalNmin = 2 CalNmax = 17 WindowSize = 16 phase: 0
    

内存布局(LD)规划

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

----MENUCONFIG FOR General----
CONFIG TrustZone --->
CONFIG Link Option  --->
        IMG1(Bootloader) running on FLASH or SRAM? (FLASH)  --->
        IMG2(Application) running on FLASH or PSRAM? (FLASH)  --->
            (X) FLASH
            ( ) PSRAM
    [ ] PSRAM AS HEAP
CONFIG Mass Production  --->
...

PSRAM 使用须知

高温下使用 Winbond PSRAM

分布式行刷新

动态分散刷新,由硬件自动调度,对软件透明。

将 196ms 的标准刷新周期拆分为多个间隔均匀的刷新命令,分散在正常访问间隙,避免集中刷新导致的带宽占用。

TCEM(片选低电平最大时间)

分布式刷新的最大间隔由 TCEM 决定,TCEM 的配置需根据实际工作温度手动调整。

SDK 默认采用常温(T ≤ 85℃)参数配置,若应用场景涉及高温环境(T > 85℃),用户需按以下流程修改代码以确保数据可靠性。

配置规则

PSRAM 自刷新规则如下表所示:

温度范围

刷新策略

最大刷新间隔

T ≤ 85℃

标准刷新模式

4μs

85℃ < T ≤ 125℃

增强刷新模式

1μs

修改步骤

  1. 定位代码文件

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

  2. 修改代码

    // 高温模式配置(T > 85℃)
    psram_ctrl->TPR0 = (CS_TCEM(Psram_Tcem_T85 * 1000 / PsramInfo.PSRAMC_Clk_Unit / 32) |
                      (TPR0_OTHER_FIELDS));
    

Row Hammer 效应防护

物理机制与风险

  • 成因:基于 DRAM 存储单元电荷泄漏特性,高频次访问目标行会导致相邻行电容电荷异常流失。

  • 后果:引发单/多位翻转(Bit Flip),造成数据损坏或系统崩溃。

防护方案

  • 分布式行刷新

  • Cache 访问稀释:在带有 Cache 属性的 PSRAM 系统中,Cache 通过减少对物理内存的直接访问频率,可显著降低 Row Hammer 的发生概率。其核心原理如下:

    • 访问频率稀释:Cache 作为 CPU 与 PSRAM 之间的缓冲层,会将多次逻辑访问合并为少量物理访问,减少了对同一存储行的高频激活。

    • 突发访问优化:Cache 的预取(Prefetch)和批量写回(Write back)机制,将随机访问转化为连续块传输,避免频繁切换行地址。

可靠性验证数据

在验证阶段,通过产品抽样检测,PSRAM 压力测试数据结果如下表所示:

测试参数

指标

环境条件

125℃ 高温,1.05V 超压供电

攻击强度

8.33M次/秒行激活

测试时长

24 小时连续运行

数据完整性

0 比特翻转

  • 启用 Cache 后,物理行激活频率远低于测试值(8.33M 次/秒)。

  • 结合硬件级分布式行刷新,可完全消除 Row Hammer 引发的数据错误。

  • 正常使用访问不会出现对同一行进行高频激活访问。

备注

在 Cache 与硬件防护协同工作模式下,Row Hammer 风险可控制在理论可忽略水平,用户无须额外设计防护逻辑。

PSRAM TP

实测数据

PSRAM 支持直接访问与 DMA 访问模式,其吞吐量性能指标如下表所示:

PSRAM 吞吐量性能(200MHz)

访问模式

写入 32 字节性能

读取 32 字节性能

理论值(Mbps)

KM4 平台实测值(Mbps)

理论值(Mbps)

KM4 平台实测值(Mbps)

直接访问(回写模式)

1523.81

(32*8bit)/(199.68ns)=1282.05

1454.55

(32*8bit)/(212.16ns)=1204.14

DMA 访问

(32*8bit)/(235.16ns)=1088.64

(32*8bit)/(234.37ns)=1092.27

性能测试说明

  • 吞吐量理论计算依据:

    • 测试数据包含可变初始延迟,具体延迟周期数(1T 或 2T)由 RWDS 信号决定。

    • 数据包头与延迟周期存在 1T 重叠。

    • 由于采用 DDR PSRAM,传输 32 字节需要 16 个时钟周期(16T)。

  • 直接访问特性:

    • 默认启用 PSRAM 缓存属性,性能测试需综合考虑缓存影响。

    • 4 字节读取操作

      • 缓存命中时:CPU 直接从缓存读取 4 字节。

      • 缓存未命中时:需从 PSRAM 读取整个缓存行数据到缓存。

    • 4 字节写入操作

      • 缓存命中时:更新缓存数据,缓存刷新时回写整缓存行到 PSRAM。

      • 缓存未命中时:根据写分配策略,先从 PSRAM 读取整缓存行到缓存,再更新缓存数据。

    • 表格中的读写吞吐量数据基于缓存未命中/刷新场景(即强制访问 PSRAM)。

    • 写分配模式的吞吐量等同于缓存未命中读取场景。

    • 理论值未包含指令执行时间开销。

理论值计算方法

计算公式

总耗时 = [CMD + ADDR + (LC-1)] × TPSRAM + 数据传输周期 + 硬件保持时间

理论吞吐量 = (数据位宽) / 总耗时

参数说明

吞吐量计算参数如下表所示:

参数

计算方式

参数说明

取值/单位

TPSRAM

1/时钟频率

PSRAM时钟周期

例:150MHz→6.667ns

CMD + ADDR

固定 3 周期

命令阶段开销

3 周期

LC

延迟周期

由PSRAM型号和时钟决定

例:6 周期

数据位宽

单次传输数据量

32字节=256位(32×8)

256 比特

数据传输周期

32/2 × TPSRAM

32位数据需要16个时钟周期传输完成

16×TPSRAM

硬件保持时间

写操作:1 周期

总线释放缓冲时间

1 或 2 周期

读操作:2 周期