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 | Value | 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¶
| Type | Name | Description | 
|---|---|---|
uint32_t | 
frequency | SPI clock frequency in Hz. The frequency will be set to the closest, lower or equal, supported frequency. | 
mira_gpio_pin_t | 
sck_pin | |
mira_gpio_pin_t | 
mosi_pin | |
mira_gpio_pin_t | 
miso_pin | |
mira_gpio_pin_t | 
ss_pin | |
mira_spi_mode_t | 
mode | |
mira_bit_order_t | 
bit_order | 
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
| Parameter | Description | 
|---|---|
spi_id | 
Peripheral id. | 
config | 
Configuration. Can be discarded after the return of this function. | 
Return
See the enum definition.
| Value | 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
| Parameter | Description | 
|---|---|
spi_id | 
Peripheral id. | 
Return
See the enum definition.
| Value | 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
| Parameter | 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
See the enum definition.
| Value | 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
| Parameter | Description | 
|---|---|
spi_id | 
Peripheral id. | 
Return
See the enum definition.
| Value | Description | 
|---|---|
MIRA_TRUE | 
SPI transfer is in progress. | 
MIRA_FALSE | 
SPI transfer is not in progress. |