SPI Functions
dev.io.spi - wire path i\e - generated from fwMenuSPI.
s_pi_write
Write and Read. Writes data to SPI and returns response data
Write and Read (SPI)
Performs a full-duplex SPI transaction: writes the supplied bytes on MOSI while simultaneously capturing the bytes returned on MISO, then prints the received bytes.
Usage
Enter one or more data bytes as hexadecimal values separated by spaces.
w 9F
w 03 00 00 00
w AB CD EF
Behavior
- Chip Select is asserted automatically (driven low before the transfer, high after).
- The transfer length equals the number of input bytes; MISO is captured for every clocked byte.
- Uses the currently configured SPI baud rate, mode, and CS pin from the SPI settings.
Arguments
dataBytes— one or more hex bytes to clock out (e.g.9F,03 00 00 00).
Returns
success—trueif the transfer completed,falseon invalid input or bus error.- Response bytes are printed as space-separated hex.
Example
Reading a SPI flash JEDEC ID:
w 9F 00 00 00
Response bytes 2–4 contain the manufacturer / device ID.
Wire command: i\e\w
| Arg | Wire type |
|---|---|
| data_bytes | hexbytes |
Returns: spi_response (hexbytes)
dev.io.spi.s_pi_write(data_bytes: bytes | bytearray) -> Result
ow_status ow_io_spi_s_pi_write(ow_device* dev, const uint8_t* data_bytes, size_t data_bytes_len, uint8_t* spi_response, size_t spi_response_cap, size_t* spi_response_len);
dev.io().spi().s_pi_write(data_bytes: &[u8]) -> Result<Vec<u8>, OwError>
The C and Rust signatures above are also the WASM guest signatures - the device API surface is identical; only the transport differs (ow_open_wasm(&dev) in C, OneWili::open() in Rust).
dev.io.spi.s_pi_write(data_bytes) # returns value; check dev.ok
show_spi_settings
SPI Settings. Opens the persistent SPI settings menu
Wire command: i\e\s
Returns: none (Ok/Err only)
dev.io.spi.show_spi_settings() -> Result
ow_status ow_io_spi_show_spi_settings(ow_device* dev);
dev.io().spi().show_spi_settings() -> Result<(), OwError>
The C and Rust signatures above are also the WASM guest signatures - the device API surface is identical; only the transport differs (ow_open_wasm(&dev) in C, OneWili::open() in Rust).
dev.io.spi.show_spi_settings() # check dev.ok