Mbed OS Reference
Loading...
Searching...
No Matches
QSPI Class Reference

A QSPI Driver, used for communicating with QSPI slave devices. More...

#include <QSPI.h>

Inheritance diagram for QSPI:
NonCopyable< QSPI >

Public Member Functions

 QSPI (PinName io0, PinName io1, PinName io2, PinName io3, PinName sclk, PinName ssel=NC, int mode=0)
 Create a QSPI master connected to the specified pins. More...
 
 QSPI (const qspi_pinmap_t &pinmap, int mode=0)
 Create a QSPI master connected to the specified pins. More...
 
qspi_status_t configure_format (qspi_bus_width_t inst_width, qspi_bus_width_t address_width, qspi_address_size_t address_size, qspi_bus_width_t alt_width, qspi_alt_size_t alt_size, qspi_bus_width_t data_width, int dummy_cycles)
 Configure the data transmission format. More...
 
qspi_status_t set_frequency (int hz=1000000)
 Set the qspi bus clock frequency. More...
 
qspi_status_t read (int address, char *rx_buffer, size_t *rx_length)
 Read from QSPI peripheral with the preset read_instruction and alt_value. More...
 
qspi_status_t write (int address, const char *tx_buffer, size_t *tx_length)
 Write to QSPI peripheral using custom write instruction. More...
 
qspi_status_t read (qspi_inst_t instruction, int alt, int address, char *rx_buffer, size_t *rx_length)
 Read from QSPI peripheral using custom read instruction, alt values. More...
 
qspi_status_t write (qspi_inst_t instruction, int alt, int address, const char *tx_buffer, size_t *tx_length)
 Write to QSPI peripheral using custom write instruction, alt values. More...
 
qspi_status_t command_transfer (qspi_inst_t instruction, int address, const char *tx_buffer, size_t tx_length, const char *rx_buffer, size_t rx_length)
 Perform a transaction to write to an address(a control register) and get the status results. More...
 

Detailed Description

A QSPI Driver, used for communicating with QSPI slave devices.

The default format is set to Quad-SPI(1-1-1), and a clock frequency of 1MHz Most QSPI devices will also require Chip Select which is indicated by ssel.

Note
Synchronization level: Thread safe

Example:

// Write 4 byte array to a QSPI slave, and read the response, note that each device will have its specific read/write/alt values defined
#include "mbed.h"
#define CMD_WRITE 0x02
#define CMD_READ 0x03
#define ADDRESS 0x1000
// hardware ssel (where applicable)
QSPI qspi_device(QSPI_FLASH1_IO0, QSPI_FLASH1_IO1, QSPI_FLASH1_IO2, QSPI_FLASH1_IO3, QSPI_FLASH1_SCK, QSPI_FLASH1_CSN); // io0, io1, io2, io3, sclk, ssel
int main() {
char tx_buf[] = { 0x11, 0x22, 0x33, 0x44 };
char rx_buf[4];
int buf_len = sizeof(tx_buf);
qspi_status_t result = qspi_device.write(CMD_WRITE, 0, ADDRESS, tx_buf, &buf_len);
if (result != QSPI_STATUS_OK) {
printf("Write failed");
}
result = qspi_device.read(CMD_READ, 0, ADDRESS, rx_buf, &buf_len);
if (result != QSPI_STATUS_OK) {
printf("Read failed");
}
}
A QSPI Driver, used for communicating with QSPI slave devices.
Definition: QSPI.h:86
enum qspi_status qspi_status_t
QSPI return status.
@ QSPI_STATUS_OK
Function executed sucessfully >
Definition: qspi_api.h:121

Definition at line 86 of file QSPI.h.

Constructor & Destructor Documentation

◆ QSPI() [1/2]

QSPI ( PinName  io0,
PinName  io1,
PinName  io2,
PinName  io3,
PinName  sclk,
PinName  ssel = NC,
int  mode = 0 
)

Create a QSPI master connected to the specified pins.

io0-io3 is used to specify the Pins used for Quad SPI mode

Parameters
io01st IO pin used for sending/receiving data during data phase of a transaction
io12nd IO pin used for sending/receiving data during data phase of a transaction
io23rd IO pin used for sending/receiving data during data phase of a transaction
io34th IO pin used for sending/receiving data during data phase of a transaction
sclkQSPI Clock pin
sselQSPI chip select pin
modeClock polarity and phase mode (0 - 3) of SPI (Default: Mode=0 uses CPOL=0, CPHA=0, Mode=1 uses CPOL=1, CPHA=1)

◆ QSPI() [2/2]

QSPI ( const qspi_pinmap_t pinmap,
int  mode = 0 
)

Create a QSPI master connected to the specified pins.

io0-io3 is used to specify the Pins used for Quad SPI mode

Parameters
pinmapreference to structure which holds static pinmap
modeClock polarity and phase mode (0 - 3) of SPI (Default: Mode=0 uses CPOL=0, CPHA=0, Mode=1 uses CPOL=1, CPHA=1)

Member Function Documentation

◆ configure_format()

qspi_status_t configure_format ( qspi_bus_width_t  inst_width,
qspi_bus_width_t  address_width,
qspi_address_size_t  address_size,
qspi_bus_width_t  alt_width,
qspi_alt_size_t  alt_size,
qspi_bus_width_t  data_width,
int  dummy_cycles 
)

Configure the data transmission format.

Parameters
inst_widthBus width used by instruction phase(Valid values are QSPI_CFG_BUS_SINGLE, QSPI_CFG_BUS_DUAL, QSPI_CFG_BUS_QUAD)
address_widthBus width used by address phase(Valid values are QSPI_CFG_BUS_SINGLE, QSPI_CFG_BUS_DUAL, QSPI_CFG_BUS_QUAD)
address_sizeSize in bits used by address phase(Valid values are QSPI_CFG_ADDR_SIZE_8, QSPI_CFG_ADDR_SIZE_16, QSPI_CFG_ADDR_SIZE_24, QSPI_CFG_ADDR_SIZE_32)
alt_widthBus width used by alt phase(Valid values are QSPI_CFG_BUS_SINGLE, QSPI_CFG_BUS_DUAL, QSPI_CFG_BUS_QUAD)
alt_sizeSize in bits used by alt phase (must be a multiple of the number of bus lines indicated in alt_width)
data_widthBus width used by data phase(Valid values are QSPI_CFG_BUS_SINGLE, QSPI_CFG_BUS_DUAL, QSPI_CFG_BUS_QUAD)
dummy_cyclesNumber of dummy clock cycles to be used after alt phase

◆ set_frequency()

qspi_status_t set_frequency ( int  hz = 1000000)

Set the qspi bus clock frequency.

Parameters
hzSCLK frequency in hz (default = 1MHz)
Returns
Returns QSPI_STATUS_SUCCESS on successful, fails if the interface is already init-ed

◆ read() [1/2]

qspi_status_t read ( int  address,
char *  rx_buffer,
size_t *  rx_length 
)

Read from QSPI peripheral with the preset read_instruction and alt_value.

Parameters
addressAddress to be accessed in QSPI peripheral
rx_bufferBuffer for data to be read from the peripheral
rx_lengthPointer to a variable containing the length of rx_buffer, and on return this variable will be updated with the actual number of bytes read
Returns
Returns QSPI_STATUS_SUCCESS on successful reads and QSPI_STATUS_ERROR on failed reads.

◆ write() [1/2]

qspi_status_t write ( int  address,
const char *  tx_buffer,
size_t *  tx_length 
)

Write to QSPI peripheral using custom write instruction.

Parameters
addressAddress to be accessed in QSPI peripheral
tx_bufferBuffer containing data to be sent to peripheral
tx_lengthPointer to a variable containing the length of data to be transmitted, and on return this variable will be updated with the actual number of bytes written
Returns
Returns QSPI_STATUS_SUCCESS on successful reads and QSPI_STATUS_ERROR on failed reads.

◆ read() [2/2]

qspi_status_t read ( qspi_inst_t  instruction,
int  alt,
int  address,
char *  rx_buffer,
size_t *  rx_length 
)

Read from QSPI peripheral using custom read instruction, alt values.

Parameters
instructionInstruction value to be used in instruction phase. Use QSPI_NO_INST to skip the instruction phase
altAlt value to be used in Alternate-byte phase. Use -1 for ignoring Alternate-byte phase
addressAddress to be accessed in QSPI peripheral
rx_bufferBuffer for data to be read from the peripheral
rx_lengthPointer to a variable containing the length of rx_buffer, and on return this variable will be updated with the actual number of bytes read
Returns
Returns QSPI_STATUS_SUCCESS on successful reads and QSPI_STATUS_ERROR on failed reads.

◆ write() [2/2]

qspi_status_t write ( qspi_inst_t  instruction,
int  alt,
int  address,
const char *  tx_buffer,
size_t *  tx_length 
)

Write to QSPI peripheral using custom write instruction, alt values.

Parameters
instructionInstruction value to be used in instruction phase. Use QSPI_NO_INST to skip the instruction phase
altAlt value to be used in Alternate-byte phase. Use -1 for ignoring Alternate-byte phase
addressAddress to be accessed in QSPI peripheral
tx_bufferBuffer containing data to be sent to peripheral
tx_lengthPointer to a variable containing the length of data to be transmitted, and on return this variable will be updated with the actual number of bytes written
Returns
Returns QSPI_STATUS_SUCCESS on successful reads and QSPI_STATUS_ERROR on failed reads.

◆ command_transfer()

qspi_status_t command_transfer ( qspi_inst_t  instruction,
int  address,
const char *  tx_buffer,
size_t  tx_length,
const char *  rx_buffer,
size_t  rx_length 
)

Perform a transaction to write to an address(a control register) and get the status results.

Parameters
instructionInstruction value to be used in instruction phase. Use QSPI_NO_INST to skip the instruction phase
addressSome instruction might require address. Use -1 if no address
tx_bufferBuffer containing data to be sent to peripheral
tx_lengthPointer to a variable containing the length of data to be transmitted, and on return this variable will be updated with the actual number of bytes written
rx_bufferBuffer for data to be read from the peripheral
rx_lengthPointer to a variable containing the length of rx_buffer, and on return this variable will be updated with the actual number of bytes read
Returns
Returns QSPI_STATUS_SUCCESS on successful reads and QSPI_STATUS_ERROR on failed reads.