X-Git-Url: https://git.ayoreis.com/hackapet/Adafruit_Blinka.git/blobdiff_plain/b4be9b426d23248ba665a09d16f026dfb2f49d7e..a280deaa4ec75af18ad67db05ff52a940daf4d71:/src/busio.py?ds=inline diff --git a/src/busio.py b/src/busio.py old mode 100644 new mode 100755 index a02eccf..708039c --- a/src/busio.py +++ b/src/busio.py @@ -1,4 +1,14 @@ +""" +`busio` - Bus protocol support like I2C and SPI +================================================= + +See `CircuitPython:busio` in CircuitPython for more details. + +* Author(s): cefn +""" + from adafruit_blinka import Enum, Lockable, agnostic +from adafruit_blinka.agnostic import board as boardId class I2C(Lockable): def __init__(self, scl, sda, frequency=400000): @@ -6,11 +16,14 @@ class I2C(Lockable): def init(self, scl, sda, frequency): self.deinit() - from machine import I2C as _I2C + if boardId == "raspi_3" or boardId == "raspi_2": + from adafruit_blinka.microcontroller.raspi_23.i2c import I2C as _I2C + else: + from machine import I2C as _I2C from microcontroller.pin import i2cPorts for portId, portScl, portSda in i2cPorts: if scl == portScl and sda == portSda: - self._i2c = I2C(portId, mode=_I2C.MASTER, baudrate=frequency) + self._i2c = _I2C(portId, mode=_I2C.MASTER, baudrate=frequency) break else: raise NotImplementedError("No Hardware I2C on (scl,sda)={}\nValid UART ports".format( @@ -50,27 +63,38 @@ class I2C(Lockable): class SPI(Lockable): def __init__(self, clock, MOSI=None, MISO=None): + self.deinit() + if boardId == "raspi_3" or boardId == "raspi_2": + from adafruit_blinka.microcontroller.raspi_23.spi import SPI as _SPI + else: + from machine import SPI as _SPI from microcontroller.pin import spiPorts for portId, portSck, portMosi, portMiso in spiPorts: if clock == portSck and MOSI == portMosi and MISO == portMiso: - self._spi = SPI(portId) + self._spi = _SPI(portId) self._pins = (portSck, portMosi, portMiso) break else: raise NotImplementedError( - "No Hardware SPI on (clock, MOSI, MISO)={}\nValid SPI ports:{}". + "No Hardware SPI on (SCLK, MOSI, MISO)={}\nValid SPI ports:{}". format((clock, MOSI, MISO), spiPorts)) def configure(self, baudrate=100000, polarity=0, phase=0, bits=8): - if self._locked: + if boardId == "raspi_3" or boardId == "raspi_2": + from adafruit_blinka.microcontroller.raspi_23.spi import SPI as _SPI + from adafruit_blinka.microcontroller.raspi_23.pin import Pin + else: + from machine import SPI as _SPI from machine import Pin + + if self._locked: # TODO check if #init ignores MOSI=None rather than unsetting, to save _pinIds attribute self._spi.init( baudrate=baudrate, polarity=polarity, phase=phase, bits=bits, - firstbit=SPI.MSB, + firstbit=_SPI.MSB, sck=Pin(self._pins[0].id), mosi=Pin(self._pins[1].id), miso=Pin(self._pins[2].id) @@ -86,10 +110,10 @@ class SPI(Lockable): return self._spi.write(buf) def readinto(self, buf): - return self.readinto(buf) + return self._spi.readinto(buf) def write_readinto(self, buffer_out, buffer_in): - return self.write_readinto(buffer_out, buffer_in) + return self._spi.write_readinto(buffer_out, buffer_in) class UART(Lockable): @@ -99,7 +123,6 @@ class UART(Lockable): Parity.ODD = Parity() Parity.EVEN = Parity() - # TODO investigate UART receiver_buffer_size as e.g. read_buf_len in https://github.com/micropython/micropython/blob/3eb0694b97c6a8f0e93b874549aac40d8b78b0e5/ports/stm32/uart.c def __init__(self, tx, rx,