SPI Driver
These functions allow you to configure and interact with the SPI peripheral on the ESP32 from within a WebAssembly module.
SPI Bus Configuration
Create SPI Bus Configuration
spi_bus_config = wasm_spi_bus_config_create();
- Description: Creates a new SPI bus configuration object.
- Returns: A pointer to the SPI bus configuration object.
Set MOSI Pin
wasm_spi_bus_config_set_mosi_io_num(spi_bus_config, mosi_io_num);
- Parameters:
spi_bus_config
: Pointer to the SPI bus configuration object.mosi_io_num
: GPIO number for the MOSI pin.
- Description: Sets the GPIO number for the MOSI pin.
Set SCLK Pin
wasm_spi_bus_config_set_sclk_io_num(spi_bus_config, sclk_io_num);
- Parameters:
spi_bus_config
: Pointer to the SPI bus configuration object.sclk_io_num
: GPIO number for the SCLK pin.
- Description: Sets the GPIO number for the SCLK pin.
Destroy SPI Bus Configuration
wasm_spi_bus_config_destroy(spi_bus_config);
- Parameters:
spi_bus_config
: Pointer to the SPI bus configuration object.
- Description: Frees the memory allocated for the SPI bus configuration object.
Initialize SPI Bus
result = wasm_spi_bus_initialize(host_id, spi_bus_config, dma_chan);
- Parameters:
host_id
: SPI host ID (e.g.,SPI2_HOST
orSPI3_HOST
).spi_bus_config
: Pointer to the SPI bus configuration object.dma_chan
: DMA channel to use (e.g.,SPI_DMA_CH_AUTO
).
- Returns:
ESP_OK
on success, or an error code on failure. - Description: Initializes the SPI bus with the specified configuration.
SPI Device Configuration
Create SPI Device Configuration
spi_device_config = wasm_spi_device_interface_config_create();
- Description: Creates a new SPI device configuration object.
- Returns: A pointer to the SPI device configuration object.
Set CS Pin
wasm_spi_device_interface_config_set_spics_io_num(spi_device_config, cs_io_num);
- Parameters:
spi_device_config
: Pointer to the SPI device configuration object.cs_io_num
: GPIO number for the CS pin.
- Description: Sets the GPIO number for the CS pin.
Destroy SPI Device Configuration
wasm_spi_device_interface_config_destroy(spi_device_config);
- Parameters:
spi_device_config
: Pointer to the SPI device configuration object.
- Description: Frees the memory allocated for the SPI device configuration object.
Add SPI Device
result = wasm_spi_bus_add_device(host_id, spi_device_config, handle_ptr);
- Parameters:
host_id
: SPI host ID (e.g.,SPI2_HOST
orSPI3_HOST
).spi_device_config
: Pointer to the SPI device configuration object.handle_ptr
: Pointer to store the handle of the added device.
- Returns:
ESP_OK
on success, or an error code on failure. - Description: Adds a device to the SPI bus.
SPI Transactions
Create SPI Transaction
spi_transaction = wasm_spi_transaction_create();
- Description: Creates a new SPI transaction object.
- Returns: A pointer to the SPI transaction object.
Set Transaction Length
wasm_spi_transaction_set_length(spi_transaction, length);
- Parameters:
spi_transaction
: Pointer to the SPI transaction object.length
: Length of the transaction in bits.
- Description: Sets the length of the SPI transaction.
Set TX Buffer
result = wasm_spi_transaction_set_tx_buffer(spi_transaction, tx_buffer_ptr);
- Parameters:
spi_transaction
: Pointer to the SPI transaction object.tx_buffer_ptr
: Pointer to the buffer containing data to transmit.
- Returns:
ESP_OK
on success, or an error code on failure. - Description: Sets the TX buffer for the SPI transaction.
Destroy SPI Transaction
wasm_spi_transaction_destroy(spi_transaction);
- Parameters:
spi_transaction
: Pointer to the SPI transaction object.
- Description: Frees the memory allocated for the SPI transaction object.
Transmit SPI Transaction
result = wasm_spi_device_transmit(handle_ptr, spi_transaction);
- Parameters:
handle_ptr
: Handle of the SPI device.spi_transaction
: Pointer to the SPI transaction object.
- Returns:
ESP_OK
on success, or an error code on failure. - Description: Transmits the SPI transaction to the device.
Example Usage
Initialize SPI Bus and Transmit Data
// Step 1: Create and configure SPI bus
spi_bus_config = wasm_spi_bus_config_create();
wasm_spi_bus_config_set_mosi_io_num(spi_bus_config, 23); // Set MOSI pin to GPIO 23
wasm_spi_bus_config_set_sclk_io_num(spi_bus_config, 18); // Set SCLK pin to GPIO 18
// Step 2: Initialize SPI bus
result = wasm_spi_bus_initialize(SPI2_HOST, spi_bus_config, SPI_DMA_CH_AUTO);
if (result != ESP_OK) {
println("Failed to initialize SPI bus");
wasm_spi_bus_config_destroy(spi_bus_config);
return;
}
// Step 3: Create and configure SPI device
spi_device_config = wasm_spi_device_interface_config_create();
wasm_spi_device_interface_config_set_spics_io_num(spi_device_config, 5); // Set CS pin to GPIO 5
// Step 4: Add SPI device
let handle_ptr = 0;
result = wasm_spi_bus_add_device(SPI2_HOST, spi_device_config, handle_ptr);
if (result != ESP_OK) {
println("Failed to add SPI device");
wasm_spi_device_interface_config_destroy(spi_device_config);
wasm_spi_bus_config_destroy(spi_bus_config);
return;
}
// Step 5: Create and configure SPI transaction
spi_transaction = wasm_spi_transaction_create();
wasm_spi_transaction_set_length(spi_transaction, 8 * 4); // Set transaction length to 4 bytes
let tx_buffer = new Uint8Array([0x01, 0x02, 0x03, 0x04]); // Data to transmit
result = wasm_spi_transaction_set_tx_buffer(spi_transaction, tx_buffer.buffer);
if (result != ESP_OK) {
println("Failed to set TX buffer");
wasm_spi_transaction_destroy(spi_transaction);
return;
}
// Step 6: Transmit SPI transaction
result = wasm_spi_device_transmit(handle_ptr, spi_transaction);
if (result != ESP_OK) {
println("Failed to transmit SPI transaction");
} else {
println("SPI transaction transmitted successfully");
}
// Step 7: Clean up
wasm_spi_transaction_destroy(spi_transaction);
wasm_spi_device_interface_config_destroy(spi_device_config);
wasm_spi_bus_config_destroy(spi_bus_config);
This example demonstrates how to configure the SPI bus, add a device, and transmit data using the SPI bindings.