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详情
相关宏定义
/* 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"
使用示例
无
移植说明
无