# SpiDevice

Summary:[Constants](https://developer.android.com/reference/com/google/android/things/pio/SpiDevice#constants)\|[Methods](https://developer.android.com/reference/com/google/android/things/pio/SpiDevice#pubmethods)\|[Inherited Methods](https://developer.android.com/reference/com/google/android/things/pio/SpiDevice#inhmethods)\|[\[Expand All\]](https://developer.android.com/reference/com/google/android/things/pio/SpiDevice#)  

# SpiDevice

`
public


interface
SpiDevice
`  
`


implements

`[Closeable](https://developer.android.com/reference/java/io/Closeable)`


`

|-----------------------------------------|
| com.google.android.things.pio.SpiDevice |

<br />

*** ** * ** ***

Controls a SpiDevice. Opening a SPI device takes ownership of it for the whole system, preventing anyone else from opening/accessing the device until you call[close()](https://developer.android.com/reference/com/google/android/things/pio/SpiDevice#close()). Forgetting to call[close()](https://developer.android.com/reference/com/google/android/things/pio/SpiDevice#close())will prevent anyone (including the same process/app) from using the device.

## Summary

|                                                                                                                                                          ### Constants                                                                                                                                                           ||
|-------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `int` | [BIT_JUSTIFICATION_LSB_FIRST](https://developer.android.com/reference/com/google/android/things/pio/SpiDevice#BIT_JUSTIFICATION_LSB_FIRST) [Justification](https://developer.android.com/reference/com/google/android/things/pio/SpiDevice#setBitJustification(int))constant to transfer the least significant bit first. |
| `int` | [BIT_JUSTIFICATION_MSB_FIRST](https://developer.android.com/reference/com/google/android/things/pio/SpiDevice#BIT_JUSTIFICATION_MSB_FIRST) [Justification](https://developer.android.com/reference/com/google/android/things/pio/SpiDevice#setBitJustification(int))constant to transfer the most significant bit first.  |
| `int` | [MODE0](https://developer.android.com/reference/com/google/android/things/pio/SpiDevice#MODE0) [Mode](https://developer.android.com/reference/com/google/android/things/pio/SpiDevice#setMode(int))constant used to configure a SPI device in mode 0: Clock Polarity (CPOL/CKP) set to 0 and Clock Phase (CPHA) set to 0. |
| `int` | [MODE1](https://developer.android.com/reference/com/google/android/things/pio/SpiDevice#MODE1) [Mode](https://developer.android.com/reference/com/google/android/things/pio/SpiDevice#setMode(int))constant used to configure a SPI device in mode 1: Clock Polarity (CPOL/CKP) set to 0 and Clock Phase (CPHA) set to 1. |
| `int` | [MODE2](https://developer.android.com/reference/com/google/android/things/pio/SpiDevice#MODE2) [Mode](https://developer.android.com/reference/com/google/android/things/pio/SpiDevice#setMode(int))constant used to configure a SPI device in mode 2: Clock Polarity (CPOL/CKP) set to 1 and Clock Phase (CPHA) set to 0. |
| `int` | [MODE3](https://developer.android.com/reference/com/google/android/things/pio/SpiDevice#MODE3) [Mode](https://developer.android.com/reference/com/google/android/things/pio/SpiDevice#setMode(int))constant used to configure a SPI device in mode 3: Clock Polarity (CPOL/CKP) set to 1 and Clock Phase (CPHA) set to 1. |

|                                                                                                                                         ### Public methods                                                                                                                                         ||
|-------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| ` abstract void`                                                              | ` `[close](https://developer.android.com/reference/com/google/android/things/pio/SpiDevice#close())`() ` Close and release the SPI device.                                                                          |
| ` default `[String](https://developer.android.com/reference/java/lang/String) | ` `[getName](https://developer.android.com/reference/com/google/android/things/pio/SpiDevice#getName())`() ` Returns the I/O name.                                                                                  |
| ` default void`                                                               | ` `[read](https://developer.android.com/reference/com/google/android/things/pio/SpiDevice#read(byte[], int))`(byte[] buffer, int length) ` Read a byte array from the device.                                       |
| ` abstract void`                                                              | ` `[setBitJustification](https://developer.android.com/reference/com/google/android/things/pio/SpiDevice#setBitJustification(int))`(int justification) ` Set the bit justification.                                 |
| ` abstract void`                                                              | ` `[setBitsPerWord](https://developer.android.com/reference/com/google/android/things/pio/SpiDevice#setBitsPerWord(int))`(int bitsPerWord) ` Set the number of bits per word.                                       |
| ` abstract void`                                                              | ` `[setCsChange](https://developer.android.com/reference/com/google/android/things/pio/SpiDevice#setCsChange(boolean))`(boolean change) ` Set the chip select behavior.                                             |
| ` abstract void`                                                              | ` `[setDelay](https://developer.android.com/reference/com/google/android/things/pio/SpiDevice#setDelay(int))`(int delayUs) ` Set the delay between transfers.                                                       |
| ` abstract void`                                                              | ` `[setFrequency](https://developer.android.com/reference/com/google/android/things/pio/SpiDevice#setFrequency(int))`(int frequencyHz) ` Set the frequency of the bus.                                              |
| ` abstract void`                                                              | ` `[setMode](https://developer.android.com/reference/com/google/android/things/pio/SpiDevice#setMode(int))`(int mode) ` Set the SPI mode.                                                                           |
| ` abstract void`                                                              | ` `[transfer](https://developer.android.com/reference/com/google/android/things/pio/SpiDevice#transfer(byte[], byte[], int))`(byte[] txBuffer, byte[] rxBuffer, int length) ` Transfer data to and from the device. |
| ` default void`                                                               | ` `[write](https://developer.android.com/reference/com/google/android/things/pio/SpiDevice#write(byte[], int))`(byte[] buffer, int length) ` Write a byte array to the device.                                      |

| ### Inherited methods |
|-----------------------|---|
| [![](https://developer.android.com/static/assets/images/styles/disclosure_down.png)](https://developer.android.com/reference/com/google/android/things/pio/SpiDevice#)From interface` `[java.io.Closeable](https://developer.android.com/reference/java/io/Closeable)` ` |------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------| | ` abstract void` | ` `[close](https://developer.android.com/reference/java/io/Closeable#close())`() ` Closes this stream and releases any system resources associated with it. | ||
| [![](https://developer.android.com/static/assets/images/styles/disclosure_down.png)](https://developer.android.com/reference/com/google/android/things/pio/SpiDevice#)From interface` `[java.lang.AutoCloseable](https://developer.android.com/reference/java/lang/AutoCloseable)` ` |------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------| | ` abstract void` | ` `[close](https://developer.android.com/reference/java/lang/AutoCloseable#close())`() ` Closes this resource, relinquishing any underlying resources. | ||

## Constants

### BIT_JUSTIFICATION_LSB_FIRST

```
int BIT_JUSTIFICATION_LSB_FIRST
```

[Justification](https://developer.android.com/reference/com/google/android/things/pio/SpiDevice#setBitJustification(int))constant to transfer the least significant bit first.

<br />

Constant Value: 1 (0x00000001)  

### BIT_JUSTIFICATION_MSB_FIRST

```
int BIT_JUSTIFICATION_MSB_FIRST
```

[Justification](https://developer.android.com/reference/com/google/android/things/pio/SpiDevice#setBitJustification(int))constant to transfer the most significant bit first.

<br />

Constant Value: 0 (0x00000000)  

### MODE0

```
int MODE0
```

[Mode](https://developer.android.com/reference/com/google/android/things/pio/SpiDevice#setMode(int))constant used to configure a SPI device in mode 0: Clock Polarity (CPOL/CKP) set to 0 and Clock Phase (CPHA) set to 0.

<br />

Constant Value: 0 (0x00000000)  

### MODE1

```
int MODE1
```

[Mode](https://developer.android.com/reference/com/google/android/things/pio/SpiDevice#setMode(int))constant used to configure a SPI device in mode 1: Clock Polarity (CPOL/CKP) set to 0 and Clock Phase (CPHA) set to 1.

<br />

Constant Value: 1 (0x00000001)  

### MODE2

```
int MODE2
```

[Mode](https://developer.android.com/reference/com/google/android/things/pio/SpiDevice#setMode(int))constant used to configure a SPI device in mode 2: Clock Polarity (CPOL/CKP) set to 1 and Clock Phase (CPHA) set to 0.

<br />

Constant Value: 2 (0x00000002)  

### MODE3

```
int MODE3
```

[Mode](https://developer.android.com/reference/com/google/android/things/pio/SpiDevice#setMode(int))constant used to configure a SPI device in mode 3: Clock Polarity (CPOL/CKP) set to 1 and Clock Phase (CPHA) set to 1.

<br />

Constant Value: 3 (0x00000003)

## Public methods

### close

```
void close ()
```

Close and release the SPI device. Must be called in order for the SPI device to be released and be made available to other users.

<br />

|                                                     Throws                                                      ||
|----------------------------------------------------------------------------|-------------------------------------|
| [IOException](https://developer.android.com/reference/java/io/IOException) | if the SpiDevice is already closed. |

### getName

```
String getName ()
```

Returns the I/O name.

<br />

|                                  Returns                                   ||
|--------------------------------------------------------------------|--------|
| [String](https://developer.android.com/reference/java/lang/String) | <br /> |

### read

```
void read (byte[] buffer, 
                int length)
```

Read a byte array from the device.

<br />

|                                        Parameters                                        ||
|----------|--------------------------------------------------------------------------------|
| `buffer` | `byte`: Buffer to read into. <br />                                            |
| `length` | `int`: Number of bytes to read, may not be larger than the buffer size. <br /> |

|                                                Throws                                                ||
|----------------------------------------------------------------------------|--------------------------|
|                                                                            | IOException              |
|                                                                            | IllegalArgumentException |
| [IOException](https://developer.android.com/reference/java/io/IOException) |                          |

**See also:**

- [write(byte[], int)](https://developer.android.com/reference/com/google/android/things/pio/SpiDevice#write(byte[], int))
- [transfer(byte[], byte[], int)](https://developer.android.com/reference/com/google/android/things/pio/SpiDevice#transfer(byte[], byte[], int))  

### setBitJustification

```
void setBitJustification (int justification)
```

Set the bit justification. The bit justification is the ordering of bits in a byte (also called bit endianness).

<br />

|                                                                                                                                                                      Parameters                                                                                                                                                                      ||
|-----------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `justification` | `int`: bit justification mode, either[BIT_JUSTIFICATION_LSB_FIRST](https://developer.android.com/reference/com/google/android/things/pio/SpiDevice#BIT_JUSTIFICATION_LSB_FIRST)or[BIT_JUSTIFICATION_MSB_FIRST](https://developer.android.com/reference/com/google/android/things/pio/SpiDevice#BIT_JUSTIFICATION_MSB_FIRST). <br /> |

|                                    Throws                                     ||
|----------------------------------------------------------------------------|---|
| [IOException](https://developer.android.com/reference/java/io/IOException) |   |

### setBitsPerWord

```
void setBitsPerWord (int bitsPerWord)
```

Set the number of bits per word.

<br />

|                      Parameters                       ||
|---------------|----------------------------------------|
| `bitsPerWord` | `int`: Number of bits per word. <br /> |

|                                    Throws                                     ||
|----------------------------------------------------------------------------|---|
| [IOException](https://developer.android.com/reference/java/io/IOException) |   |

### setCsChange

```
void setCsChange (boolean change)
```

Set the chip select behavior. Affects chipselect after this transfer completes.

<br />

|                                        Parameters                                        ||
|----------|--------------------------------------------------------------------------------|
| `change` | `boolean`: If true, the chip may stay selected until the next transfer. <br /> |

|                                    Throws                                     ||
|----------------------------------------------------------------------------|---|
| [IOException](https://developer.android.com/reference/java/io/IOException) |   |

### setDelay

```
void setDelay (int delayUs)
```

Set the delay between transfers. The delay in microseconds after a transfer before (optionally) changing the chip select status and completing.

<br />

|                   Parameters                   ||
|-----------|-------------------------------------|
| `delayUs` | `int`: Delay in microseonds. <br /> |

|                                    Throws                                     ||
|----------------------------------------------------------------------------|---|
| [IOException](https://developer.android.com/reference/java/io/IOException) |   |

### setFrequency

```
void setFrequency (int frequencyHz)
```

Set the frequency of the bus. The frequencies supported is board dependent and can usually be found in the board documentation.

<br />

|                                Parameters                                 ||
|---------------|------------------------------------------------------------|
| `frequencyHz` | `int`: Frequency to set in Hertz. Must be positive. <br /> |

|                                                       Throws                                                        ||
|--------------------------------------------------------------------------------------------------------|-------------|
|                                                                                                        | IOException |
| [IllegalArgumentException](https://developer.android.com/reference/java/lang/IllegalArgumentException) |             |
| [IOException](https://developer.android.com/reference/java/io/IOException)                             |             |

### setMode

```
void setMode (int mode)
```

Set the SPI mode.

<br />

|                                                                                                                                                                                                              Parameters                                                                                                                                                                                                               ||
|--------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `mode` | `int`: Mode to set. One of[MODE0](https://developer.android.com/reference/com/google/android/things/pio/SpiDevice#MODE0),[MODE1](https://developer.android.com/reference/com/google/android/things/pio/SpiDevice#MODE1),[MODE2](https://developer.android.com/reference/com/google/android/things/pio/SpiDevice#MODE2),[MODE3](https://developer.android.com/reference/com/google/android/things/pio/SpiDevice#MODE3). <br /> |

|                                    Throws                                     ||
|----------------------------------------------------------------------------|---|
| [IOException](https://developer.android.com/reference/java/io/IOException) |   |

### transfer

```
void transfer (byte[] txBuffer, 
                byte[] rxBuffer, 
                int length)
```

Transfer data to and from the device.

<br />

|                                                              Parameters                                                              ||
|------------|--------------------------------------------------------------------------------------------------------------------------|
| `txBuffer` | `byte`: Data to send to the device, or null to receive only. <br />                                                      |
| `rxBuffer` | `byte`: Data read from the device, or null to send only. <br />                                                          |
| `length`   | `int`: Number of bytes to transfer, may not be larger than the size of txBuffer or rxBuffer if they are non-null. <br /> |

|                                                Throws                                                ||
|----------------------------------------------------------------------------|--------------------------|
|                                                                            | IOException              |
|                                                                            | IllegalArgumentException |
| [IOException](https://developer.android.com/reference/java/io/IOException) |                          |

**See also:**

- [read(byte[], int)](https://developer.android.com/reference/com/google/android/things/pio/SpiDevice#read(byte[], int))
- [write(byte[], int)](https://developer.android.com/reference/com/google/android/things/pio/SpiDevice#write(byte[], int))  

### write

```
void write (byte[] buffer, 
                int length)
```

Write a byte array to the device.

<br />

|                                        Parameters                                         ||
|----------|---------------------------------------------------------------------------------|
| `buffer` | `byte`: Buffer to write. <br />                                                 |
| `length` | `int`: Number of bytes to write, may not be larger than the buffer size. <br /> |

|                                                Throws                                                ||
|----------------------------------------------------------------------------|--------------------------|
|                                                                            | IOException              |
|                                                                            | IllegalArgumentException |
| [IOException](https://developer.android.com/reference/java/io/IOException) |                          |

**See also:**

- [read(byte[], int)](https://developer.android.com/reference/com/google/android/things/pio/SpiDevice#read(byte[], int))
- [transfer(byte[], byte[], int)](https://developer.android.com/reference/com/google/android/things/pio/SpiDevice#transfer(byte[], byte[], int))  
-

  ## Interfaces

  - [Gpio](https://developer.android.com/reference/com/google/android/things/pio/Gpio)
  - [GpioCallback](https://developer.android.com/reference/com/google/android/things/pio/GpioCallback)
  - [I2cDevice](https://developer.android.com/reference/com/google/android/things/pio/I2cDevice)
  - [Pwm](https://developer.android.com/reference/com/google/android/things/pio/Pwm)
  - [SpiDevice](https://developer.android.com/reference/com/google/android/things/pio/SpiDevice)
  - [UartDevice](https://developer.android.com/reference/com/google/android/things/pio/UartDevice)
  - [UartDeviceCallback](https://developer.android.com/reference/com/google/android/things/pio/UartDeviceCallback)
-

  ## Classes

  - [PeripheralManager](https://developer.android.com/reference/com/google/android/things/pio/PeripheralManager)