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