# SPI

## Code Example

    from periphery import SPI

    # Open spidev1.0 with mode 0 and max speed 1MHz
    spi = SPI("/dev/spidev1.0", 0, 1000000)

    data_out = [0xaa, 0xbb, 0xcc, 0xdd]
    data_in = spi.transfer(data_out)

    print("shifted out [0x{:02x}, 0x{:02x}, 0x{:02x}, 0x{:02x}]".format(*data_out))
    print("shifted in  [0x{:02x}, 0x{:02x}, 0x{:02x}, 0x{:02x}]".format(*data_in))

    spi.close()

## API

class `periphery.``SPI`(devpath, mode, max_speed, bit_order='msb', bits_per_word=8, extra_flags=0)

  Bases: `object`

  Instantiate a SPI object and open the spidev device at the specified path with the specified SPI mode, max speed in hertz, and the defaults of “msb” bit order and 8 bits per word.

  Parameters:

  - devpath (str) – spidev device path.
  - mode (int) – SPI mode, can be 0, 1, 2, 3.
  - max_speed (int, float) – maximum speed in Hertz.
  - bit_order (str) – bit order, can be “msb” or “lsb”.
  - bits_per_word (int) – bits per word.
  - extra_flags (int) – extra spidev flags to be bitwise-ORed with the SPI mode.

  Returns: | SPI object.
  Return type: | SPI

  Raises:

  - `SPIError` – if an I/O or OS error occurs.
  - `TypeError` – if devpath, mode, max_speed, bit_order, bits_per_word, or extra_flags types are invalid.
  - `ValueError` – if mode, bit_order, bits_per_word, or extra_flags values are invalid.

  `transfer`(data)

    Shift out data and return shifted in data.

    Parameters: | data (bytes, bytearray, list) – a byte array or list of 8-bit integers to shift out.
    Returns: | data shifted in.
    Return type: | bytes, bytearray, list

    Raises:

    - `SPIError` – if an I/O or OS error occurs.
    - `TypeError` – if data type is invalid.
    - `ValueError` – if data is not valid bytes.

  `close`()

    Close the spidev SPI device.

    Raises: | `SPIError` – if an I/O or OS error occurs.

  `fd`

    Get the file descriptor of the underlying spidev device.

    Type: | int

  `devpath`

    Get the device path of the underlying spidev device.

    Type: | str

  `mode`

    Get or set the SPI mode. Can be 0, 1, 2, 3.

    Raises:

    - `SPIError` – if an I/O or OS error occurs.
    - `TypeError` – if mode type is not int.
    - `ValueError` – if mode value is invalid.

    Type: | int

  `max_speed`

    Get or set the maximum speed in Hertz.

    Raises:

    - `SPIError` – if an I/O or OS error occurs.
    - `TypeError` – if max_speed type is not int or float.

    Type: | int, float

  `bit_order`

    Get or set the SPI bit order. Can be “msb” or “lsb”.

    Raises:

    - `SPIError` – if an I/O or OS error occurs.
    - `TypeError` – if bit_order type is not str.
    - `ValueError` – if bit_order value is invalid.

    Type: | str

  `bits_per_word`

    Get or set the SPI bits per word.

    Raises:

    - `SPIError` – if an I/O or OS error occurs.
    - `TypeError` – if bits_per_word type is not int.
    - `ValueError` – if bits_per_word value is invalid.

    Type: | int

  `extra_flags`

    Get or set the spidev extra flags. Extra flags are bitwise-ORed with the SPI mode.

    Raises:

    - `SPIError` – if an I/O or OS error occurs.
    - `TypeError` – if extra_flags type is not int.
    - `ValueError` – if extra_flags value is invalid.

    Type: | int

class `periphery.``SPIError`

  Bases: `OSError`

  Base class for SPI errors.