CN / EN
文档反馈
感谢关注汇顶文档,期待您的宝贵建议!
感谢您的反馈,祝您愉快!

APP OSPI驱动

该驱动仅适用于GR5526。

宏定义

OSPI_PSRAM_DEVICE_ID

表 450 OSPI_PSRAM_DEVICE_ID宏定义
描述

PSRAM ID

0x13

详细信息请参考文件:SDK_Folder\drivers\inc\app_graphics_ospi.h

OSPI_PSRAM_MIN_XIP_ADDRESS

表 451 OSPI_PSRAM_MIN_XIP_ADDRESS宏定义
描述

XIP基地址

OSPI0_XIP_BASE(0x30080000UL)

详细信息请参考文件:SDK_Folder\drivers\inc\app_graphics_ospi.h

OSPI_PSRAM_MAX_XIP_ADDRESS

表 452 OSPI_PSRAM_MAX_XIP_ADDRESS宏定义
描述

64 Mbit空间,最大XIP地址

(OSPI0_XIP_BASE + 0x7FFFFF)

详细信息请参考文件:SDK_Folder\drivers\inc\app_graphics_ospi.h

OSPI_PSRAM_BYTE_SIZE

表 453 OSPI_PSRAM_BYTE_SIZE宏定义
描述

PSRAM空间大小

0x800000

详细信息请参考文件:SDK_Folder\drivers\inc\app_graphics_ospi.h

结构体

app_graphics_ospi_params_t

结构体定义如下:

表 454 app_graphics_ospi_params_t结构体成员
成员 描述 取值

app_ospi_clock_freq_e ospi_freq

OSPI时钟频率

该参数的取值可以是下列值中的任意一个:

  • OSPI_CLOCK_FREQ_48MHz = 0x00(48 MHz)
  • OSPI_CLOCK_FREQ_32MHz = 0x01(32 MHz)
  • OSPI_CLOCK_FREQ_24MHz = 0x02(24 MHz)
  • OSPI_CLOCK_FREQ_16MHz = 0x03 (16 MHz)

app_ospi_psram_drv_strength_e drv_strength

OSPI驱动强度, 驱动强度越大功耗越高

该参数的取值可以是下列值中的任意一个:

  • OSPI_PSRAM_DRV_STR_FULL = 0x00(25 Ohm)
  • OSPI_PSRAM_DRV_STR_HALF = 0x01(50 Ohm)
  • OSPI_PSRAM_DRV_STR_ONE_FORTH = 0x02(100 Ohm)
  • OSPI_PSRAM_DRV_STR_ONE_EIGHTH = 0x03(200 Ohm)

app_ospi_psram_rd_latency_e rd_lc

读访问latency

该参数的取值可以是下列值中的任意一个:

  • OSPI_PSRAM_RD_LATENCY_3 = 0x00
  • OSPI_PSRAM_RD_LATENCY_4 = 0x01
  • OSPI_PSRAM_RD_LATENCY_5 = 0x02
  • OSPI_PSRAM_RD_LATENCY_6 = 0x03
  • OSPI_PSRAM_RD_LATENCY_7 = 0x04

app_ospi_psram_wr_latency_e wr_lc

写访问latency

该参数的取值可以是下列值中的任意一个:

  • OSPI_PSRAM_WR_LATENCY_3 = 0x00
  • OSPI_PSRAM_WR_LATENCY_4 = 0x04
  • OSPI_PSRAM_WR_LATENCY_5 = 0x02
  • OSPI_PSRAM_WR_LATENCY_6 = 0x06
  • OSPI_PSRAM_WR_LATENCY_7 = 0x01

uint32_t phy_delay

DQS PHY延时档位

该参数的取值可以是下列值中的任意一个:

  • OSPI_PHY_DELAY_TAP_2 = 0x01
  • OSPI_PHY_DELAY_TAP_3 = 0x02(只能在频率小于等于32 MHz下使用)
  • OSPI_PHY_DELAY_TAP_4 = 0x03(只能在频率小于等于32 MHz下使用)

uint8_t is_read_prefetch

是否开启预取功能

  • true:使能

  • false:不使能

详细信息请参考文件:SDK_Folder\drivers\inc\app_graphics_ospi.h

枚举

app_ospi_clock_freq_e

枚举定义如下:

表 455 app_ospi_clock_freq_e枚举成员
成员 描述

OSPI_CLOCK_FREQ_48MHz = 0x00

OSPI时钟频率48 MHz

OSPI_CLOCK_FREQ_32MHz = 0x01

OSPI时钟频率32 MHz

OSPI_CLOCK_FREQ_24MHz = 0x02

OSPI时钟频率24 MHz

OSPI_CLOCK_FREQ_16MHz = 0x03

OSPI时钟频率16 MHz

详细信息请参考文件:SDK_Folder\drivers\inc\app_graphics_ospi.h

app_ospi_phy_delay_e

枚举定义如下:

表 456 app_ospi_phy_delay_e枚举成员
成员 描述

OSPI_PHY_DELAY_TAP_2 = 0x01

DQS Phy延时档位2

OSPI_PHY_DELAY_TAP_3 = 0x02

DQS Phy延时档位3(只能在频率小于等于32 MHz下使用)

OSPI_PHY_DELAY_TAP_4 = 0x03

DQS Phy延时档位4(只能在频率小于等于32 MHz下使用)

详细信息请参考文件:SDK_Folder\drivers\inc\app_graphics_ospi.h

app_ospi_psram_drv_strength_e

枚举定义如下:

表 457 app_ospi_psram_drv_strength_e枚举成员
成员 描述

OSPI_PSRAM_DRV_STR_FULL = 0x00

PSRAM采用最强驱动

OSPI_PSRAM_DRV_STR_HALF = 0x01

PSRAM采用1/2强度驱动

OSPI_PSRAM_DRV_STR_ONE_FORTH = 0x02

PSRAM采用1/4强度驱动

OSPI_PSRAM_DRV_STR_ONE_EIGHTH = 0x03

PSRAM采用1/8强度驱动

详细信息请参考文件:SDK_Folder\drivers\inc\app_graphics_ospi.h

app_ospi_psram_rd_latency_e

枚举定义如下:

表 458 app_ospi_psram_rd_latency_e枚举成员
成员 描述

OSPI_PSRAM_RD_LATENCY_3 = 0x00

配置读latency为3

OSPI_PSRAM_RD_LATENCY_4 = 0x01

配置读latency为4

OSPI_PSRAM_RD_LATENCY_5 = 0x02

配置读latency为5

OSPI_PSRAM_RD_LATENCY_6 = 0x03

配置读latency为6

OSPI_PSRAM_RD_LATENCY_7 = 0x04

配置读latency为7

详细信息请参考文件:SDK_Folder\drivers\inc\app_graphics_ospi.h

app_ospi_psram_wr_latency_e

枚举定义如下:

表 459 app_ospi_psram_wr_latency_e枚举成员
成员 描述

OSPI_PSRAM_WR_LATENCY_3 = 0x00

配置写latency为3

OSPI_PSRAM_WR_LATENCY_4 = 0x04

配置写latency为4

OSPI_PSRAM_WR_LATENCY_5 = 0x02

配置写latency为5

OSPI_PSRAM_WR_LATENCY_6 = 0x06

配置写latency为6

OSPI_PSRAM_WR_LATENCY_7 = 0x01

配置写latency为7

详细信息请参考文件:SDK_Folder\drivers\inc\app_graphics_ospi.h

app_ospi_access_mode_e

枚举定义如下:

表 460 app_ospi_access_mode_e枚举成员
成员 描述

OSPI_ACCESS_MEMORY = 0

访问PSRAM的内存

OSPI_ACCESS_REGISTER

访问PSRAM的控制寄存器

OSPI_ACCESS_UNSET

未使用

详细信息请参考文件:SDK_Folder\drivers\inc\app_graphics_ospi.h

app_ospi_work_state_e

枚举定义如下:

表 461 app_ospi_work_state_e枚举成员
成员 描述

OSPI_STATE_DEEP_SLEEP = 0

深度睡眠,除寄存器数据,所有内存数据擦除

OSPI_STATE_HALF_SLEEP = 1

浅度睡眠,所有数据保留

OSPI_STATE_ACTIVE = 2

激活状态,不进入睡眠

详细信息请参考文件:SDK_Folder\drivers\inc\app_graphics_ospi.h

app_ospi_pasr_e

枚举定义如下:

表 462 app_ospi_pasr_e枚举成员
成员 描述

OSPI_PASR_FULL = 0x00

全部刷新

OSPI_PASR_BOTTOM_4MB = 0x01

刷新范围为低4 MB空间

OSPI_PASR_BOTTOM_2MB = 0x02

刷新范围为低2 MB空间

OSPI_PASR_BOTTOM_1MB = 0x03

刷新范围为低1 MB空间

OSPI_PASR_NONE = 0x04

关闭刷新

OSPI_PASR_TOP_4MB = 0x05

刷新范围为高4 MB空间

OSPI_PASR_TOP_2MB = 0x06

刷新范围为高2 MB空间

OSPI_PASR_TOP_1MB = 0x07

刷新范围为高1 MB空间

OSPI_PASR_MAX

刷新模式个数,仅用于参数检查

详细信息请参考文件:SDK_Folder\drivers\inc\app_graphics_ospi.h

接口函数

表 463 OSPI驱动接口函数
API 芯片
GR551x/GR5x25/GR533x/GR5405 GR5526

app_graphics_ospi_init

N

Y

app_graphics_ospi_deinit

N

Y

app_graphics_ospi_reset

N

Y

app_graphics_ospi_register_psram_reload_func

N

Y

app_graphics_ospi_set_sleep_state

N

Y

app_graphics_ospi_get_sleep_state

N

Y

app_graphics_ospi_get_base_address

N

Y

app_graphics_ospi_set_pasr

N

Y

app_graphics_is_ospi_address

N

Y

app_graphics_ospi_set_read_prefetch

N

Y

app_graphics_ospi_get_read_prefetch

N

Y

app_graphics_ospi_get_byte_size

N

Y

app_graphics_ospi_pasr_update

N

Y

app_graphics_ospi_set_power_state

N

Y

app_graphics_ospi_init

表 464 app_graphics_ospi_init接口
函数原型

uint16_t app_graphics_ospi_init(app_graphics_ospi_params_t * p_params)

功能说明

初始化OSPI

输入参数

p_params:初始化参数的结构体指针

返回值

APP_DRV_xxx:详见SDK_Folder\drivers\inc\app_drv_error.h宏定义

备注

app_graphics_ospi_deinit

表 465 app_graphics_ospi_deinit接口
函数原型

void app_graphics_ospi_deinit(void)

功能说明

反初始化OSPI

输入参数
返回值
备注

app_graphics_ospi_reset

表 466 app_graphics_ospi_reset接口
函数原型

void app_graphics_ospi_reset(void)

功能说明

软件复位PSRAM

输入参数
返回值
备注

复位后,PSRAM控制参数恢复成出厂状态,但数据不变化

app_graphics_ospi_register_psram_reload_func

表 467 app_graphics_ospi_register_psram_reload_func接口
函数原型

void app_graphics_ospi_register_psram_reload_func(psram_reload_func_t psram_reload_func)

功能说明

设置重载函数的指针

输入参数

psram_reload_func:进行资源重载的函数指针

返回值
备注 PSRAM深度睡眠被唤醒后,会执行指针指向的重载函数(包括PSRAM内存资源重载等操作)

app_graphics_ospi_set_sleep_state

表 468 app_graphics_ospi_set_sleep_state接口
函数原型

void app_graphics_ospi_set_sleep_state(app_ospi_work_state_e state)

功能说明

设置系统休眠时OSPI PSRAM的工作状态

输入参数

state:系统休眠时OSPI PSRAM的工作状态

返回值
备注

app_graphics_ospi_get_sleep_state

表 469 app_graphics_ospi_get_sleep_state接口
函数原型

app_ospi_work_state_e app_graphics_ospi_get_sleep_state(void)

功能说明

获取系统休眠时OSPI PSRAM的工作状态

输入参数
返回值

系统休眠时OSPI PSRAM的工作状态

备注

app_graphics_ospi_get_base_address

表 470 app_graphics_ospi_get_base_address接口
函数原型

uint32_t app_graphics_ospi_get_base_address(void)

功能说明

获取OSPI PSRAM基地址

输入参数
返回值

PSRAM基地址

备注

app_graphics_ospi_set_pasr

表 471 app_graphics_ospi_set_pasr接口
函数原型

void app_graphics_ospi_set_pasr(app_ospi_pasr_e area)

功能说明

开始自刷新PSRAM指定区域

输入参数

参考app_ospi_pasr_e

返回值
备注

进行刷新的空间会进行数据保持,不刷新区域不会进行数据保持,按需刷新以节省功耗

app_graphics_ospi_pasr_update

表 472 app_graphics_ospi_pasr_update接口
函数原型

void app_graphics_ospi_pasr_update(uint32_t psram_addr)

功能说明

通过使用地址配置PSRAM的自刷新区域

输入参数

PSRAM的最高使用地址(绝对地址)

返回值
备注

该函数最终调用app_graphics_ospi_set_pasr(app_ospi_pasr_e area)实现自刷新

app_graphics_ospi_set_power_state

表 473 app_graphics_ospi_set_power_state接口
函数原型

void app_graphics_ospi_set_power_state(app_ospi_work_state_e state)

功能说明

设置OSPI工作状态

输入参数

参考app_ospi_work_state_e

返回值
备注
  • 在上一次设置为HALF_SLEEP或DEEP_SLEEP模式后,再次调用传输接口前,都需要调用此函数将OSPI工作状态设置为ACTIVE。
  • OSPI的休眠唤醒跟随系统的休眠唤醒,由SDK统一管控。用户无需调用本接口再次设置OSPI的工作状态,只需调用void app_graphics_ospi_set_sleep_state(app_ospi_work_state_e state)接口指定系统休眠时的OSPI工作状态即可。

app_graphics_ospi_get_byte_size

表 474 app_graphics_ospi_get_byte_size接口
函数原型

uint32_t app_graphics_ospi_get_byte_size(void)

功能说明

获取OSPI PSRAM空间大小

输入参数
返回值

PSRAM空间大小,以byte为单位

备注

app_graphics_is_ospi_address

表 475 app_graphics_is_ospi_address接口
函数原型

__STATIC_INLINE bool app_graphics_is_ospi_address(uint32_t address)

功能说明

检查地址是否在OSPI的PSRAM上

输入参数

address:需检查的地址

返回值
  • true:地址在PSRAM上
  • false:地址不在PSRAM上
备注

app_graphics_ospi_set_read_prefetch

表 476 app_graphics_ospi_set_read_prefetch接口
函数原型

__STATIC_INLINE void app_graphics_ospi_set_read_prefetch(bool enable)

功能说明

使能/不使能预读取PSRAM

输入参数
  • true:使能
  • false:不使能
返回值
备注

app_graphics_ospi_get_read_prefetch

表 477 app_graphics_ospi_get_read_prefetch接口
函数原型

__STATIC_INLINE bool app_graphics_ospi_get_read_prefetch(void)

功能说明

判断OSPI是否激活预读取配置

输入参数
返回值
  • true:激活
  • false:未激活
备注

示例工程

读写PSRAM

说明:

该示例工程仅适用于GR5526。

示例工程主要实现对PSRAM内存的读写,工程路径:SDK_Folder\projects\peripheral\ospi\app_ospi_random_access

流程图

图 31 PSRAM内存读写流程

初始化参数

 init.ospi_freq = O_PSRAM_TEST_CLOCK_FREQ ;
 init.drv_strength = O_PSRAM_TEST_DRV_STRNGTH ;
 init.rd_lc = O_PSRAM_TEST_RD_LATENCY ;
 init.wr_lc = O_PSRAM_TEST_WR_LATENCY ;
 init.phy_delay = O_PSRAM_TEST_PHY_DELAY ;
 init.is_read_prefetch = O_PSRAM_TEST_PREFETCH ;
 app_graphics_ospi_init(&init);
  • init.ospi_freq:时钟频率O_PSRAM_TEST_CLOCK_FREQ,定义为OSPI_CLOCK_FREQ_48MHz,代表OSPI时钟频率48 MHz

  • init.drv_strength:OSPI驱动强度O_PSRAM_TEST_DRV_STRNGTH,定义为OSPI_PSRAM_DRV_STR_ONE_FORTH,代表OSPI驱动强度为100 ohm

  • init.rd_lc:读访问latency选择O_PSRAM_TEST_RD_LATENCY,定义为OSPI_PSRAM_RD_LATENCY_3,代表读访问latency3

  • init.wr_lc:写访问latency选择O_PSRAM_TEST_WR_LATENCY,定义为OSPI_PSRAM_WR_LATENCY_3,代表写访问latency3

  • init.phy_delay:DQS Phy延时选择O_PSRAM_TEST_PHY_DELAY,定义为OSPI_PHY_DELAY_TAP_2,代表DQS Phy延时档位2

  • init.is_read_prefetch:是否开启预取功能,选择O_PSRAM_TEST_PREFETCH,定义为0,代表不开启预取功能

重要函数

  • 获取PSRAM基地址

    app_graphics_ospi_get_base_address()
  • 初始化OSPI

    ospi_init()
  • 写PSRAM

    cpu_write(base_addr, (char*)s_pattern_data, beat_length)
  • 读PSRAM

    cpu_read(base_addr, (char*)x_data, beat_length)
  • 设置OSPI模块工作状态为激活态

    app_graphics_ospi_set_power_state(OSPI_STATE_ACTIVE)

测试验证

示例工程实现不同数据传输模式和不同工作状态下,PSRAM的读写,具体测试可以根据需要进行选择。默认选择CPU+DEEP_SLEEP,连接开发板到PC端,打开串口调试助手,打印读PSRAM的错误率。

+++ Prepare Write-Data OK !
 +++ HalfSleep CPU Access Test, Failed/Total: 0/100 
X 
eee
 +++ HalfSleep CPU Access Test, Failed/Total: 0/200 
X 
eee
 +++ HalfSleep CPU Access Test, Failed/Total: 0/300 
X 
eee
 +++ HalfSleep CPU Access Test, Failed/Total: 0/400 
X 
eee
 +++ HalfSleep CPU Access Test, Failed/Total: 0/500
     app_graphics_ospi_init(&init);

扫描关注

打开微信,使用“扫一扫”即可关注。