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