QSPI driver¶
-
group
nrfx_qspi
Quad Serial Peripheral Interface (QSPI) peripheral driver.
Defines
-
NRFX_QSPI_DEFAULT_CONFIG
(_pin_sck, _pin_csn, _pin_io0, _pin_io1, _pin_io2, _pin_io3)¶ QSPI instance default configuration.
This configuration sets up QSPI with the following options:
no offset for address in the external memory for Execute in Place operation
single data line
FAST_READ opcode for reading
PP opcode for writing
24 bit addressing mode
Deep Power-down disabled
clock frequency: 2 MHz for nRF52 Series, 6 MHz for nRF53 Series
SCK delay 5 clock ticks
mode 0 (data captured on the clock rising edge and transmitted on a falling edge. Clock base level is ‘0’)
- Parameters
_pin_sck – [in] Pin for clock signal.
_pin_csn – [in] Pin for chip select signal.
_pin_io0 – [in] Pin 0 for I/O data.
_pin_io1 – [in] Pin 1 for I/O data.
_pin_io2 – [in] Pin 2 for I/O data.
_pin_io3 – [in] Pin 3 for I/O data.
-
NRFX_QSPI_DEFAULT_CINSTR
(opc, len)¶ QSPI custom instruction helper with the default configuration.
Typedefs
-
typedef void (*
nrfx_qspi_handler_t
)(nrfx_qspi_evt_t event, void *p_context)¶ QSPI driver event handler type.
Enums
-
enum
nrfx_qspi_evt_t
¶ QSPI master driver event types, passed to the handler routine provided during initialization.
Values:
-
enumerator
NRFX_QSPI_EVENT_DONE
¶ Transfer done.
-
enumerator
-
enum
nrfx_qspi_evt_ext_type_t
¶ QSPI master driver extended event types, obtained using nrfx_qspi_event_extended_get() function.
Values:
-
enumerator
NRFX_QSPI_EVENT_NONE
¶ No event occurence.
-
enumerator
NRFX_QSPI_EVENT_WRITE_DONE
¶ Write done.
-
enumerator
NRFX_QSPI_EVENT_READ_DONE
¶ Read done.
-
enumerator
NRFX_QSPI_EVENT_ERASE_DONE
¶ Erase done.
-
enumerator
Functions
-
nrfx_err_t
nrfx_qspi_init
(nrfx_qspi_config_t const *p_config, nrfx_qspi_handler_t handler, void *p_context)¶ Function for initializing the QSPI driver instance.
This function configures the peripheral and its interrupts, and activates it. During the activation process, the internal clocks are started and the QSPI peripheral tries to read the status byte to read the busy bit. Reading the status byte is done in a simple poll and wait mechanism. If the busy bit is 1, this indicates issues with the external memory device. As a result, nrfx_qspi_init returns NRFX_ERROR_TIMEOUT.
In case of issues:
Check the connection.
Make sure that the memory device does not perform other operations like erasing or writing.
Check if there is a short circuit.
Warning
On nRF5340, only the dedicated pins with NRF_GPIO_PIN_MCUSEL_PERIPHERAL configuration are supported. See the chapter Pin assignments in the Product Specification.
- Parameters
p_config – [in] Pointer to the structure with the initial configuration.
handler – [in] Event handler provided by the user. If NULL, transfers will be performed in blocking mode.
p_context – [in] Pointer to context. Use in the interrupt handler.
- Returns NRFX_SUCCESS
Initialization was successful.
- Returns NRFX_ERROR_TIMEOUT
The peripheral cannot connect with external memory.
- Returns NRFX_ERROR_INVALID_STATE
The driver was already initialized.
- Returns NRFX_ERROR_INVALID_PARAM
The pin configuration was incorrect.
-
void
nrfx_qspi_uninit
(void)¶ Function for uninitializing the QSPI driver instance.
-
nrfx_err_t
nrfx_qspi_read
(void *p_rx_buffer, size_t rx_buffer_length, uint32_t src_address)¶ Function for reading data from the QSPI memory.
Write, read, and erase operations check memory device busy state before starting the operation. If the memory is busy, the resulting action depends on the mode in which the read operation is used:
blocking mode (without handler) - a delay occurs until the last operation runs and until the operation data is being read.
interrupt mode (with handler) - event emission occurs after the last operation and reading of data are finished. In interrupt mode read operations can be double-buffered by calling the function again. To utilize double-buffering feature, NRF_QSPI_TASK_READSTART needs to be triggered on NRF_QSPI_EVENT_READY externally (for example by using the PPI/DPPI).
- Parameters
p_rx_buffer – [out] Pointer to the receive buffer.
rx_buffer_length – [in] Size of the data to read.
src_address – [in] Address in memory to read from.
- Returns NRFX_SUCCESS
The operation was successful (blocking mode) or operation was commissioned (handler mode).
- Returns NRFX_ERROR_BUSY
The driver currently handles another operation.
- Returns NRFX_ERROR_INVALID_ADDR
The provided buffer is not placed in the Data RAM region or its address is not aligned to a 32-bit word.
-
nrfx_err_t
nrfx_qspi_write
(void const *p_tx_buffer, size_t tx_buffer_length, uint32_t dst_address)¶ Function for writing data to QSPI memory.
Write, read, and erase operations check memory device busy state before starting the operation. If the memory is busy, the resulting action depends on the mode in which the write operation is used:
blocking mode (without handler) - a delay occurs until the last operation runs or until the operation data is being sent.
interrupt mode (with handler) - event emission occurs after the last operation and sending of operation data are finished. To manually control operation execution in the memory device, use nrfx_qspi_mem_busy_check after executing the write function. Remember that an incoming event signalizes only that data was sent to the memory device and the peripheral before the write operation checked if memory was busy. In interrupt mode write operations can be double-buffered by calling the function again. To utilize double-buffering feature, NRF_QSPI_TASK_WRITESTART needs to be triggered on NRF_QSPI_EVENT_READY externally (for example by using the PPI/DPPI).
- Parameters
p_tx_buffer – [in] Pointer to the writing buffer.
tx_buffer_length – [in] Size of the data to write.
dst_address – [in] Address in memory to write to.
- Returns NRFX_SUCCESS
The operation was successful (blocking mode) or operation was commissioned (handler mode).
- Returns NRFX_ERROR_BUSY
The driver currently handles other operation.
- Returns NRFX_ERROR_INVALID_ADDR
The provided buffer is not placed in the Data RAM region or its address is not aligned to a 32-bit word.
-
nrfx_err_t
nrfx_qspi_erase
(nrf_qspi_erase_len_t length, uint32_t start_address)¶ Function for starting erasing of one memory block - 4KB, 64KB, or the whole chip.
Write, read, and erase operations check memory device busy state before starting the operation. If the memory is busy, the resulting action depends on the mode in which the erase operation is used:
blocking mode (without handler) - a delay occurs until the last operation runs or until the operation data is being sent.
interrupt mode (with handler) - event emission occurs after the last operation and sending of operation data are finished. To manually control operation execution in the memory device, use nrfx_qspi_mem_busy_check after executing the erase function. Remember that an incoming event signalizes only that data was sent to the memory device and the periheral before the erase operation checked if memory was busy.
- Parameters
length – [in] Size of data to erase. See nrf_qspi_erase_len_t.
start_address – [in] Memory address to start erasing. If chip erase is performed, address field is ommited.
- Returns NRFX_SUCCESS
The operation was successful (blocking mode) or operation was commissioned (handler mode).
- Returns NRFX_ERROR_INVALID_ADDR
The provided start address is not aligned to a 32-bit word.
- Returns NRFX_ERROR_BUSY
The driver currently handles another operation.
-
nrfx_err_t
nrfx_qspi_chip_erase
(void)¶ Function for starting an erase operation of the whole chip.
- Returns NRFX_SUCCESS
The operation was successful (blocking mode) or operation was commissioned (handler mode).
- Returns NRFX_ERROR_BUSY
The driver currently handles another operation.
-
const nrfx_qspi_evt_ext_t *
nrfx_qspi_event_extended_get
(void)¶ Function for getting the extended event associated with finished operation.
Warning
This function shall be used only in the context of event handler passed by the user during driver initialization.
- Returns
Pointer to the extended event associated with finished operation.
-
bool
nrfx_qspi_xfer_buffered_check
(void)¶ Function for checking whether any write or read data transfer is buffered.
- Returns
True if there is a transfer buffered, false otherwise.
-
nrfx_err_t
nrfx_qspi_mem_busy_check
(void)¶ Function for getting the current driver status and status byte of memory device with testing WIP (write in progress) bit.
- Returns NRFX_SUCCESS
The driver and memory are ready to handle a new operation.
- Returns NRFX_ERROR_BUSY
The driver or memory currently handle another operation.
-
nrfx_err_t
nrfx_qspi_cinstr_xfer
(nrf_qspi_cinstr_conf_t const *p_config, void const *p_tx_buffer, void *p_rx_buffer)¶ Function for sending operation code, sending data, and receiving data from the memory device.
Use this function to transfer configuration data to memory and to receive data from memory. Pointers can be addresses from flash memory. This function is a synchronous function and should be used only if necessary.
- Parameters
p_config – [in] Pointer to the structure with opcode and transfer configuration.
p_tx_buffer – [in] Pointer to the array with data to send. Can be NULL if only opcode is transmitted.
p_rx_buffer – [out] Pointer to the array for data to receive. Can be NULL if there is nothing to receive.
- Returns NRFX_SUCCESS
The operation was successful.
- Returns NRFX_ERROR_TIMEOUT
The external memory is busy or there are connection issues.
- Returns NRFX_ERROR_BUSY
The driver currently handles other operation.
-
nrfx_err_t
nrfx_qspi_cinstr_quick_send
(uint8_t opcode, nrf_qspi_cinstr_len_t length, void const *p_tx_buffer)¶ Function for sending operation code and data to the memory device with simpler configuration.
Use this function to transfer configuration data to memory and to receive data from memory. This function is a synchronous function and should be used only if necessary.
- Parameters
opcode – [in] Operation code. Sending first.
length – [in] Length of the data to send and opcode. See nrf_qspi_cinstr_len_t.
p_tx_buffer – [in] Pointer to input data array.
- Returns NRFX_SUCCESS
The operation was successful.
- Returns NRFX_ERROR_BUSY
The driver currently handles another operation.
-
nrfx_err_t
nrfx_qspi_lfm_start
(nrf_qspi_cinstr_conf_t const *p_config)¶ Function for starting the custom instruction long frame mode.
The long frame mode is a mechanism that allows for arbitrary byte length custom instructions. Use this function to initiate a custom transaction by sending custom instruction opcode. To send and receive data, use nrfx_qspi_lfm_xfer.
- Parameters
p_config – [in] Pointer to the structure with custom instruction opcode and transfer configuration. Transfer length must be set to NRF_QSPI_CINSTR_LEN_1B.
- Returns NRFX_SUCCESS
Operation was successful.
- Returns NRFX_ERROR_BUSY
Driver currently handles other operation.
- Returns NRFX_ERROR_TIMEOUT
External memory is busy or there are connection issues.
-
nrfx_err_t
nrfx_qspi_lfm_xfer
(void const *p_tx_buffer, void *p_rx_buffer, size_t transfer_length, bool finalize)¶ Function for sending and receiving data in the custom instruction long frame mode.
Both specified buffers must be at least
transfer_length
bytes in size.- Parameters
p_tx_buffer – [in] Pointer to the array with data to send. Can be NULL if there is nothing to send.
p_rx_buffer – [out] Pointer to the array for receiving data. Can be NULL if there is nothing to receive.
transfer_length – [in] Number of bytes to send and receive.
finalize – [in] True if custom instruction long frame mode is to be finalized after this transfer.
- Returns NRFX_SUCCESS
Operation was successful.
- Returns NRFX_ERROR_TIMEOUT
External memory is busy or there are connection issues. Long frame mode becomes deactivated.
-
struct
nrfx_qspi_config_t
¶ - #include <nrfx_qspi.h>
QSPI driver instance configuration structure.
Public Members
-
uint32_t
xip_offset
¶ Address offset into the external memory for Execute in Place operation.
-
nrf_qspi_pins_t
pins
¶ Pin configuration structure.
-
nrf_qspi_prot_conf_t
prot_if
¶ Protocol layer interface configuration structure.
-
nrf_qspi_phy_conf_t
phy_if
¶ Physical layer interface configuration structure.
-
uint8_t
irq_priority
¶ Interrupt priority.
-
uint32_t
-
struct
nrfx_qspi_evt_ext_erase_t
¶ - #include <nrfx_qspi.h>
QSPI driver erase event data.
-
struct
nrfx_qspi_evt_ext_xfer_t
¶ - #include <nrfx_qspi.h>
QSPI driver transfer event data.
-
struct
nrfx_qspi_evt_ext_t
¶ - #include <nrfx_qspi.h>
QSPI driver extended event structure.
Public Members
-
nrfx_qspi_evt_ext_type_t
type
¶ Extended event type.
-
nrfx_qspi_evt_ext_xfer_t
xfer
¶ Data for write or read transfer event.
-
nrfx_qspi_evt_ext_erase_t
erase
¶ Data for erase event.
-
union nrfx_qspi_evt_ext_t.[anonymous]
data
¶ Union to store event data.
-
nrfx_qspi_evt_ext_type_t
-