PSRAM 使用注意事项

RTL8773EWE-VP 为 RTL8773EWE 的内置 PSRAM 版本,内置的 PSRAM 型号为 W955D8MBYA,通过 LDO_AUX2 供电。 PSRAM 对应的 Pin 为:P7_0~P7_6、SPIC1_WP#、SPIC1_SO、SPIC1_CSN、SPIC1_SI、SPIC_SCK、SPIC_HOLD#, 因此,使用 PSRAM 时请勿额外配置这些 Pin。

PSRAM 使用流程

SDK 为支持该 PSRAM,封装了一些 API 供开发人员使用。

  1. PSRAM 初始化

  • 调用 watch_wb_opi_psram_init()

  1. PSRAM 模式配置设定和退出

  • 在进出 DLPS 时,为满足不同程度的低功耗需求,可以对 PSRAM 进行如下三种模式的配置:

    • Standby:数据可以保存

    • Half Sleep:部分数据可以保存

    • Powerdown:数据不可以保存

在进入 DLPS 时可以在 app_dlps_enter_callback() 中调用接口:

bool fmc_psram_enter_lpm(FMC_PSRAM_IDX_TYPE idx, FMC_PSRAM_LPM_TYPE mode);

配置实例:

fmc_psram_enter_lpm(FMC_PSRAM_IDX1, FMC_PSRAM_LPM_STANDBY_MODE);
fmc_psram_enter_lpm(FMC_PSRAM_IDX1, FMC_PSRAM_LPM_HALF_SLEEP_MODE);
fmc_psram_enter_lpm(FMC_PSRAM_IDX1, FMC_PSRAM_LPM_DEEP_POWER_DOWN_MODE);

在退出 DLPS 时可以在 app_dlps_exit_callback() 中调用接口:

bool fmc_psram_exit_lpm(FMC_PSRAM_IDX_TYPE idx, FMC_PSRAM_LPM_TYPE mode);

配置实例:

fmc_psram_exit_lpm(FMC_PSRAM_IDX1, FMC_PSRAM_LPM_STANDBY_MODE);
fmc_psram_exit_lpm(FMC_PSRAM_IDX1, FMC_PSRAM_LPM_HALF_SLEEP_MODE);
fmc_psram_exit_lpm(FMC_PSRAM_IDX1, FMC_PSRAM_LPM_DEEP_POWER_DOWN_MODE);
  1. PSRAM 刷新区域设定

  • 该 PSRAM 支持在 Standby 或 Half Sleep 模式下刷新不同区域,可以在进入 DLPS 之前配置要刷新的区域,接口为:

    bool fmc_psram_wb_set_partial_refresh(FMC_PSRAM_IDX_TYPE idx, FMC_PSRAM_WB_PARTIAL_ARRAY_REFRESH partial);
    

配置实例:

fmc_psram_wb_set_partial_refresh(FMC_PSRAM_IDX1, FMC_PSRAM_WB_REFRESH_FULL);
fmc_psram_wb_set_partial_refresh(FMC_PSRAM_IDX1, FMC_PSRAM_WB_REFRESH_BOTTOM_1_2);
fmc_psram_wb_set_partial_refresh(FMC_PSRAM_IDX1, FMC_PSRAM_WB_REFRESH_BOTTOM_1_4);
fmc_psram_wb_set_partial_refresh(FMC_PSRAM_IDX1, FMC_PSRAM_WB_REFRESH_BOTTOM_1_8);
fmc_psram_wb_set_partial_refresh(FMC_PSRAM_IDX1, FMC_PSRAM_WB_REFRESH_NONE);
fmc_psram_wb_set_partial_refresh(FMC_PSRAM_IDX1, FMC_PSRAM_WB_REFRESH_TOP_1_2);
fmc_psram_wb_set_partial_refresh(FMC_PSRAM_IDX1, FMC_PSRAM_WB_REFRESH_TOP_1_4);
fmc_psram_wb_set_partial_refresh(FMC_PSRAM_IDX1, FMC_PSRAM_WB_REFRESH_TOP_1_8);
  • FMC_PSRAM_WB_REFRESH_BOTTOM_1_8: 从下往上,零开始算的8分之1区域。

  • FMC_PSRAM_WB_REFRESH_TOP_1_8: 从上往下,最高点往下减的8分之1区域。

  • FMC_PSRAM_WB_REFRESH_FULL: SDK 默认配置。

  1. PSRAM 完全掉电和上电

  • 如果需要在进入 DLPS 下给 PSRAM 从电源处完全掉电,可以在需要掉电时(比如熄屏)使用如下接口,分别配置电源与 Pad:

    • void app_pmu_handle_ldo_aux2(bool enable);
      
    • bool fmc_psram_set_pad_config_for_psram_power_off(FMC_PSRAM_IDX_TYPE idx, bool enter_lpm);
      

备注

  • 在恢复使用 PSRAM 时,需先给 Pad 上电再给 ldo_aux2 上电,最后在稳定电源的必要延时后,重新初始化 PSRAM。 这种方式和 FMC_PSRAM_LPM_DEEP_POWER_DOWN_MODE 的区别是初始化有严格的时间顺序要求,所以上电的显示会有时延。

配置实例:

  • 掉电:

    1. app_pmu_handle_ldo_aux2(DISABLE);
      
    2. fmc_psram_set_pad_config_for_psram_power_off(FMC_PSRAM_IDX1, true);
      
  • 上电初始化:

    1. fmc_psram_set_pad_config_for_psram_power_off(FMC_PSRAM_IDX1, false);
      
    2. app_pmu_handle_ldo_aux2(ENABLE);
      
    3. platform_delay_us(150);
      
    4. watch_wb_opi_psram_init();
      

功耗图表

DLPS 状态下测量 PSRAM 不同模式的功耗整理如下:

PSRAM 功耗

PSRAM 模式

刷新区域设定

电流(uA)

PSRAM 模式

刷新区域设定

电流(uA)

PSRAM 模式

电流(uA)

Standby

Full Array

40

Hybrid Sleep

Full Array

18

Deep power down

0.2

Standby

Bottom 1/2 Array

37

Hybrid Sleep

Bottom 1/2 Array

15

ldo_aux2 power down

0

Standby

Bottom 1/4 Array

35

Hybrid Sleep

Bottom 1/4 Array

13

Standby

Bottom 1/8 Array

34

Hybrid Sleep

Bottom 1/8 Array

12

Standby

Top 1/2 Array

37

Hybrid Sleep

Top 1/2 Array

14

Standby

Top 1/4 Array

35

Hybrid Sleep

Top 1/4 Array

13

Standby

Top 1/8 Array

34

Hybrid Sleep

Top 1/8 Array

12

ESD 环境 PSRAM 受干扰问题

  • HW 建议处理方法

    1. 确保单板 GND 和机壳金属可靠连接,建议使用导电布多点连接。

    2. 5V 输入需要加 TVS ,clamping voltage 建议选用 10V 以下。

    3. 5V 输入电路建议增加过压保护电路。

  • SW 建议恢复流程

    ESD 静电测试时有一定几率会影响到芯片内置 PSRAM 的寄存器设定和数据,在数据异常后 (注意 “备注” 中的情况) 可以通过以下流程进行恢复:

    1. 调用 fmc_psram_wb_set_initial_latency(FMC_PSRAM_IDX_TYPE idx),对寄存器进行重新设定。 这个适用于静电只损坏到了寄存器,此时也会影响读出的数据,该情况下,重设寄存器后,可以读出正确数据。

    2. 如果重设寄存器后数据仍然异常,则需要对PSRAM进行重写。

    备注

    如果是用 CPU 读,应在调用 fmc_psram_wb_set_initial_latency() 后调用 SCB_InvalidateDCache(),避免下一次从内部 cache 中取出当前受影响的错误数据; 如果用 DMA 直接从PSRAM中搬数据,则不需要。