Defines a behaviour required for SPI abstraction.
@type data() :: binary()
@type spi_address() :: byte()
@type spi_bus() :: String.t()
@callback open(binary() | charlist(), list()) :: {:ok, reference()} | {:error, any()}
@callback transfer(reference(), data()) :: {:ok, binary()} | {:error, any()}