概述
什么是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.7~2.0V,核心电压 1.8V。
控制结构
PHY:物理层,负责时序校准,可编程驱动强度,信号完整性增强。
SPIC:控制层,用于时序控制,协议转换,仲裁等等。
Master:CPU、DMA、CRYPTO、WIFI等。
psram control architecture
PSRAM功能特性
随机访问:允许在任意地址读写数据。
Burst访问:支持连续读写多个数据,提高数据传输效率。
待机模式(Standby):关闭部分电路以降低功耗,保留存储数据。
休眠模式(Deep Sleep):关闭所有功能电路,所有刷新操作停止,存储单元中的数据将丢失。
PSRAM 使用方法
自动初始化PSRAM
在设备启动(Boot)之后,SDK 会自动判断芯片是否集成了 PSRAM(伪静态随机存取存储器),随后执行型号检测并进行初始化操作。
以下是初始化 PSRAM 的日志示例:
115:12:01.724 [PSRAM-I] PSRAM Ctrl CLK: 400000000 Hz 215:12:01.724 [BOOT-I] Init WB PSRAM
初始化完成后,自动进行PSRAM DQS 延迟校准,通过动态调整 DQS 与 DQ 信号的相位对齐,从而优化信号的采样窗口。
以下是校准成功的日志示例(当 WindowSize 小于 9 时,视为校准失败):
115:12:01.724 [PSRAM-I] CalNmin = 2 CalNmax = 17 WindowSize = 16 phase: 0
内存布局(LD)规划
Menuconfig 配置选项
通过 menuconfig 选择 PSRAM 的链接策略(Link Option):
PSRAM 使用须知
高温下使用Winbond psram
分布式行刷新: 动态分散刷新,由硬件自动调度,对软件透明。将196ms的标准刷新周期 拆分为多个间隔均匀的刷新命令,分散在正常访问间隙,避免集中刷新导致的带宽占用。
TCEM(片选低电平最大时间): 分布式刷新的最大间隔由 TCEM决定,TCEM的配置需根据实际工作温度手动调整。SDK 默认采用常温(T ≤ 85℃)参数配置,若应用场景涉及高温环境(T > 85℃),用户需按以下流程修改代码以确保数据可靠性:
配置规则:
温度范围 |
刷新策略 |
最大刷新间隔 |
---|---|---|
T ≤ 85℃ |
标准刷新模式 |
4μs |
85℃ < T ≤ 125℃ |
增强刷新模式 |
1μs |
修改步骤:
定位代码文件:
打开 SDK 中的
ameba_psram.c
文件,找到函数PSRAM_CTRL_Init()
。修改代码:
1 // 高温模式配置(T > 85℃)
2 psram_ctrl->TPR0 = (CS_TCEM(Psram_Tcem_T85 * 1000 / PsramInfo.PSRAMC_Clk_Unit / 32) |
3 (TPR0_OTHER_FIELDS));
Row Hammer 效应防护
物理机制与风险
成因:基于 DRAM 存储单元电荷泄漏特性,高频次访问目标行会导致相邻行电容电荷异常流失。
后果:引发单/多位翻转(Bit Flip),造成数据损坏或系统崩溃。
防护方案
分布式行刷新
Cache 访问稀释:
在带有Cache属性的PSRAM系统中,Cache通过减少对物理内存的直接访问频率,可显著降低Row Hammer的发生概率。其核心原理如下:
访问频率稀释:Cache作为CPU与PSRAM之间的缓冲层,会将多次逻辑访问合并为少量物理访问,减少了对同一存储行的高频激活。
突发访问优化:Cache的预取(Prefetch)和批量写回(Write-back)机制,将随机访问转化为连续块传输,避免频繁切换行地址。
可靠性验证数据
在验证阶段,通过产品抽样检测结果如下:
测试参数 |
指标 |
---|---|
环境条件 |
125℃ 高温,1.05V 超压供电 |
攻击强度 |
8.33M次/秒行激活 |
测试时长 |
24 小时连续运行 |
数据完整性 |
0 比特翻转 |
启用 Cache 后,物理行激活频率远低于测试值(8.33M次/秒)。
结合硬件级分布式行刷新,可完全消除 Row Hammer 引发的数据错误。
正常使用访问不会出现对同一行进行高频激活访问。
备注
结论:在 Cache 与硬件防护协同工作模式下,Row Hammer 风险可控制在理论可忽略水平,用户无需额外设计防护逻辑。
PSRAM TP
实测数据:
PSRAM 支持直接访问与 DMA 访问模式,其吞吐量性能指标如下表所示:
访问模式 |
写入 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 |
访问模式 |
写入 32 字节性能 |
读取 32 字节性能 |
||
---|---|---|---|---|
理论值(Mbps) |
KM4 平台实测值(Mbps) |
理论值(Mbps) |
KM4 平台实测值(Mbps) |
|
直接访问 (回写模式) |
1536 or 1238.71 |
1248.78 |
1476.923 or 1200 |
1010.526 |
DMA 访问 |
853.332 |
874.71 |
访问模式 |
写入 32 字节性能 |
读取 32 字节性能 |
||
---|---|---|---|---|
理论值(Mbps) |
KM4 平台实测值(Mbps) |
理论值(Mbps) |
KM4 平台实测值(Mbps) |
|
直接访问 (回写模式) |
2461.538 or 1939.394 |
(32*8bit)/(123ns)=2081.30 |
2370.37 or 1882.353 |
(32*8bit)/(152ns)=1684.21 |
DMA 访问 |
(32*8bit)/(180ns)=1422.22 |
(32*8bit)/(175.60ns)=1457.85 |
访问模式 |
写入 32 字节性能 |
读取 32 字节性能 |
||
---|---|---|---|---|
理论值(Mbps) |
NP 平台实测值(Mbps) |
理论值(Mbps) |
NP 平台实测值(Mbps) |
|
直接访问 (回写模式) |
1939.394 |
(32*8bit)/(123ns)=2081.30 |
1882.353 |
(32*8bit)/(152ns)=1684.21 |
DMA 访问 |
(32*8bit)/(180ns)=1422.22 |
(32*8bit)/(175.60ns)=1457.85 |
性能测试说明:
吞吐量理论计算依据:
测试数据包含可变初始延迟,具体延迟周期数(1T 或 2T)由 RWDS 信号决定。
数据包头与延迟周期存在 1T 重叠。
由于采用 DDR PSRAM,传输 32 字节需要 16 个时钟周期(16T)。
直接访问特性:
默认启用 PSRAM 缓存属性,性能测试需综合考虑缓存影响。
4 字节读取操作:
缓存命中时:CPU 直接从缓存读取 4 字节。
缓存未命中时:需从 PSRAM 读取整缓存行(cacheline size)数据到缓存。
4 字节写入操作:
缓存命中时:更新缓存数据,缓存刷新时回写整缓存行到 PSRAM。
缓存未命中时:根据写分配策略,先从 PSRAM 读取整缓存行到缓存,再更新缓存数据。
表格中的读写吞吐量数据基于缓存未命中/刷新场景(即强制访问 PSRAM)。
写分配模式的吞吐量等同于缓存未命中读取场景。
理论值未包含指令执行时间开销。
理论值计算方法:
计算公式:
总耗时 = [CMD + ADDR + (LC-1)] × TPSRAM + 数据传输周期 + 硬件保持时间
理论吞吐量 = (数据位宽) / 总耗时
参数说明:
参数 |
计算方式 |
参数说明 |
取值/单位 |
---|---|---|---|
TPSRAM |
1 / 时钟频率 |
PSRAM时钟周期 |
例:150MHz→6.667ns |
CMD + ADDR |
固定3周期 |
命令阶段开销 |
3 cycles |
LC |
延迟周期 |
由PSRAM型号和时钟决定 |
例:6 cycles |
数据位宽 |
单次传输数据量 |
32字节=256位(32×8) |
256 bits |
数据传输周期 |
32/2 × TPSRAM |
32位数据需要16个时钟周期传输完成 |
16×TPSRAM |
硬件保持时间 |
写操作:1周期 |
总线释放缓冲时间 |
1 or 2 cycles |
读操作:2周期 |