QSPI

介绍

对于不同底层驱动的QSPI操作实现,统一封装成本文所述hal QSPI接口。 hal相关头文件位于目录:include/aos/hal hal相关实现位于具体的mcu目录下,如:platform/mcu/stm32f1xx/hal

API列表

函数名称 功能描述
hal_qspi_init 初始化指定QSPI端口
hal_qspi_send 从指定的QSPI端口发送数据
hal_qspi_recv 从指定的QSPI端口接收数据
hal_qspi_send_recv 从指定的QSPI端口发送并接收数据
hal_qspi_send_cmd 设置QSPI命令
hal_qspi_finalize 关闭指定QSPI端口

API详情

请参考include/aos/hal/qspi.h

相关宏定义

/* Define the wait forever timeout macro */
#define HAL_WAIT_FOREVER 0xFFFFFFFFU

#define DEFAULT_QSPI_FREQ 400000

相关结数据结构

qspi_dev_t

typedef struct {
    uint8_t       port;   /* qspi port */
    qspi_config_t config; /* qspi config */
    void         *priv;   /* priv data */
} qspi_dev_t;

qspi_config_t

typedef struct {
    qspi_cs_e        cs;
    qspi_work_mode_e mode;
    qspi_transfer_mode_e t_mode;
    uint32_t freq;             /**< communication frequency Hz */
    uint32_t bus_width;
    bool ddr_enable;           /**< SDR mode or DDR mode */
} qspi_config_t;

qspi_cmd_t

typedef struct {
    struct {
        uint32_t skip:1;              /**< Instruction phase skipped if disabled is set to true */
        uint32_t width:3;     /**< Bus width for the instruction */
        uint32_t value:8;             /**< Instruction value */
    } instruction;
    struct {
        uint32_t skip:1;              /**< Address phase skipped if disabled is set to true */
        uint32_t width:3;     /**< Bus width for the address */
        uint32_t size:3;   /**< Address size */
        uint32_t value;              /**< Address value */
    }  address;
    struct {
        uint32_t skip:1;              /**< Alternative phase skipped if disabled is set to true */
        uint32_t width:3;     /**< Bus width for alternative */
        uint32_t size:3;  /**< Alternative size */
        uint32_t value;               /**< Alternative value */
    } alt;
    uint8_t dummy_count;              /**< Dummy cycles count */
    struct {
        uint32_t width;       /**< Bus width for data */
    } data;
} qspi_cmd_t;

qspi_data_t

typedef struct  {
    const uint8_t *tx_buf;
    uint8_t *rx_buf;
    uint16_t tx_size;
    uint16_t rx_size;
    uint32_t timeout;
} qspi_data_t;

qspi_transfer_t

typedef struct {
    qspi_cmd_t *cmd;
    qspi_data_t *data;
} qspi_transfer_t;

qspi_cs_e

/* cs signal to active for transfer */
typedef enum
{
    QSPI_CS_DIS,
    QSPI_CS_L,
    QSPI_CS_H,
} qspi_cs_e;

qspi_work_mode_e

typedef enum
{
    QSPI_WORK_MODE_0,                  // CPOL = 0; CPHA = 0
    QSPI_WORK_MODE_1,                  // CPOL = 0; CPHA = 1
    QSPI_WORK_MODE_2,                  // CPOL = 1; CPHA = 0
    QSPI_WORK_MODE_3,                  // CPOL = 1; CPHA = 1
} qspi_work_mode_e;

qspi_transfer_mode_e

typedef enum
{
    QSPI_TRANSFER_MODE_DMA,
    QSPI_TRANSFER_MODE_NORMAL,
} qspi_transfer_mode_e;

hal_qspi_init

初始化指定QSPI端口

函数原型

int32_t hal_qspi_init(qspi_dev_t *qspi);

参数

参数名称 出入参 参数描述 参数示例
qspi_dev_t *qspi 入参 QSPI设备描述,定义需要初始化的QSPI参数 用户自定义一个qspi_dev_t结构体

返回值

返回成功或失败, 返回0表示QSPI初始化成功,非0表示失败

调用示例

hal_qspi_send

从指定的QSPI端口发送数据

函数原型

int32_t hal_qspi_send(qspi_dev_t *qspi, const uint8_t *data, uint32_t timeout);

参数

参数名称 出入参 参数描述 参数示例
qspi_dev_t *qspi 入参 QSPI设备描述 使用hal_qspi_init初始化时传入值
const uint8_t *data 入参 指向发送缓冲区的数据指针 char qspi_data_buf[10]
uint32_t timeout 入参 超时时间(单位ms),如果希望一直等待设置为HAL_WAIT_FOREVER 50

返回值

返回成功或失败, 返回0表示数据发送成功,非0表示失败

调用示例

hal_qspi_recv

从指定的QSPI端口接收数据

函数原型

int32_t hal_qspi_recv(qspi_dev_t *qspi, uint8_t *data, uint32_t timeout);

参数

参数名称 出入参 参数描述 参数示例
qspi_dev_t *qspi 入参 QSPI设备描述 使用hal_qspi_init初始化时传入值
const uint8_t *data 出参 指向接收缓冲区的数据指针 char qspi_data_buf[10]
uint32_t timeout 入参 超时时间(单位ms),如果希望一直等待设置为HAL_WAIT_FOREVER 50

返回值

返回成功或失败, 返回0表示成功接收,非0表示失败

调用示例

hal_qspi_send_recv

从指定的QSPI端口发送并接收数据

函数原型

int32_t hal_qspi_send_recv (qspi_dev_t *qspi, qspi_transfer_t *trx);

参数

参数名称 出入参 参数描述 参数示例
qspi_dev_t *qspi 入参 QSPI设备描述 使用hal_qspi_init初始化时传入值
qspi_transfer_t *trx 入参/出参 指向发送/接收缓冲区的数据指针 char qspi_data_buf[10]

返回值

返回成功或失败, 返回0表示成功接收,非0表示失败

调用示例

hal_qspi_send_cmd

设置QSPI命令

函数原型

int32_t hal_qspi_send_cmd (qspi_dev_t *qspi, qspi_cmd_t *cmd);

参数

参数名称 出入参 参数描述 参数示例
qspi_dev_t *qspi 入参 QSPI设备描述 使用hal_qspi_init初始化时传入值
qspi_cmd_t *cmd 入参 命令字

返回值

返回成功或失败, 返回0表示成功设置,非0表示失败

调用示例

hal_qspi_finalize

关闭指定QSPI端口

函数原型

int32_t hal_qspi_finalize(qspi_dev_t *qspi);

参数

参数名称 出入参 参数描述 参数示例
qspi_dev_t *qspi 入参 QSPI设备描述 使用hal_qspi_init初始化时传入值

返回值

返回成功或失败, 返回0表示关闭成功,非0表示失败。

调用示例

使用

添加该组件

在相应的platform/mcu的mk内,添加对应hal文件的编译包含。

包含头文件

#include "aos/hal/qspi.h"

使用示例

移植说明

results matching ""

    No results matching ""