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.
Detailed description on enum value SPI mode 0. CPOL=0, CPHA=0. Clock idle low, sample data on leading clock edge.
Detailed description on enum value SPI mode 1. CPOL=0, CPHA=1. Clock idle low, sample data on trailing clock edge.
Detailed description on enum value SPI mode 2. CPOL=1, CPHA=0. Clock idle high, sample data on leading clock edge.
Detailed description on enum value SPI mode 3. CPOL=1, CPHA=1. Clock idle high, sample data on trailing clock edge.
Enums¶
mira_spi_mode_t¶
Name | Description |
---|---|
MIRA_SPI_MODE_0 |
|
MIRA_SPI_MODE_1 |
|
MIRA_SPI_MODE_2 |
|
MIRA_SPI_MODE_3 |
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. |