QSPI Octal-SPI

Description

QSPI Octal-SPI Controller API.

These QSPI functions provide basic support for using the QSPI peripheral in the following configurations:

  • Direct Read/Write, used for memory mapped access to external memory.
  • STIG Command, used for configuring and executing commands on the external memory device.

Indirect read/write, PHY configuration, and Execute-In-Place (XIP) configurations are not supported.

The example below shows how to set up the QSPI for direct read and write operation:

QSPI_Init(QSPI0, &initQspi);
// Configure QSPI pins.
GPIO_PinModeSet(EXTFLASH_PORT_CS, EXTFLASH_PIN_CS, gpioModePushPull, 0);
GPIO_PinModeSet(EXTFLASH_PORT_SCLK, EXTFLASH_PIN_SCLK, gpioModePushPull, 0);
GPIO_PinModeSet(EXTFLASH_PORT_DQ0, EXTFLASH_PIN_DQ0, gpioModePushPull, 0);
GPIO_PinModeSet(EXTFLASH_PORT_DQ1, EXTFLASH_PIN_DQ1, gpioModePushPull, 0);
GPIO_PinModeSet(EXTFLASH_PORT_DQ2, EXTFLASH_PIN_DQ2, gpioModePushPull, 0);
GPIO_PinModeSet(EXTFLASH_PORT_DQ3, EXTFLASH_PIN_DQ3, gpioModePushPull, 0);
// Configure QSPI routing to GPIO.
QSPI0->ROUTELOC0 = EXTFLASH_QSPI_LOC;
QSPI0->ROUTEPEN = QSPI_ROUTEPEN_SCLKPEN
| EXTFLASH_QSPI_CSPEN
| QSPI_ROUTEPEN_DQ0PEN
| QSPI_ROUTEPEN_DQ1PEN
| QSPI_ROUTEPEN_DQ2PEN
| QSPI_ROUTEPEN_DQ3PEN;
// Configure the direct read.
readConfig.dummyCycles = 8;
readConfig.opCode = 0x6B;
QSPI_ReadConfig(QSPI0, &readConfig);
// Configure the direct write.
writeConfig.dummyCycles = 0;
writeConfig.opCode = 0x38;
writeConfig.autoWEL = true;
QSPI_WriteConfig(QSPI0, &writeConfig);

To configure an external flash, commands can be set up and executed using the Software Triggered Instruction Generator (STIG) function of the QSPI, as shown in the example below:

uint8_t status;
QSPI_StigCmd_TypeDef stigCmd = {0};
stigCmd.cmdOpcode = EXTFLASH_OPCODE_READ_STATUS;
stigCmd.readDataSize = 1;
stigCmd.readBuffer = &status;
QSPI_ExecStigCmd(QSPI0, &stigCmd);

Data Structures

struct  QSPI_ReadConfig_TypeDef
 QSPI Device Read Instruction Configuration Structure.
 
struct  QSPI_WriteConfig_TypeDef
 QSPI Device Write Instruction Configuration Structure.
 
struct  QSPI_DelayConfig_TypeDef
 QSPI Device Delay Configuration Structure.
 
struct  QSPI_StigCmd_TypeDef
 Defines command to be executed using STIG mechanism.
 
struct  QSPI_Init_TypeDef
 QSPI initialization structure.
 

Functions

void QSPI_Init (QSPI_TypeDef *qspi, const QSPI_Init_TypeDef *init)
 Initialize QSPI.
 
void QSPI_ReadConfig (QSPI_TypeDef *qspi, const QSPI_ReadConfig_TypeDef *config)
 Configure Read Operations.
 
void QSPI_WriteConfig (QSPI_TypeDef *qspi, const QSPI_WriteConfig_TypeDef *config)
 Configure Write Operations.
 
void QSPI_ExecStigCmd (QSPI_TypeDef *qspi, const QSPI_StigCmd_TypeDef *stigCmd)
 Execute a STIG command.
 
void QSPI_WaitForIdle (QSPI_TypeDef *qspi)
 Wait for the QSPI to go into idle state.
 
uint16_t QSPI_GetWriteLevel (QSPI_TypeDef *qspi)
 Get the fill level of the write partition of the QSPI internal SRAM.
 
uint16_t QSPI_GetReadLevel (QSPI_TypeDef *qspi)
 Get the fill level of the read partition of the QSPI internal SRAM.
 
void QSPI_Enable (QSPI_TypeDef *qspi, bool enable)
 Enable/disable Quad SPI.
 
uint32_t QSPI_IntGet (QSPI_TypeDef *qspi)
 Get the current interrupt flags.
 
void QSPI_IntClear (QSPI_TypeDef *qspi, uint32_t flags)
 Clear interrupt flags.
 
void QSPI_IntEnable (QSPI_TypeDef *qspi, uint32_t flags)
 Enable interrupts.
 
void QSPI_IntDisable (QSPI_TypeDef *qspi, uint32_t flags)
 Disable interrupts.
 

Macros

#define QSPI_READCONFIG_DEFAULT
 Default Read Configuration Structure.
 
#define QSPI_WRITECONFIG_DEFAULT
 Default Write Configuration Structure.
 
#define QSPI_INIT_DEFAULT
 Default configuration for QSPI_Init_TypeDef structure.
 

Enumerations

enum  QSPI_TransferType_TypeDef {
  qspiTransferSingle = 0,
  qspiTransferDual = 1,
  qspiTransferQuad = 2,
  qspiTransferOctal = 3
}
 Transfer type.
 

Function Documentation

◆ QSPI_Init()

void QSPI_Init ( QSPI_TypeDef *  qspi,
const QSPI_Init_TypeDef init 
)

Initialize QSPI.

Parameters
[in]qspiA pointer to the QSPI peripheral register block.
[in]initA pointer to the initialization structure used to configure QSPI.

◆ QSPI_ReadConfig()

void QSPI_ReadConfig ( QSPI_TypeDef *  qspi,
const QSPI_ReadConfig_TypeDef config 
)

Configure Read Operations.

Parameters
[in]qspiA pointer to the QSPI peripheral register block.
[in]configA pointer to the configuration structure for QSPI read operations.

◆ QSPI_WriteConfig()

void QSPI_WriteConfig ( QSPI_TypeDef *  qspi,
const QSPI_WriteConfig_TypeDef config 
)

Configure Write Operations.

Parameters
[in]qspiA pointer to the QSPI peripheral register block.
[in]configA pointer to the configuration structure for QSPI write operations.

◆ QSPI_ExecStigCmd()

void QSPI_ExecStigCmd ( QSPI_TypeDef *  qspi,
const QSPI_StigCmd_TypeDef stigCmd 
)

Execute a STIG command.

STIG is used when the application needs to access status registers, configuration registers or perform erase functions. STIG commands can be used to perform any instruction that the flash device supports.

Parameters
[in]qspiA pointer to the QSPI peripheral register block.
[in]stigCmdA pointer to a structure that describes the STIG command.

◆ QSPI_WaitForIdle()

void QSPI_WaitForIdle ( QSPI_TypeDef *  qspi)
inline

Wait for the QSPI to go into idle state.

Parameters
[in]qspiPointer to QSPI peripheral register block.

◆ QSPI_GetWriteLevel()

uint16_t QSPI_GetWriteLevel ( QSPI_TypeDef *  qspi)
inline

Get the fill level of the write partition of the QSPI internal SRAM.

Parameters
[in]qspiPointer to QSPI peripheral register block.
Returns
SRAM fill level of the write partition. The value is the number of 4 byte words in the write partition.

◆ QSPI_GetReadLevel()

uint16_t QSPI_GetReadLevel ( QSPI_TypeDef *  qspi)
inline

Get the fill level of the read partition of the QSPI internal SRAM.

Parameters
[in]qspiPointer to QSPI peripheral register block.
Returns
SRAM fill level of the read partition. The value is the number of 4 byte words in the read partition.

◆ QSPI_Enable()

void QSPI_Enable ( QSPI_TypeDef *  qspi,
bool  enable 
)
inline

Enable/disable Quad SPI.

Parameters
[in]qspiPointer to QSPI peripheral register block.
[in]enabletrue to enable quad spi, false to disable quad spi.

◆ QSPI_IntGet()

uint32_t QSPI_IntGet ( QSPI_TypeDef *  qspi)
inline

Get the current interrupt flags.

Parameters
[in]qspiPointer to QSPI peripheral register block.
Returns
This functions returns the current interrupt flags that are set.

◆ QSPI_IntClear()

void QSPI_IntClear ( QSPI_TypeDef *  qspi,
uint32_t  flags 
)
inline

Clear interrupt flags.

Parameters
[in]qspiPointer to QSPI peripheral register block.
[in]flagsThe interrupt flags to clear.

◆ QSPI_IntEnable()

void QSPI_IntEnable ( QSPI_TypeDef *  qspi,
uint32_t  flags 
)
inline

Enable interrupts.

Parameters
[in]qspiPointer to QSPI peripheral register block.
[in]flagsThe interrupt flags to enable.

◆ QSPI_IntDisable()

void QSPI_IntDisable ( QSPI_TypeDef *  qspi,
uint32_t  flags 
)
inline

Disable interrupts.

Parameters
[in]qspiPointer to QSPI peripheral register block.
[in]flagsThe interrupt flags to disable.

Macro Definition Documentation

◆ QSPI_READCONFIG_DEFAULT

#define QSPI_READCONFIG_DEFAULT
Value:
{ \
0x03, /* 0x03 is the standard read opcode. */ \
0, /* 0 dummy cycles. */ \
qspiTransferSingle, /* Single I/O mode. */ \
qspiTransferSingle, /* Single I/O mode. */ \
qspiTransferSingle, /* Single I/O mode. */ \
}

Default Read Configuration Structure.

◆ QSPI_WRITECONFIG_DEFAULT

#define QSPI_WRITECONFIG_DEFAULT
Value:
{ \
0x02, /* 0x02 is the standard write opcode. */ \
0, /* 0 dummy cycles. */ \
qspiTransferSingle, /* Single I/O mode. */ \
qspiTransferSingle, /* Single I/O mode. */ \
true, /* Send WEL command automatically. */ \
}

Default Write Configuration Structure.

◆ QSPI_INIT_DEFAULT

#define QSPI_INIT_DEFAULT
Value:
{ \
true, /* Enable Quad SPI. */ \
32, /* Divide QSPI clock by 32. */ \
}

Default configuration for QSPI_Init_TypeDef structure.

Enumeration Type Documentation

◆ QSPI_TransferType_TypeDef

Transfer type.

Enumerator
qspiTransferSingle 

Single IO mode.

DQ0 used for output and DQ1 as input.

qspiTransferDual 

Dual I/O transfer.

DQ0 and DQ1 are used as both inputs and outputs.

qspiTransferQuad 

Quad I/O transfer.

DQ0, DQ1, DQ2 and DQ3 are used as both inputs and outputs.

qspiTransferOctal 

Octal I/O transfer.

DQ[7:0] are used as both inputs and outputs.