]> Repositories - Adafruit_Blinka-hackapet.git/commitdiff
Merge remote-tracking branch 'upstream/master'
authorFranklin Harding <franklin@harding.coffee>
Mon, 29 Mar 2021 01:00:48 +0000 (18:00 -0700)
committerFranklin Harding <franklin@harding.coffee>
Mon, 29 Mar 2021 01:00:48 +0000 (18:00 -0700)
1  2 
src/adafruit_blinka/microcontroller/ftdi_mpsse/mpsse/pin.py
src/adafruit_blinka/microcontroller/ftdi_mpsse/mpsse/spi.py
src/board.py
src/busio.py
src/digitalio.py
src/microcontroller/__init__.py
src/microcontroller/pin.py

index 6a0ea938ffe3db0a79f5ff664bdc1c857c51a9a7,42ae5abd70e1176e7f6faaf23c3e53a4d5fd98ad..dc6282abfa82ab17b9e38c796e37c0a1daeeddf9
@@@ -1,31 -1,34 +1,34 @@@
 -"""FT232H pin names"""
 +"""MPSSE pin names"""
  
  
  class Pin:
 -    """A basic Pin class for use with FT232H."""
 +    """A basic Pin class for use with FTDI MPSSEs."""
  
      IN = 0
      OUT = 1
      LOW = 0
      HIGH = 1
+     PULL_NONE = 0
+     PULL_UP = 1
+     PULL_DOWN = 2
  
 -    ft232h_gpio = None
 +    mpsse_gpio = None
  
 -    def __init__(self, pin_id=None):
 +    def __init__(self, pin_id=None, url="ftdi://ftdi:ft232h/1"):
          # setup GPIO controller if not done yet
          # use one provided by I2C as default
 -        if not Pin.ft232h_gpio:
 +        if not Pin.mpsse_gpio:
              # pylint: disable=import-outside-toplevel
              from pyftdi.i2c import I2cController
  
              # pylint: enable=import-outside-toplevel
  
              i2c = I2cController()
 -            i2c.configure("ftdi://ftdi:ft232h/1")
 -            Pin.ft232h_gpio = i2c.get_gpio()
 +            i2c.configure(url)
 +            Pin.mpsse_gpio = i2c.get_gpio()
          # check if pin is valid
          if pin_id:
 -            if Pin.ft232h_gpio.all_pins & 1 << pin_id == 0:
 +            if Pin.mpsse_gpio.all_pins & 1 << pin_id == 0:
                  raise ValueError("Can not use pin {} as GPIO.".format(pin_id))
          # ID is just bit position
          self.id = pin_id
          """Initialize the Pin"""
          if not self.id:
              raise RuntimeError("Can not init a None type pin.")
 -        # FT232H does't have configurable internal pulls?
 +        # MPSSE does't have configurable internal pulls?
          if pull:
-             raise ValueError("Internal pull up/down not currently supported.")
+             raise NotImplementedError("Internal pull up/down not currently supported.")
 -        pin_mask = Pin.ft232h_gpio.pins | 1 << self.id
 -        current = Pin.ft232h_gpio.direction
 +        pin_mask = Pin.mpsse_gpio.pins | 1 << self.id
 +        current = Pin.mpsse_gpio.direction
          if mode == self.OUT:
              current |= 1 << self.id
          else:
              current &= ~(1 << self.id)
 -        Pin.ft232h_gpio.set_direction(pin_mask, current)
 +        Pin.mpsse_gpio.set_direction(pin_mask, current)
  
      def value(self, val=None):
          """Set or return the Pin Value"""
          if not self.id:
              raise RuntimeError("Can not access a None type pin.")
 -        current = Pin.ft232h_gpio.read(with_output=True)
 +        current = Pin.mpsse_gpio.read(with_output=True)
          # read
          if val is None:
              return 1 if current & 1 << self.id != 0 else 0
              else:
                  current &= ~(1 << self.id)
              # must mask out any input pins
 -            Pin.ft232h_gpio.write(current & Pin.ft232h_gpio.direction)
 +            Pin.mpsse_gpio.write(current & Pin.mpsse_gpio.direction)
              return None
          # release the kraken
 -        raise RuntimeError("Invalid value for pin")
 -
 -
 -# create pin instances for each pin
 -# D0 to D3 are used by I2C/SPI
 -D4 = Pin(4)
 -D5 = Pin(5)
 -D6 = Pin(6)
 -D7 = Pin(7)
 -C0 = Pin(8)
 -C1 = Pin(9)
 -C2 = Pin(10)
 -C3 = Pin(11)
 -C4 = Pin(12)
 -C5 = Pin(13)
 -C6 = Pin(14)
 -C7 = Pin(15)
 -# C8 and C9 are not GPIO
 -
 -# create None type pins for I2C and SPI since they are expected to be defined
 -SCL = Pin()
 -SDA = Pin()
 -SCK = SCLK = Pin()
 -MOSI = Pin()
 -MISO = Pin()
 +        raise RuntimeError("Invalid value for pin")
index 69fe66fcbfbf1b7e085f8f6a5afc1b8b9790094c,c768eaf8b87d960990feff26a308890a2a4520c5..63047003a3cbf8ed318d1c8f9ab937c37f64455e
@@@ -1,29 -1,26 +1,29 @@@
 -"""SPI Class for FT232H"""
 -from adafruit_blinka.microcontroller.ft232h.pin import Pin
 +"""SPI Class for FTDI MPSSE"""
 +from adafruit_blinka.microcontroller.ftdi_mpsse.mpsse.pin import Pin
  
  # pylint: disable=protected-access
  class SPI:
 -    """Custom SPI Class for FT232H"""
 +    """Custom SPI Class for FTDI MPSSE"""
  
      MSB = 0
  
 -    def __init__(self):
 +    def __init__(self, id=None):
          # pylint: disable=import-outside-toplevel
          from pyftdi.spi import SpiController
  
          # pylint: enable=import-outside-toplevel
  
          self._spi = SpiController(cs_count=1)
 -        self._spi.configure("ftdi://ftdi:ft232h/1")
 +        if id is None:
 +            self._spi.configure("ftdi://ftdi:ft232h/1", frequency=frequency)
 +        else
 +            self._spi.configure("ftdi://ftdi:ft2232h/{}".format(id+1), frequency=frequency)
          self._port = self._spi.get_port(0)
          self._port.set_frequency(100000)
          self._port._cpol = 0
          self._port._cpha = 0
          # Change GPIO controller to SPI
 -        Pin.ft232h_gpio = self._spi.get_gpio()
 +        Pin.mpsse_gpio = self._spi.get_gpio()
  
      # pylint: disable=too-many-arguments,unused-argument
      def init(
              chunk_end = chunk_start + self._spi.PAYLOAD_MAX_LENGTH
              self._port.write(buf[chunk_start:chunk_end])
          if rest:
-             self._port.write(buf[-1 * rest :])
+             rest_start = start + chunks * self._spi.PAYLOAD_MAX_LENGTH
+             self._port.write(buf[rest_start:end])
  
      # pylint: disable=unused-argument
      def readinto(self, buf, start=0, end=None, write_value=0):
          """Read data from SPI and into the buffer"""
          end = end if end else len(buf)
-         result = self._port.read(end - start)
+         buffer_out = [write_value] * (end - start)
+         result = self._port.exchange(buffer_out, end - start, duplex=True)
          for i, b in enumerate(result):
              buf[start + i] = b
  
diff --combined src/board.py
index a9b341deb4fdab98e252987df81d9933539f7f21,e4909f243c3304754d9c19b84c346e29113aa8d9..a89d70daa8c7aca2c33297a5c1106509158aa53d
@@@ -50,10 -50,10 +50,10 @@@ elif detector.board.any_raspberry_pi_40
  elif detector.board.any_raspberry_pi_cm:
      from adafruit_blinka.board.raspberrypi.raspi_cm import *
  
- elif detector.board.RASPBERRY_PI_A or detector.board.RASPBERRY_PI_B_REV1:
+ elif detector.board.RASPBERRY_PI_B_REV1:
      from adafruit_blinka.board.raspberrypi.raspi_1b_rev1 import *
  
- elif detector.board.RASPBERRY_PI_B_REV2:
+ elif detector.board.RASPBERRY_PI_A or detector.board.RASPBERRY_PI_B_REV2:
      from adafruit_blinka.board.raspberrypi.raspi_1b_rev2 import *
  
  elif board_id == ap_board.BEAGLEBONE_BLACK:
@@@ -67,11 -67,16 +67,16 @@@ elif board_id == ap_board.BEAGLEBONE_BL
  
  elif board_id == ap_board.BEAGLEBONE_GREEN_WIRELESS:
      from adafruit_blinka.board.beagleboard.beaglebone_black import *
  elif board_id == ap_board.BEAGLEBONE_BLACK_WIRELESS:
      from adafruit_blinka.board.beagleboard.beaglebone_black import *
  elif board_id == ap_board.BEAGLEBONE_POCKETBEAGLE:
      from adafruit_blinka.board.beagleboard.beaglebone_pocketbeagle import *
  
+ elif board_id == ap_board.BEAGLEBONE_AI:
+     from adafruit_blinka.board.beagleboard.beaglebone_ai import *
  elif board_id == ap_board.ORANGE_PI_PC:
      from adafruit_blinka.board.orangepi.orangepipc import *
  
@@@ -96,6 -101,18 +101,18 @@@ elif board_id == ap_board.ORANGE_PI_PLU
  elif board_id == ap_board.ORANGE_PI_2:
      from adafruit_blinka.board.orangepi.orangepipc import *
  
+ elif board_id == ap_board.ORANGE_PI_ZERO_PLUS_2H5:
+     from adafruit_blinka.board.orangepi.orangepizeroplus2h5 import *
+ elif board_id == ap_board.ORANGE_PI_ZERO_PLUS:
+     from adafruit_blinka.board.orangepi.orangepizeroplus import *
+ elif board_id == ap_board.ORANGE_PI_ZERO_2:
+     from adafruit_blinka.board.orangepi.orangepizero2 import *
+ elif board_id == ap_board.BANANA_PI_M2_ZERO:
+     from adafruit_blinka.board.bananapi.bpim2zero import *
  elif board_id == ap_board.GIANT_BOARD:
      from adafruit_blinka.board.giantboard import *
  
@@@ -105,6 -122,9 +122,9 @@@ elif board_id == ap_board.JETSON_TX1
  elif board_id == ap_board.JETSON_TX2:
      from adafruit_blinka.board.nvidia.jetson_tx2 import *
  
+ elif board_id == ap_board.JETSON_TX2_NX:
+     from adafruit_blinka.board.nvidia.jetson_tx2_nx import *
  elif board_id == ap_board.JETSON_XAVIER:
      from adafruit_blinka.board.nvidia.jetson_xavier import *
  
@@@ -114,8 -134,14 +134,14 @@@ elif board_id == ap_board.JETSON_NANO
  elif board_id == ap_board.JETSON_NX:
      from adafruit_blinka.board.nvidia.jetson_nx import *
  
+ elif board_id == ap_board.CLARA_AGX_XAVIER:
+     from adafruit_blinka.board.nvidia.clara_agx_xavier import *
  elif board_id == ap_board.CORAL_EDGE_TPU_DEV:
-     from adafruit_blinka.board.coral_edge_tpu import *
+     from adafruit_blinka.board.coral_dev_board import *
+ elif board_id == ap_board.CORAL_EDGE_TPU_DEV_MINI:
+     from adafruit_blinka.board.coral_dev_board_mini import *
  
  elif board_id == ap_board.ODROID_C2:
      from adafruit_blinka.board.hardkernel.odroidc2 import *
@@@ -135,9 -161,6 +161,9 @@@ elif board_id == ap_board.DRAGONBOARD_4
  elif board_id == ap_board.FTDI_FT232H:
      from adafruit_blinka.board.ftdi_ft232h import *
  
 +elif board_id == ap_board.FTDI_FT2232H:
 +    from adafruit_blinka.board.ftdi_ft2232h import *
 +
  elif board_id == ap_board.BINHO_NOVA:
      from adafruit_blinka.board.binho_nova import *
  
@@@ -153,6 -176,12 +179,12 @@@ elif board_id == ap_board.SIFIVE_UNLEAS
  elif board_id == ap_board.PINE64:
      from adafruit_blinka.board.pine64 import *
  
+ elif board_id == ap_board.PINEH64:
+     from adafruit_blinka.board.pineH64 import *
+ elif board_id == ap_board.SOPINE:
+     from adafruit_blinka.board.soPine import *
  elif board_id == ap_board.CLOCKWORK_CPI3:
      from adafruit_blinka.board.clockworkcpi3 import *
  
@@@ -162,6 -191,24 +194,24 @@@ elif board_id == ap_board.ONION_OMEGA2
  elif board_id == ap_board.ROCK_PI_S:
      from adafruit_blinka.board.radxa.rockpis import *
  
+ elif board_id == ap_board.ROCK_PI_4:
+     from adafruit_blinka.board.radxa.rockpi4 import *
+ elif board_id == ap_board.UDOO_X86:
+     from adafruit_blinka.board.udoo_x86ultra import *
+ elif board_id == ap_board.STM32MP157C_DK2:
+     from adafruit_blinka.board.stm32.stm32mp157c_dk2 import *
+ elif board_id == ap_board.LUBANCAT_IMX6ULL:
+     from adafruit_blinka.board.lubancat.lubancat_imx6ull import *
+ elif board_id == ap_board.NANOPI_NEO_AIR:
+     from adafruit_blinka.board.nanopi.neoair import *
+ elif board_id == ap_board.NANOPI_DUO2:
+     from adafruit_blinka.board.nanopi.duo2 import *
  elif "sphinx" in sys.modules:
      pass
  
diff --combined src/busio.py
index 1ad6e41991abc53b396e61b2af0a1215206b947d,67494592e6592ea7928289fe94f93e726e47f02c..931b43e15e19d9a9edb1926dd9144c715cdd9e78
@@@ -7,7 -7,10 +7,10 @@@ See `CircuitPython:busio` in CircuitPyt
  * Author(s): cefn
  """
  
- import threading
+ try:
+     import threading
+ except ImportError:
+     threading = None
  
  import adafruit_platformdetect.constants.boards as ap_board
  import adafruit_platformdetect.constants.chips as ap_chip
@@@ -24,14 -27,14 +27,14 @@@ class I2C(Lockable)
      for both MicroPython and Linux.
      """
  
-     def __init__(self, scl, sda, frequency=400000):
+     def __init__(self, scl, sda, frequency=100000):
          self.init(scl, sda, frequency)
  
      def init(self, scl, sda, frequency):
          """Initialization"""
          self.deinit()
          if detector.board.ftdi_ft232h:
 -            from adafruit_blinka.microcontroller.ft232h.i2c import I2C as _I2C
 +            from adafruit_blinka.microcontroller.ftdi_mpsse.mpsse.i2c import I2C as _I2C
  
              self._i2c = _I2C(frequency=frequency)
              return
@@@ -52,8 -55,6 +55,8 @@@
              return
          if detector.board.any_embedded_linux:
              from adafruit_blinka.microcontroller.generic_linux.i2c import I2C as _I2C
 +        elif detector.board.ftdi_ft2232h:
 +            from adafruit_blinka.microcontroller.ftdi_mpsse.mpsse.i2c import I2C as _I2C
          else:
              from machine import I2C as _I2C
          from microcontroller.pin import i2cPorts
@@@ -71,8 -72,8 +74,8 @@@
                      (scl, sda), i2cPorts
                  )
              )
-         self._lock = threading.RLock()
+         if threading is not None:
+             self._lock = threading.RLock()
  
      def deinit(self):
          """Deinitialization"""
              pass
  
      def __enter__(self):
-         self._lock.acquire()
+         if threading is not None:
+             self._lock.acquire()
          return self
  
      def __exit__(self, exc_type, exc_value, traceback):
-         self._lock.release()
+         if threading is not None:
+             self._lock.release()
          self.deinit()
  
      def scan(self):
          in_end=None,
          stop=False
      ):
-         """"Write to a device at specified address from a buffer then read
+         """ "Write to a device at specified address from a buffer then read
          from a device at specified address into a buffer
          """
          return self._i2c.writeto_then_readfrom(
@@@ -148,8 -151,8 +153,8 @@@ class SPI(Lockable)
      def __init__(self, clock, MOSI=None, MISO=None):
          self.deinit()
          if detector.board.ftdi_ft232h:
 -            from adafruit_blinka.microcontroller.ft232h.spi import SPI as _SPI
 -            from adafruit_blinka.microcontroller.ft232h.pin import SCK, MOSI, MISO
 +            from adafruit_blinka.microcontroller.ftdi_mpsse.mpsse.spi import SPI as _SPI
 +            from adafruit_blinka.microcontroller.ftdi_mpsse.ft232h.pin import SCK, MOSI, MISO
  
              self._spi = _SPI()
              self._pins = (SCK, MOSI, MISO)
              return
          if detector.board.any_embedded_linux:
              from adafruit_blinka.microcontroller.generic_linux.spi import SPI as _SPI
 +        elif detector.board.ftdi_ft2232h:
 +            from adafruit_blinka.microcontroller.ftdi_mpsse.mpsse.spi import SPI as _SPI
          else:
              from machine import SPI as _SPI
          from microcontroller.pin import spiPorts
          if detector.board.any_raspberry_pi or detector.board.any_raspberry_pi_40_pin:
              from adafruit_blinka.microcontroller.bcm283x.pin import Pin
              from adafruit_blinka.microcontroller.generic_linux.spi import SPI as _SPI
+         elif detector.board.BEAGLEBONE_AI:
+             from adafruit_blinka.microcontroller.dra74x.pin import Pin
+             from adafruit_blinka.microcontroller.generic_linux.spi import SPI as _SPI
          elif detector.board.any_beaglebone:
              from adafruit_blinka.microcontroller.am335x.pin import Pin
              from adafruit_blinka.microcontroller.generic_linux.spi import SPI as _SPI
-         elif detector.board.any_orange_pi and detector.chip.id == ap_chip.SUN8I:
+         elif detector.board.any_orange_pi:
+             if detector.chip.id == ap_chip.SUN8I:
+                 from adafruit_blinka.microcontroller.allwinner.h3.pin import Pin
+             elif detector.chip.id == ap_chip.H5:
+                 from adafruit_blinka.microcontroller.allwinner.h5.pin import Pin
+             elif detector.chip.id == ap_chip.H616:
+                 from adafruit_blinka.microcontroller.allwinner.h616.pin import Pin
+             from adafruit_blinka.microcontroller.generic_linux.spi import SPI as _SPI
+         elif detector.board.any_nanopi and detector.chip.id == ap_chip.SUN8I:
              from adafruit_blinka.microcontroller.allwinner.h3.pin import Pin
              from adafruit_blinka.microcontroller.generic_linux.spi import SPI as _SPI
          elif board_id == ap_board.GIANT_BOARD:
          elif board_id == ap_board.CORAL_EDGE_TPU_DEV:
              from adafruit_blinka.microcontroller.nxp_imx8m.pin import Pin
              from adafruit_blinka.microcontroller.generic_linux.spi import SPI as _SPI
+         elif board_id == ap_board.CORAL_EDGE_TPU_DEV_MINI:
+             from adafruit_blinka.microcontroller.mt8167.pin import Pin
+             from adafruit_blinka.microcontroller.generic_linux.spi import SPI as _SPI
          elif board_id == ap_board.ODROID_C2:
              from adafruit_blinka.microcontroller.amlogic.s905.pin import Pin
              from adafruit_blinka.microcontroller.generic_linux.spi import SPI as _SPI
          elif detector.board.ROCK_PI_S:
              from adafruit_blinka.microcontroller.generic_linux.spi import SPI as _SPI
              from adafruit_blinka.microcontroller.rockchip.rk3308.pin import Pin
+         elif detector.board.ROCK_PI_4:
+             from adafruit_blinka.microcontroller.generic_linux.spi import SPI as _SPI
+             from adafruit_blinka.microcontroller.rockchip.rk3399.pin import Pin
          elif detector.board.SIFIVE_UNLEASHED:
              from adafruit_blinka.microcontroller.generic_linux.spi import SPI as _SPI
              from adafruit_blinka.microcontroller.hfu540.pin import Pin
          elif detector.board.ftdi_ft232h:
 -            from adafruit_blinka.microcontroller.ft232h.spi import SPI as _SPI
 -            from adafruit_blinka.microcontroller.ft232h.pin import Pin
 +            from adafruit_blinka.microcontroller.ftdi_mpsse.ft232h.spi import SPI as _SPI
 +            from adafruit_blinka.microcontroller.ftdi_mpsse.ft232h.pin import Pin
 +        elif detector.board.ftdi_ft2232h:
 +            from adafruit_blinka.microcontroller.ftdi_mpsse.ft2232h.spi import SPI as _SPI
 +            from adafruit_blinka.microcontroller.ftdi_mpsse.ft2232h.pin import Pin
          elif detector.board.binho_nova:
              from adafruit_blinka.microcontroller.nova.spi import SPI as _SPI
              from adafruit_blinka.microcontroller.nova.pin import Pin
          elif detector.board.greatfet_one:
              from adafruit_blinka.microcontroller.nxp_lpc4330.spi import SPI as _SPI
              from adafruit_blinka.microcontroller.nxp_lpc4330.pin import Pin
-         elif board_id in (ap_board.PINE64, ap_board.PINEBOOK, ap_board.PINEPHONE):
+         elif board_id in (
+             ap_board.PINE64,
+             ap_board.PINEBOOK,
+             ap_board.PINEPHONE,
+             ap_board.SOPINE,
+         ):
              from adafruit_blinka.microcontroller.allwinner.a64.pin import Pin
              from adafruit_blinka.microcontroller.generic_linux.spi import SPI as _SPI
          elif board_id == ap_board.CLOCKWORK_CPI3:
          elif board_id == ap_board.ONION_OMEGA2:
              from adafruit_blinka.microcontroller.mips24kec.pin import Pin
              from adafruit_blinka.microcontroller.generic_linux.spi import SPI as _SPI
+         elif detector.board.any_lubancat and detector.chip.id == ap_chip.IMX6ULL:
+             from adafruit_blinka.microcontroller.nxp_imx6ull.pin import Pin
+             from adafruit_blinka.microcontroller.generic_linux.spi import SPI as _SPI
          else:
              from machine import SPI as _SPI
              from machine import Pin
          except AttributeError:
              raise NotImplementedError(
                  "Frequency attribute not implemented for this platform"
-             )
+             ) from AttributeError
  
      def write(self, buf, start=0, end=None):
          """Write to the SPI device"""
@@@ -414,3 -437,36 +444,36 @@@ class UART(Lockable)
      def write(self, buf):
          """Write to the UART from a buffer"""
          return self._uart.write(buf)
+ class OneWire:
+     """
+     Stub class for OneWire, which is currently not implemented
+     """
+     def __init__(self, pin):
+         raise NotImplementedError("OneWire has not been implemented")
+     def deinit(self):
+         """
+         Deinitialize the OneWire bus and release any hardware resources for reuse.
+         """
+         raise NotImplementedError("OneWire has not been implemented")
+     def reset(self):
+         """
+         Reset the OneWire bus and read presence
+         """
+         raise NotImplementedError("OneWire has not been implemented")
+     def read_bit(self):
+         """
+         Read in a bit
+         """
+         raise NotImplementedError("OneWire has not been implemented")
+     def write_bit(self, value):
+         """
+         Write out a bit based on value.
+         """
+         raise NotImplementedError("OneWire has not been implemented")
diff --combined src/digitalio.py
index 53df36812a15675c9db2e001a53a556655276afe,a59866b9a74eb10270f775983156f22da5ae9a73..8db83991968a91875a915dff3487a886f1cf5639
@@@ -1,6 -1,6 +1,6 @@@
  """
- `digitalio` - Digital input and output control
- =================================================
+ `digitalio` - Digital input and output control (GPIO)
+ =====================================================
  
  See `CircuitPython:digitalio` in CircuitPython for more details.
  
@@@ -15,6 -15,8 +15,8 @@@ if detector.chip.BCM2XXX
      from adafruit_blinka.microcontroller.bcm283x.pin import Pin
  elif detector.chip.AM33XX:
      from adafruit_blinka.microcontroller.am335x.pin import Pin
+ elif detector.chip.DRA74X:
+     from adafruit_blinka.microcontroller.dra74x.pin import Pin
  elif detector.chip.SUN8I:
      from adafruit_blinka.microcontroller.allwinner.h3.pin import Pin
  elif detector.chip.SAMA5:
@@@ -37,6 -39,8 +39,8 @@@ elif detector.chip.APQ8016
      from adafruit_blinka.microcontroller.snapdragon.apq8016.pin import Pin
  elif detector.chip.IMX8MX:
      from adafruit_blinka.microcontroller.nxp_imx8m.pin import Pin
+ elif detector.chip.IMX6ULL:
+     from adafruit_blinka.microcontroller.nxp_imx6ull.pin import Pin
  elif detector.chip.HFU540:
      from adafruit_blinka.microcontroller.hfu540.pin import Pin
  elif detector.chip.A64:
@@@ -47,18 -51,29 +51,31 @@@ elif detector.chip.MIPS24KEC
      from adafruit_blinka.microcontroller.mips24kec.pin import Pin
  elif detector.chip.RK3308:
      from adafruit_blinka.microcontroller.rockchip.rk3308.pin import Pin
+ elif detector.chip.RK3399:
+     from adafruit_blinka.microcontroller.rockchip.rk3399.pin import Pin
  elif detector.board.ftdi_ft232h:
 -    from adafruit_blinka.microcontroller.ft232h.pin import Pin
 +    from adafruit_blinka.microcontroller.ftdi_mpsse.ft232h.pin import Pin
 +elif detector.board.ftdi_ft2232h:
 +    from adafruit_blinka.microcontroller.ftdi_mpsse.ft2232h.pin import Pin
  elif detector.board.binho_nova:
      from adafruit_blinka.microcontroller.nova.pin import Pin
  elif detector.board.greatfet_one:
      from adafruit_blinka.microcontroller.nxp_lpc4330.pin import Pin
- elif detector.chip.STM32:
+ elif detector.chip.STM32F405:
      from machine import Pin
  elif detector.board.microchip_mcp2221:
      from adafruit_blinka.microcontroller.mcp2221.pin import Pin
+ elif detector.chip.PENTIUM_N3710:
+     from adafruit_blinka.microcontroller.pentium.n3710.pin import Pin
+ elif detector.chip.STM32MP157:
+     from adafruit_blinka.microcontroller.stm32.stm32mp157.pin import Pin
+ elif detector.chip.MT8167:
+     from adafruit_blinka.microcontroller.mt8167.pin import Pin
+ elif detector.chip.H5:
+     from adafruit_blinka.microcontroller.allwinner.h5.pin import Pin
+ elif detector.chip.H616:
+     from adafruit_blinka.microcontroller.allwinner.h616.pin import Pin
  from adafruit_blinka import Enum, ContextManaged
  
  
index f40d9f0a37218335cfe85991ed66127889b7ce41,eed47576345a9530148654681a4994a94d602bab..56396a00463b6186260250f552e326c38bed9129
@@@ -1,10 -1,17 +1,17 @@@
  """Microcontroller pins"""
  
+ import time
  from adafruit_platformdetect.constants import chips as ap_chip
  from adafruit_blinka import Enum
  from adafruit_blinka.agnostic import board_id, chip_id
  
  
+ def delay_us(delay):
+     """Sleep for delay usecs."""
+     time.sleep(delay / 1e6)
  class Pin(Enum):
      """Reference Pin object"""
  
@@@ -13,7 -20,7 +20,7 @@@
          self._id = pin_id
  
      def __repr__(self):
-         # pylint: disable=import-outside-toplevel
+         # pylint: disable=import-outside-toplevel, cyclic-import
          import board
  
          for key in dir(board):
@@@ -21,7 -28,7 +28,7 @@@
                  return "board.{}".format(key)
          import microcontroller.pin as pin
  
-         # pylint: enable=import-outside-toplevel
+         # pylint: enable=import-outside-toplevel, cyclic-import
  
          for key in dir(pin):
              if getattr(pin, key) is self:
  
  if chip_id == ap_chip.ESP8266:
      from adafruit_blinka.microcontroller.esp8266 import *
- elif chip_id == ap_chip.STM32:
-     from adafruit_blinka.microcontroller.stm32 import *
+ elif chip_id == ap_chip.STM32F405:
+     from adafruit_blinka.microcontroller.stm32.stm32f405 import *
  elif chip_id == ap_chip.BCM2XXX:
      from adafruit_blinka.microcontroller.bcm283x import *
+ elif chip_id == ap_chip.DRA74X:
+     from adafruit_blinka.microcontroller.dra74x.pin import *
  elif chip_id == ap_chip.AM33XX:
      from adafruit_blinka.microcontroller.am335x import *
  elif chip_id == ap_chip.SUN8I:
      from adafruit_blinka.microcontroller.allwinner.h3 import *
+ elif chip_id == ap_chip.H5:
+     from adafruit_blinka.microcontroller.allwinner.h5.pin import *
+ elif chip_id == ap_chip.H616:
+     from adafruit_blinka.microcontroller.allwinner.h616.pin import *
  elif chip_id == ap_chip.SAMA5:
      from adafruit_blinka.microcontroller.sama5 import *
  elif chip_id == ap_chip.T210:
@@@ -66,8 -79,14 +79,14 @@@ elif chip_id == ap_chip.A33
      from adafruit_blinka.microcontroller.allwinner.a33.pin import *
  elif chip_id == ap_chip.RK3308:
      from adafruit_blinka.microcontroller.rockchip.rk3308.pin import *
+ elif chip_id == ap_chip.RK3399:
+     from adafruit_blinka.microcontroller.rockchip.rk3399.pin import *
+ elif chip_id == ap_chip.H5:
+     from adafruit_blinka.microcontroller.allwinner.h5.pin import *
  elif chip_id == ap_chip.IMX8MX:
      from adafruit_blinka.microcontroller.nxp_imx8m import *
+ elif chip_id == ap_chip.IMX6ULL:
+     from adafruit_blinka.microcontroller.nxp_imx6ull import *
  elif chip_id == ap_chip.HFU540:
      from adafruit_blinka.microcontroller.hfu540.pin import *
  elif chip_id == ap_chip.BINHO:
@@@ -78,9 -97,11 +97,15 @@@ elif chip_id == ap_chip.MIPS24KC
      from adafruit_blinka.microcontroller.atheros.ar9331.pin import *
  elif chip_id == ap_chip.MIPS24KEC:
      from adafruit_blinka.microcontroller.mips24kec.pin import *
 +elif chip_id == ap_chip.FT232H:
 +    from adafruit_blinka.microcontroller.ftdi_mpsse.ft232h.pin import *
 +elif chip_id == ap_chip.FT2232H:
 +    from adafruit_blinka.microcontroller.ftdi_mpsse.ft2232h.pin import *
+ elif chip_id == ap_chip.PENTIUM_N3710:
+     from adafruit_blinka.microcontroller.pentium.n3710.pin import *
+ elif chip_id == ap_chip.STM32MP157:
+     from adafruit_blinka.microcontroller.stm32.stm32mp157.pin import *
+ elif chip_id == ap_chip.MT8167:
+     from adafruit_blinka.microcontroller.mt8167.pin import *
  else:
      raise NotImplementedError("Microcontroller not supported:", chip_id)
index 5b8bc41387d31902b2970e66bf4a308161721b6e,88c2d00b33c786af09b517362ded3ca04c382664..8cdf89b3b3cfe4a7c0f79ba67fc1c88788a27bd9
@@@ -8,14 -8,20 +8,20 @@@ from adafruit_blinka.agnostic import ch
  
  if chip_id == ap_chip.ESP8266:
      from adafruit_blinka.microcontroller.esp8266.pin import *
- elif chip_id == ap_chip.STM32:
-     from adafruit_blinka.microcontroller.stm32.pin import *
+ elif chip_id == ap_chip.STM32F405:
+     from adafruit_blinka.microcontroller.stm32.stm32f405.pin import *
  elif chip_id == ap_chip.BCM2XXX:
      from adafruit_blinka.microcontroller.bcm283x.pin import *
+ elif chip_id == ap_chip.DRA74X:
+     from adafruit_blinka.microcontroller.dra74x.pin import *
  elif chip_id == ap_chip.AM33XX:
      from adafruit_blinka.microcontroller.am335x.pin import *
  elif chip_id == ap_chip.SUN8I:
      from adafruit_blinka.microcontroller.allwinner.h3.pin import *
+ elif chip_id == ap_chip.H5:
+     from adafruit_blinka.microcontroller.allwinner.h5.pin import *
+ elif chip_id == ap_chip.H616:
+     from adafruit_blinka.microcontroller.allwinner.h616.pin import *
  elif chip_id == ap_chip.SAMA5:
      from adafruit_blinka.microcontroller.sama5.pin import *
  elif chip_id == ap_chip.T210:
@@@ -36,12 -42,12 +42,14 @@@ elif chip_id == ap_chip.APQ8016
      from adafruit_blinka.microcontroller.snapdragon.apq8016.pin import *
  elif chip_id == ap_chip.IMX8MX:
      from adafruit_blinka.microcontroller.nxp_imx8m.pin import *
+ elif chip_id == ap_chip.IMX6ULL:
+     from adafruit_blinka.microcontroller.nxp_imx6ull.pin import *
  elif chip_id == ap_chip.HFU540:
      from adafruit_blinka.microcontroller.hfu540.pin import *
  elif chip_id == ap_chip.FT232H:
 -    from adafruit_blinka.microcontroller.ft232h.pin import *
 +    from adafruit_blinka.microcontroller.ftdi_mpsse.ft232h.pin import *
 +elif chip_id == ap_chip.FT2232H:
 +    from adafruit_blinka.microcontroller.ftdi_mpsse.ft2232h.pin import *
  elif chip_id == ap_chip.BINHO:
      from adafruit_blinka.microcontroller.nova.pin import *
  elif chip_id == ap_chip.LPC4330:
@@@ -54,9 -60,17 +62,17 @@@ elif chip_id == ap_chip.A33
      from adafruit_blinka.microcontroller.allwinner.a33.pin import *
  elif chip_id == ap_chip.RK3308:
      from adafruit_blinka.microcontroller.rockchip.rk3308.pin import *
+ elif chip_id == ap_chip.RK3399:
+     from adafruit_blinka.microcontroller.rockchip.rk3399.pin import *
  elif chip_id == ap_chip.MIPS24KC:
      from adafruit_blinka.microcontroller.atheros.ar9331.pin import *
  elif chip_id == ap_chip.MIPS24KEC:
      from adafruit_blinka.microcontroller.mips24kec.pin import *
+ elif chip_id == ap_chip.PENTIUM_N3710:
+     from adafruit_blinka.microcontroller.pentium.n3710.pin import *
+ elif chip_id == ap_chip.STM32MP157:
+     from adafruit_blinka.microcontroller.stm32.stm32mp157.pin import *
+ elif chip_id == ap_chip.MT8167:
+     from adafruit_blinka.microcontroller.mt8167.pin import *
  else:
      raise NotImplementedError("Microcontroller not supported: ", chip_id)