AM263x MCU+ SDK  09.02.00
QSPI High Level Driver

Features Supported

  • Support for Single, Dual or Quad read operation.
  • Support for Interrupt mode.
  • Support for DMA read.
  • Programmable Signal Polarities
  • Programmable Active Clock Edge
  • Programmable Delay between chip select activation and output data from 0 to 3 QSPI clock cycles

SysConfig Features

Note
It is strongly recommend to use SysConfig where it is available instead of using direct SW API calls. This will help simplify the SW application and also catch common mistakes early in the development cycle.
  • QSPI instance name
  • Input clock frequency to be used for QSPI module
  • Input clock divider which decides the baud-rate at which the flash will be read
  • Chip Select
  • Enabling DMA mode
  • In advanced config, you can choose various parameters like frame format, decoder chip select polarity, read dummy cycles, SDK Infra and QSPI Interrupt

Features NOT Supported

  • Dual and Quad writes are not supported.

Usage Overview

API Sequence

To use the QSPI driver to send data over the SPI bus, the application calls the following APIs:

Example Usage

Include the below file to access the APIs

#include <stdio.h>
#include <string.h>
#include <drivers/qspi.h>
#include <kernel/dpl/MutexArmP.h>
#include <kernel/nortos/dpl/r5/HwiP_armv7r_vim.h>

Instance Open Example

QSPI_Params qspiParams;
QSPI_Params_init(&qspiParams);
gQspiHandle = QSPI_open(CONFIG_QSPI0, &qspiParams);
DebugP_assert(gQspiHandle != NULL);

Instance Close Example

QSPI_close(gQspiHandle);

Blocking Write and Read Example

void transfer_blocking(void)
{
int32_t status = SystemP_SUCCESS;
uint32_t itr = 0U;
QSPI_Transaction transaction;
QSPI_transaction_init(&transaction);
transaction.addrOffset = APP_QSPI_FLASH_OFFSET;
transaction.buf = (void *)gQspiTxBuf;
transaction.count = APP_QSPI_DATA_SIZE;
transaction.transferTimeout = QSPI_Timeout;
status = QSPI_writeConfigMode(gQspiHandle, &transaction);
transaction.buf = (void *)gQspiRxBuf;
status = QSPI_readMemMapMode(gQspiHandle,&transaction);
for(itr = 0U; itr < APP_QSPI_DATA_SIZE; itr++)
{
if(gQspiTxBuf[itr] != gQspiRxBuf[itr])
{
status = SystemP_FAILURE;
DebugP_logError("QSPI read data mismatch %d !!!\r\n",itr);
break;
}
}
if (status == SystemP_SUCCESS)
{
DebugP_log("QSPI Write and Read PASS");
}
}

Non-Blocking Write and Read Example

void transfer_nonblocking(void)
{
int32_t status = SystemP_SUCCESS;
uint32_t itr = 0U;
/* Read and Write Initialization */
/* Populate the write commands */
wrParams.cmd = QSPI_NOR_PAGE_PROG;
wrParams.cmdAddr = APP_QSPI_FLASH_OFFSET;
wrParams.numAddrBytes = QSPI_ADDR_BYTES;
wrParams.txDataBuf = (void *)(gQspiTxBuf);
wrParams.txDataLen = APP_QSPI_DATA_SIZE;
QSPI_writeConfigModeIntr(gQspiHandle,&wrParams);
/* Populate the Read commands */
rdParams.cmd = QSPI_NOR_CMD_SINGLE_READ;
rdParams.cmdAddr = APP_QSPI_FLASH_OFFSET;
rdParams.numAddrBytes = QSPI_ADDR_BYTES;
rdParams.rxDataBuf = (void *)(gQspiRxBuf);
rdParams.rxDataLen = APP_QSPI_DATA_SIZE;
QSPI_readConfigModeIntr(gQspiHandle,&rdParams);
for(itr = 0U; itr < APP_QSPI_DATA_SIZE; itr++)
{
if(gQspiTxBuf[itr] != gQspiRxBuf[itr])
{
status = SystemP_FAILURE;
DebugP_logError("QSPI read data mismatch %d !!!\r\n",itr);
break;
}
}
if (status == SystemP_SUCCESS)
{
DebugP_log("QSPI Write and Read PASS");
}
}

API

APIs for QSPI

QSPI_writeCmdParams_init
void QSPI_writeCmdParams_init(QSPI_WriteCmdParams *wrParams)
Function to initialize the QSPI_Transaction structure.
QSPI_ReadCmdParams::numAddrBytes
uint8_t numAddrBytes
Definition: qspi/v0/qspi.h:137
QSPI_Params_init
void QSPI_Params_init(QSPI_Params *qspiParams)
Initialize data structure with defaults.
qspi.h
QSPI_writeConfigModeIntr
int32_t QSPI_writeConfigModeIntr(QSPI_Handle handle, QSPI_WriteCmdParams *wrParams)
Function to perform write to the flash in interrupt mode mode.
QSPI_Transaction::addrOffset
uint32_t addrOffset
Definition: qspi/v0/qspi.h:122
QSPI_open
QSPI_Handle QSPI_open(uint32_t index, const QSPI_Params *openParams)
This function opens a given QSPI peripheral.
QSPI_Transaction::count
uint32_t count
Definition: qspi/v0/qspi.h:118
QSPI_WriteCmdParams::cmdAddr
uint32_t cmdAddr
Definition: qspi/v0/qspi.h:149
QSPI_Params
QSPI Parameters.
Definition: qspi/v0/qspi.h:171
DebugP_log
#define DebugP_log(format,...)
Function to log a string to the enabled console.
Definition: DebugP.h:225
QSPI_ReadCmdParams::rxDataLen
uint32_t rxDataLen
Definition: qspi/v0/qspi.h:141
QSPI_WriteCmdParams::txDataBuf
void * txDataBuf
Definition: qspi/v0/qspi.h:154
QSPI_ReadCmdParams
Definition: qspi/v0/qspi.h:131
QSPI_ReadCmdParams::cmd
uint8_t cmd
Definition: qspi/v0/qspi.h:132
DebugP_logError
#define DebugP_logError(format,...)
Function to log a string to the enabled console, for error zone.
Definition: DebugP.h:234
QSPI_readConfigModeIntr
int32_t QSPI_readConfigModeIntr(QSPI_Handle handle, QSPI_ReadCmdParams *rdParams)
Function to perform read from the flash in interrupt mode.
SystemP_SUCCESS
#define SystemP_SUCCESS
Return status when the API execution was successful.
Definition: SystemP.h:56
QSPI_ReadCmdParams::rxDataBuf
void * rxDataBuf
Definition: qspi/v0/qspi.h:139
SystemP_FAILURE
#define SystemP_FAILURE
Return status when the API execution was not successful due to a failure.
Definition: SystemP.h:61
QSPI_ReadCmdParams::cmdAddr
uint32_t cmdAddr
Definition: qspi/v0/qspi.h:134
QSPI_transaction_init
void QSPI_transaction_init(QSPI_Transaction *trans)
Function to initialize the QSPI_Transaction structure.
QSPI_WriteCmdParams::cmd
uint8_t cmd
Definition: qspi/v0/qspi.h:147
QSPI_writeConfigMode
int32_t QSPI_writeConfigMode(QSPI_Handle handle, const QSPI_Transaction *trans)
Function to perform writes to the flash in configuration mode.
QSPI_readCmdParams_init
void QSPI_readCmdParams_init(QSPI_ReadCmdParams *rdParams)
Function to initialize the QSPI_Transaction structure.
DebugP.h
QSPI_Transaction::transferTimeout
uint32_t transferTimeout
Definition: qspi/v0/qspi.h:126
QSPI_Transaction::buf
void * buf
Definition: qspi/v0/qspi.h:120
QSPI_readMemMapMode
int32_t QSPI_readMemMapMode(QSPI_Handle handle, QSPI_Transaction *trans)
Function to perform reads from the flash in memory mapped mode.
DebugP_assert
#define DebugP_assert(expression)
Function to call for assert check.
Definition: DebugP.h:177
QSPI_close
void QSPI_close(QSPI_Handle handle)
Function to close a QSPI peripheral specified by the QSPI handle.
QSPI_Transaction
Data structure used with QSPI_Transfers - QSPI_writeConfigMode, QSPI_readMemMapMode.
Definition: qspi/v0/qspi.h:117
QSPI_WriteCmdParams::txDataLen
uint32_t txDataLen
Definition: qspi/v0/qspi.h:156
QSPI_WriteCmdParams::numAddrBytes
uint8_t numAddrBytes
Definition: qspi/v0/qspi.h:152
QSPI_WriteCmdParams
Definition: qspi/v0/qspi.h:146