SPI
The Serial Peripheral Interface bus (SPI) is a synchronous serial communication
interface specification used for short distance communication, primarily
for inter-chip communication within a single PCB.
SPI devices communicate in full duplex mode using a master-slave architecture
with a single master.
MiraOS supports multiple independent instances. Only SPI master is currently
supported.
Enums
mira_spi_mode_t
Name |
Description |
MIRA_SPI_MODE_0 |
SPI mode 0. CPOL=0, CPHA=0. Clock idle low, sample data on leading clock edge. |
MIRA_SPI_MODE_1 |
SPI mode 1. CPOL=0, CPHA=1. Clock idle low, sample data on trailing clock edge. |
MIRA_SPI_MODE_2 |
SPI mode 2. CPOL=1, CPHA=0. Clock idle high, sample data on leading clock edge. |
MIRA_SPI_MODE_3 |
SPI mode 3. CPOL=1, CPHA=1. Clock idle high, sample data on trailing clock edge. |
Structs
mira_spi_config_t
Name |
Type |
Description |
frequency |
uint32_t |
SPI clock frequency in Hz. The frequency will be set to the closest, lower or equal, supported frequency. |
sck_pin |
mira_gpio_pin_t |
|
mosi_pin |
mira_gpio_pin_t |
|
miso_pin |
mira_gpio_pin_t |
|
ss_pin |
mira_gpio_pin_t |
|
mode |
mira_spi_mode_t |
|
bit_order |
mira_bit_order_t |
|
Functions
mira_spi_init
mira_status_t mira_spi_init(uint8_t spi_id, const mira_spi_config_t *config);
Initialize SPI peripheral.
Before calling this function again mira_spi_uninit has to be called.
Parameters
Name |
Description |
spi_id |
Peripheral id. |
config |
Configuration. Can be discarded after the return of this function. |
Return value
Name |
Description |
MIRA_SUCCESS |
The SPI interface was successfully initialized. |
MIRA_ERROR_UNKNOWN |
An unknown error occurred. |
MIRA_ERROR_INVALID_ID |
The SPI id is invalid. |
MIRA_SPI_ERROR_CONFIG |
The config is invalid. |
MIRA_SPI_ERROR_MODE |
The mode is invalid. |
mira_spi_uninit
mira_status_t mira_spi_uninit(uint8_t spi_id);
Uninitialize SPI peripheral.
Parameters
Name |
Description |
spi_id |
Peripheral id. |
Return value
Name |
Description |
MIRA_SUCCESS |
The SPI interface was successfully uninitialized. |
MIRA_ERROR_UNKNOWN |
An unknown error occurred. |
MIRA_ERROR_INVALID_ID |
The SPI id is invalid. |
mira_spi_transfer
mira_status_t mira_spi_transfer(uint8_t spi_id, uint8_t *tx_buffer, uint16_t tx_buffer_length, uint8_t *rx_buffer, uint16_t rx_buffer_length);
Transmit and receive data.
The process calling this function will be sent a PROCESS_EVENT_POLL event after the transmission has completed.
Parameters
Name |
Description |
spi_id |
Peripheral id. |
tx_buffer |
Buffer containing the data to transmit. |
tx_buffer_length |
Number of bytes to transmit. |
rx_buffer |
Buffer where to store data received while transmitting. |
rx_buffer_length |
Max number of bytes to receive. |
Return value
Name |
Description |
MIRA_SUCCESS |
|
MIRA_ERROR_UNKNOWN |
An unknown error occurred. |
MIRA_ERROR_INVALID_ID |
The SPI id is invalid. |
MIRA_ERROR_NOT_INITIALIZED |
The SPI interface is not initialized. |
MIRA_SPI_ERROR_BUSY |
The SPI interface is busy. |
mira_spi_transfer_is_in_progress
mira_bool_t mira_spi_transfer_is_in_progress(uint8_t spi_id);
Check if an SPI transfer is in progress.
Parameters
Name |
Description |
spi_id |
Peripheral id. |
Return value
Name |
Description |
MIRA_TRUE |
SPI transfer is in progress. |
MIRA_FALSE |
SPI transfer is not in progress. |