From: Franklin Harding Date: Tue, 11 May 2021 07:01:42 +0000 (-0700) Subject: Merge branch 'master' of https://github.com/adafruit/Adafruit_Blinka X-Git-Tag: 6.9.2~2^2~3 X-Git-Url: https://git.ayoreis.com/Adafruit_Blinka-hackapet.git/commitdiff_plain/6db6ef855f798996075d2919ca924ec31983f7f1?ds=inline;hp=-c Merge branch 'master' of https://github.com/adafruit/Adafruit_Blinka --- 6db6ef855f798996075d2919ca924ec31983f7f1 diff --combined requirements.txt index 59a7ee9,59a7ee9..013f2dc --- a/requirements.txt +++ b/requirements.txt @@@ -1,4 -1,4 +1,4 @@@ --Adafruit-PlatformDetect>=3.1.0 ++Adafruit-PlatformDetect>=3.13.0 Adafruit-PureIO>=1.1.7 Jetson.GPIO; platform_machine=='aarch64' RPi.GPIO; platform_machine=='armv7l' or platform_machine=='armv6l' diff --combined setup.py index 7e92596,7e92596..5d6ea95 --- a/setup.py +++ b/setup.py @@@ -62,7 -62,7 +62,7 @@@ setup "adafruit_blinka.microcontroller.bcm283x.pulseio": ["libgpiod_pulsein"] }, install_requires=[ -- "Adafruit-PlatformDetect>=3.1.0", ++ "Adafruit-PlatformDetect>=3.13.0", "Adafruit-PureIO>=1.1.7", "pyftdi>=0.40.0", ] diff --combined src/adafruit_blinka/microcontroller/ftdi_mpsse/ft2232h/pin.py index 814a3a9,0000000..4fa8440 mode 100644,000000..100644 --- a/src/adafruit_blinka/microcontroller/ftdi_mpsse/ft2232h/pin.py +++ b/src/adafruit_blinka/microcontroller/ftdi_mpsse/ft2232h/pin.py @@@ -1,55 -1,0 +1,55 @@@ +"""FT2232H pin names""" + +from adafruit_blinka.microcontroller.ftdi_mpsse.mpsse.pin import Pin + +# See https://eblot.github.io/pyftdi/pinout.html for detailed FTDI device pinout information + +# MPSSE Port A - AD4 = Pin(4, url="ftdi://ftdi:ft2232h/1") - AD5 = Pin(5, url="ftdi://ftdi:ft2232h/1") - AD6 = Pin(6, url="ftdi://ftdi:ft2232h/1") - AD7 = Pin(7, url="ftdi://ftdi:ft2232h/1") - AC0 = Pin(8, url="ftdi://ftdi:ft2232h/1") - AC1 = Pin(9, url="ftdi://ftdi:ft2232h/1") - AC2 = Pin(10, url="ftdi://ftdi:ft2232h/1") - AC3 = Pin(11, url="ftdi://ftdi:ft2232h/1") - AC4 = Pin(12, url="ftdi://ftdi:ft2232h/1") - AC5 = Pin(13, url="ftdi://ftdi:ft2232h/1") - AC6 = Pin(14, url="ftdi://ftdi:ft2232h/1") - AC7 = Pin(15, url="ftdi://ftdi:ft2232h/1") - - SCL0 = Pin(url="ftdi://ftdi:ft2232h/1") - SDA0 = Pin(url="ftdi://ftdi:ft2232h/1") - SCK0 = SCLK0 = Pin(url="ftdi://ftdi:ft2232h/1") - MOSI0 = Pin(url="ftdi://ftdi:ft2232h/1") - MISO0 = Pin(url="ftdi://ftdi:ft2232h/1") ++AD4 = Pin(4, interface_id=0) ++AD5 = Pin(5, interface_id=0) ++AD6 = Pin(6, interface_id=0) ++AD7 = Pin(7, interface_id=0) ++AC0 = Pin(8, interface_id=0) ++AC1 = Pin(9, interface_id=0) ++AC2 = Pin(10, interface_id=0) ++AC3 = Pin(11, interface_id=0) ++AC4 = Pin(12, interface_id=0) ++AC5 = Pin(13, interface_id=0) ++AC6 = Pin(14, interface_id=0) ++AC7 = Pin(15, interface_id=0) ++ ++SCL0 = Pin(interface_id=0) ++SDA0 = Pin(interface_id=0) ++SCK0 = SCLK0 = Pin(interface_id=0) ++MOSI0 = Pin(interface_id=0) ++MISO0 = Pin(interface_id=0) + +# MPSSE Port B - BD4 = Pin(4, url="ftdi://ftdi:ft2232h/2") - BD5 = Pin(5, url="ftdi://ftdi:ft2232h/2") - BD6 = Pin(6, url="ftdi://ftdi:ft2232h/2") - BD7 = Pin(7, url="ftdi://ftdi:ft2232h/2") - BC0 = Pin(8, url="ftdi://ftdi:ft2232h/2") - BC1 = Pin(9, url="ftdi://ftdi:ft2232h/2") - BC2 = Pin(10, url="ftdi://ftdi:ft2232h/2") - BC3 = Pin(11, url="ftdi://ftdi:ft2232h/2") - BC4 = Pin(12, url="ftdi://ftdi:ft2232h/2") - BC5 = Pin(13, url="ftdi://ftdi:ft2232h/2") - BC6 = Pin(14, url="ftdi://ftdi:ft2232h/2") - BC7 = Pin(15, url="ftdi://ftdi:ft2232h/2") - - SCL1 = Pin(url="ftdi://ftdi:ft2232h/2") - SDA1 = Pin(url="ftdi://ftdi:ft2232h/2") - SCK1 = SCLK1 = Pin(url="ftdi://ftdi:ft2232h/2") - MOSI1 = Pin(url="ftdi://ftdi:ft2232h/2") - MISO1 = Pin(url="ftdi://ftdi:ft2232h/2") ++BD4 = Pin(4, interface_id=1) ++BD5 = Pin(5, interface_id=1) ++BD6 = Pin(6, interface_id=1) ++BD7 = Pin(7, interface_id=1) ++BC0 = Pin(8, interface_id=1) ++BC1 = Pin(9, interface_id=1) ++BC2 = Pin(10, interface_id=1) ++BC3 = Pin(11, interface_id=1) ++BC4 = Pin(12, interface_id=1) ++BC5 = Pin(13, interface_id=1) ++BC6 = Pin(14, interface_id=1) ++BC7 = Pin(15, interface_id=1) ++ ++SCL1 = Pin(interface_id=1) ++SDA1 = Pin(interface_id=1) ++SCK1 = SCLK1 = Pin(interface_id=1) ++MOSI1 = Pin(interface_id=1) ++MISO1 = Pin(interface_id=1) + +i2cPorts = ( + (0, SCL0, SDA0), + (1, SCL1, SDA1), +) + +spiPorts = ( + (0, SCLK0, MOSI0, MISO0), + (1, SCLK1, MOSI1, MISO1), +) diff --combined src/adafruit_blinka/microcontroller/ftdi_mpsse/mpsse/i2c.py index 291a77c,28d2644..f9539fb --- a/src/adafruit_blinka/microcontroller/ftdi_mpsse/mpsse/i2c.py +++ b/src/adafruit_blinka/microcontroller/ftdi_mpsse/mpsse/i2c.py @@@ -1,20 -1,12 +1,24 @@@ -"""I2C Class for FT232H""" -from adafruit_blinka.microcontroller.ft232h.pin import Pin -from adafruit_blinka.microcontroller.ft232h.url import get_ftdi_url +"""I2C Class for FTDI MPSSE""" +from adafruit_blinka.microcontroller.ftdi_mpsse.mpsse.pin import Pin ++from adafruit_blinka.microcontroller.ftdi_mpsse.mpsse.url import ( ++ get_ft232h_url, ++ get_ft2232h_url, ++) class I2C: - """Custom I2C Class for FT232H""" + """Custom I2C Class for FTDI MPSSE""" + + MASTER = 0 + SLAVE = 1 + _mode = None + + # pylint: disable=unused-argument + def __init__(self, i2c_id=None, mode=MASTER, baudrate=None, frequency=400000): + if mode != self.MASTER: + raise NotImplementedError("Only I2C Master supported!") + _mode = self.MASTER - def __init__(self, *, frequency=400000): # change GPIO controller to I2C # pylint: disable=import-outside-toplevel from pyftdi.i2c import I2cController @@@ -22,13 -14,8 +26,11 @@@ # pylint: enable=import-outside-toplevel self._i2c = I2cController() - self._i2c.configure(get_ftdi_url(), frequency=frequency) - Pin.ft232h_gpio = self._i2c.get_gpio() + if i2c_id is None: - self._i2c.configure("ftdi://ftdi:ft232h/1", frequency=frequency) ++ self._i2c.configure(get_ft232h_url(), frequency=frequency) + else: - self._i2c.configure( - "ftdi://ftdi:ft2232h/{}".format(i2c_id + 1), frequency=frequency - ) ++ self._i2c.configure(get_ft2232h_url(i2c_id), frequency=frequency) + Pin.mpsse_gpio = self._i2c.get_gpio() def scan(self): """Perform an I2C Device Scan""" @@@ -59,7 -46,7 +61,7 @@@ out_end=None, in_start=0, in_end=None, - stop=False + stop=False, ): """Write data from buffer_out to an address and then read data from an address and into buffer_in diff --combined src/adafruit_blinka/microcontroller/ftdi_mpsse/mpsse/pin.py index b5a7475,a138ee7..5dc171e --- a/src/adafruit_blinka/microcontroller/ftdi_mpsse/mpsse/pin.py +++ b/src/adafruit_blinka/microcontroller/ftdi_mpsse/mpsse/pin.py @@@ -1,8 -1,10 +1,10 @@@ -"""FT232H pin names""" +"""MPSSE pin names""" -from adafruit_blinka.microcontroller.ft232h.url import get_ftdi_url ++from adafruit_blinka.microcontroller.ftdi_mpsse.mpsse.url import get_ft232h_url, get_ft2232h_url + class Pin: - """A basic Pin class for use with FT232H.""" + """A basic Pin class for use with FTDI MPSSEs.""" IN = 0 OUT = 1 @@@ -12,23 -14,23 +14,26 @@@ PULL_UP = 1 PULL_DOWN = 2 - ft232h_gpio = None + mpsse_gpio = None - def __init__(self, pin_id=None, url="ftdi://ftdi:ft232h/1"): - def __init__(self, pin_id=None): ++ def __init__(self, pin_id=None, interface_id=None): # 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(url) - i2c.configure(get_ftdi_url()) - Pin.ft232h_gpio = i2c.get_gpio() ++ if interface_id is None: ++ i2c.configure(get_ft232h_url()) ++ else: ++ i2c.configure(get_ft2232h_url(interface_id)) + 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 @@@ -37,22 -39,22 +42,22 @@@ """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 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 @@@ -63,7 -65,31 +68,7 @@@ 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() diff --combined src/adafruit_blinka/microcontroller/ftdi_mpsse/mpsse/spi.py index 78dee58,fd16b39..0b76c08 --- a/src/adafruit_blinka/microcontroller/ftdi_mpsse/mpsse/spi.py +++ b/src/adafruit_blinka/microcontroller/ftdi_mpsse/mpsse/spi.py @@@ -1,29 -1,27 +1,33 @@@ -"""SPI Class for FT232H""" -from adafruit_blinka.microcontroller.ft232h.pin import Pin -from adafruit_blinka.microcontroller.ft232h.url import get_ftdi_url +"""SPI Class for FTDI MPSSE""" +from adafruit_blinka.microcontroller.ftdi_mpsse.mpsse.pin import Pin ++from adafruit_blinka.microcontroller.ftdi_mpsse.mpsse.url import ( ++ get_ft232h_url, ++ get_ft2232h_url, ++) # 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, spi_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(get_ftdi_url()) + if spi_id is None: - self._spi.configure("ftdi://ftdi:ft232h/1") ++ self._spi.configure(get_ft232h_url()) + else: - self._spi.configure("ftdi://ftdi:ft2232h/{}".format(spi_id + 1)) ++ self._spi.configure(get_ft2232h_url(spi_id + 1)) 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( diff --combined src/adafruit_blinka/microcontroller/ftdi_mpsse/mpsse/url.py index 0000000,0000000..c2f2eaf new file mode 100644 --- /dev/null +++ b/src/adafruit_blinka/microcontroller/ftdi_mpsse/mpsse/url.py @@@ -1,0 -1,0 +1,31 @@@ ++"""Support for getting the URL from the BLINKA_FT232H variable.""" ++ ++import os ++ ++ ++def get_ft232h_url(): ++ """ ++ Return the FTDI url to use. If BLINKA_FT232H starts with ftdi:, returns ++ that. Otherwise, returns a default value. ++ """ ++ ++ url = os.environ.get("BLINKA_FT232H", "1") ++ ++ if url.startswith("ftdi:"): ++ return url ++ ++ return "ftdi://ftdi:ft232h/1" ++ ++ ++def get_ft2232h_url(interface_id): ++ """ ++ Return the FTDI url to use. If BLINKA_FT2232H_{} starts with ftdi:, returns ++ that. Otherwise, returns a default value. ++ """ ++ ++ url = os.environ.get("BLINKA_FT2232H_{}".format(interface_id), "1") ++ ++ if url.startswith("ftdi:"): ++ return url ++ ++ return "ftdi://ftdi:ft2232h/{}".format(interface_id + 1) diff --combined src/board.py index a89d70d,c2469cc..4390b28 --- a/src/board.py +++ b/src/board.py @@@ -44,6 -44,9 +44,9 @@@ elif board_id == ap_board.NODEMCU elif board_id == ap_board.PYBOARD: from adafruit_blinka.board.pyboard import * + elif board_id == ap_board.RASPBERRY_PI_PICO: + from adafruit_blinka.board.raspberrypi.pico import * + elif detector.board.any_raspberry_pi_40_pin: from adafruit_blinka.board.raspberrypi.raspi_40pin import * @@@ -56,6 -59,9 +59,9 @@@ elif detector.board.RASPBERRY_PI_B_REV1 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: + from adafruit_blinka.board.beagleboard.beaglebone_black import * + elif board_id == ap_board.BEAGLEBONE_BLACK: from adafruit_blinka.board.beagleboard.beaglebone_black import * @@@ -161,9 -167,6 +167,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 * @@@ -197,6 -200,9 +203,9 @@@ elif board_id == ap_board.ROCK_PI_S elif board_id == ap_board.ROCK_PI_4: from adafruit_blinka.board.radxa.rockpi4 import * + elif board_id == ap_board.ROCK_PI_E: + from adafruit_blinka.board.radxa.rockpie import * + elif board_id == ap_board.UDOO_X86: from adafruit_blinka.board.udoo_x86ultra import * @@@ -206,28 -212,37 +215,37 @@@ elif board_id == ap_board.STM32MP157C_D elif board_id == ap_board.LUBANCAT_IMX6ULL: from adafruit_blinka.board.lubancat.lubancat_imx6ull import * + elif board_id == ap_board.LUBANCAT_STM32MP157: + from adafruit_blinka.board.lubancat.lubancat_stm32mp157 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 board_id == ap_board.PICO_U2IF: + from adafruit_blinka.board.pico_u2if import * + elif "sphinx" in sys.modules: pass else: raise NotImplementedError("Board not supported {}".format(board_id)) + if "SCL" in locals() and "SDA" in locals(): + + def I2C(): + """The singleton I2C interface""" + import busio - def I2C(): - """The singleton I2C interface""" - import busio + return busio.I2C(SCL, SDA) - return busio.I2C(SCL, SDA) + if "SCLK" in locals() and "MOSI" in locals() and "MISO" in locals(): - def SPI(): - """The singleton SPI interface""" - import busio + def SPI(): + """The singleton SPI interface""" + import busio - return busio.SPI(SCLK, MOSI, MISO) + return busio.SPI(SCLK, MOSI, MISO) diff --combined src/busio.py index 1991900,c599afa..11c6341 --- a/src/busio.py +++ b/src/busio.py @@@ -18,7 -18,7 +18,7 @@@ from adafruit_blinka import Enum, Locka from adafruit_blinka.agnostic import board_id, detector # pylint: disable=import-outside-toplevel,too-many-branches,too-many-statements - # pylint: disable=too-many-arguments,too-many-function-args + # pylint: disable=too-many-arguments,too-many-function-args,consider-using-with class I2C(Lockable): @@@ -34,7 -34,7 +34,7 @@@ """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 @@@ -53,19 -53,31 +53,33 @@@ self._i2c = _I2C(frequency=frequency) return + if detector.board.pico_u2if: + from adafruit_blinka.microcontroller.pico_u2if.i2c import I2C as _I2C + + self._i2c = _I2C(scl, sda, frequency=frequency) + return + if detector.chip.id == ap_chip.RP2040: + from adafruit_blinka.microcontroller.rp2040.i2c import I2C as _I2C + + self._i2c = _I2C(scl, sda, frequency=frequency) + 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 adafruit_blinka.microcontroller.generic_micropython.i2c import ( + I2C as _I2C, + ) from microcontroller.pin import i2cPorts for portId, portScl, portSda in i2cPorts: try: + # pylint: disable=unexpected-keyword-arg if scl == portScl and sda == portSda: self._i2c = _I2C(portId, mode=_I2C.MASTER, baudrate=frequency) break + # pylint: enable=unexpected-keyword-arg except RuntimeError: pass else: @@@ -127,7 -139,7 +141,7 @@@ out_end=None, in_start=0, in_end=None, - stop=False + stop=False, ): """ "Write to a device at specified address from a buffer then read from a device at specified address into a buffer @@@ -153,12 -165,8 +167,12 @@@ 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) @@@ -177,12 -185,24 +191,26 @@@ self._spi = _SPI() self._pins = (SCK, MOSI, MISO) return + if detector.board.pico_u2if: + from adafruit_blinka.microcontroller.pico_u2if.spi import SPI as _SPI + + self._spi = _SPI(clock) # this is really all that's needed + self._pins = (clock, clock, clock) # will determine MOSI/MISO from clock + return + if detector.chip.id == ap_chip.RP2040: + from adafruit_blinka.microcontroller.rp2040.spi import SPI as _SPI + + self._spi = _SPI(clock, MOSI, MISO) # Pins configured on instantiation + self._pins = (clock, clock, clock) # These don't matter, they're discarded + 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 adafruit_blinka.microcontroller.generic_micropython.spi import ( + SPI as _SPI, + ) from microcontroller.pin import spiPorts for portId, portSck, portMosi, portMiso in spiPorts: @@@ -204,106 -224,76 +232,82 @@@ def configure(self, baudrate=100000, polarity=0, phase=0, bits=8): """Update the configuration""" 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: - 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: - from adafruit_blinka.microcontroller.sama5.pin import Pin from adafruit_blinka.microcontroller.generic_linux.spi import SPI as _SPI 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 board_id == ap_board.ODROID_C4: - from adafruit_blinka.microcontroller.amlogic.s905x3.pin import Pin from adafruit_blinka.microcontroller.generic_linux.spi import SPI as _SPI elif board_id == ap_board.ODROID_XU4: - from adafruit_blinka.microcontroller.samsung.exynos5422.pin import Pin from adafruit_blinka.microcontroller.generic_linux.spi import SPI as _SPI elif board_id == ap_board.DRAGONBOARD_410C: - from adafruit_blinka.microcontroller.snapdragon.apq8016.pin import Pin from adafruit_blinka.microcontroller.generic_linux.spi import SPI as _SPI elif board_id == ap_board.JETSON_NANO: from adafruit_blinka.microcontroller.generic_linux.spi import SPI as _SPI - from adafruit_blinka.microcontroller.tegra.t210.pin import Pin elif board_id == ap_board.JETSON_TX1: from adafruit_blinka.microcontroller.generic_linux.spi import SPI as _SPI - from adafruit_blinka.microcontroller.tegra.t210.pin import Pin elif board_id == ap_board.JETSON_TX2: from adafruit_blinka.microcontroller.generic_linux.spi import SPI as _SPI - from adafruit_blinka.microcontroller.tegra.t186.pin import Pin elif board_id == ap_board.JETSON_XAVIER: from adafruit_blinka.microcontroller.generic_linux.spi import SPI as _SPI - from adafruit_blinka.microcontroller.tegra.t194.pin import Pin elif board_id == ap_board.JETSON_NX: from adafruit_blinka.microcontroller.generic_linux.spi import SPI as _SPI - from adafruit_blinka.microcontroller.tegra.t194.pin import Pin 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.ROCK_PI_E: + from adafruit_blinka.microcontroller.generic_linux.spi import SPI as _SPI 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.ftdi_mpsse.mpsse.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.mpsse.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, 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.PINEH64: from adafruit_blinka.microcontroller.generic_linux.spi import SPI as _SPI elif board_id == ap_board.CLOCKWORK_CPI3: - from adafruit_blinka.microcontroller.allwinner.a33.pin import Pin from adafruit_blinka.microcontroller.generic_linux.spi import SPI as _SPI 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 + elif detector.board.pico_u2if: + from adafruit_blinka.microcontroller.pico_u2if.spi import SPI as _SPI + elif detector.chip.id == ap_chip.RP2040: + from adafruit_blinka.microcontroller.rp2040.spi import SPI as _SPI else: - from machine import SPI as _SPI - from machine import Pin + from adafruit_blinka.microcontroller.generic_micropython.spi import ( + SPI as _SPI, + ) if self._locked: # TODO check if #init ignores MOSI=None rather than unsetting, to save _pinIds attribute @@@ -313,9 -303,6 +317,6 @@@ phase=phase, bits=bits, firstbit=_SPI.MSB, - sck=Pin(self._pins[0].id), - mosi=Pin(self._pins[1].id), - miso=Pin(self._pins[2].id), ) else: raise RuntimeError("First call try_lock()") @@@ -386,13 -373,12 +387,12 @@@ class UART(Lockable) from adafruit_blinka.microcontroller.nova.uart import UART as _UART elif detector.board.greatfet_one: from adafruit_blinka.microcontroller.nxp_lpc4330.uart import UART as _UART + elif detector.chip.id == ap_chip.RP2040: + from adafruit_blinka.microcontroller.rp2040.uart import UART as _UART else: from machine import UART as _UART - if detector.board.binho_nova: - from adafruit_blinka.microcontroller.nova.pin import uartPorts - else: - from microcontroller.pin import uartPorts + from microcontroller.pin import uartPorts self.baudrate = baudrate @@@ -411,25 -397,35 +411,35 @@@ else: raise ValueError("Invalid parity") - # check tx and rx have hardware support - for portId, portTx, portRx in uartPorts: # - if portTx == tx and portRx == rx: - self._uart = _UART( - portId, - baudrate, - bits=bits, - parity=parity, - stop=stop, - timeout=timeout, - read_buf_len=receiver_buffer_size, - ) - break + if detector.chip.id == ap_chip.RP2040: + self._uart = _UART( + tx, + rx, + baudrate=baudrate, + bits=bits, + parity=parity, + stop=stop, + ) else: - raise ValueError( - "No Hardware UART on (tx,rx)={}\nValid UART ports: {}".format( - (tx, rx), uartPorts + # check tx and rx have hardware support + for portId, portTx, portRx in uartPorts: # + if portTx == tx and portRx == rx: + self._uart = _UART( + portId, + baudrate, + bits=bits, + parity=parity, + stop=stop, + timeout=timeout, + read_buf_len=receiver_buffer_size, + ) + break + else: + raise ValueError( + "No Hardware UART on (tx,rx)={}\nValid UART ports: {}".format( + (tx, rx), uartPorts + ) ) - ) def deinit(self): """Deinitialization""" diff --combined src/digitalio.py index 8db8399,c08c6b4..eef0015 --- a/src/digitalio.py +++ b/src/digitalio.py @@@ -53,16 -53,18 +53,20 @@@ 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.chip.RK3328: + from adafruit_blinka.microcontroller.rockchip.rk3328.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.STM32F405: from machine import Pin + elif detector.chip.RP2040: + from machine import Pin elif detector.board.microchip_mcp2221: from adafruit_blinka.microcontroller.mcp2221.pin import Pin elif detector.chip.PENTIUM_N3710: @@@ -73,8 -75,12 +77,12 @@@ 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.H6: + from adafruit_blinka.microcontroller.allwinner.h6.pin import Pin elif detector.chip.H616: from adafruit_blinka.microcontroller.allwinner.h616.pin import Pin + elif detector.board.pico_u2if: + from adafruit_blinka.microcontroller.pico_u2if.pin import Pin from adafruit_blinka import Enum, ContextManaged diff --combined src/microcontroller/__init__.py index 56396a0,254d50a..255e2b7 --- a/src/microcontroller/__init__.py +++ b/src/microcontroller/__init__.py @@@ -17,7 -17,7 +17,7 @@@ class Pin(Enum) def __init__(self, pin_id): """Identifier for pin, referencing platform-specific pin id""" - self._id = pin_id + self.id = pin_id def __repr__(self): # pylint: disable=import-outside-toplevel, cyclic-import @@@ -43,6 -43,8 +43,8 @@@ if chip_id == ap_chip.ESP8266 from adafruit_blinka.microcontroller.esp8266 import * elif chip_id == ap_chip.STM32F405: from adafruit_blinka.microcontroller.stm32.stm32f405 import * + elif chip_id == ap_chip.RP2040: + from adafruit_blinka.microcontroller.rp2040 import * elif chip_id == ap_chip.BCM2XXX: from adafruit_blinka.microcontroller.bcm283x import * elif chip_id == ap_chip.DRA74X: @@@ -53,6 -55,8 +55,8 @@@ 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.H6: + from adafruit_blinka.microcontroller.allwinner.h6.pin import * elif chip_id == ap_chip.H616: from adafruit_blinka.microcontroller.allwinner.h616.pin import * elif chip_id == ap_chip.SAMA5: @@@ -81,6 -85,8 +85,8 @@@ 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.RK3328: + from adafruit_blinka.microcontroller.rockchip.rk3328.pin import * elif chip_id == ap_chip.H5: from adafruit_blinka.microcontroller.allwinner.h5.pin import * elif chip_id == ap_chip.IMX8MX: @@@ -97,10 -103,6 +103,10 @@@ 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: diff --combined src/microcontroller/pin.py index 8cdf89b,3483624..34f7b4a --- a/src/microcontroller/pin.py +++ b/src/microcontroller/pin.py @@@ -10,6 -10,8 +10,8 @@@ if chip_id == ap_chip.ESP8266 from adafruit_blinka.microcontroller.esp8266.pin import * elif chip_id == ap_chip.STM32F405: from adafruit_blinka.microcontroller.stm32.stm32f405.pin import * + elif chip_id == ap_chip.RP2040: + from adafruit_blinka.microcontroller.rp2040.pin import * elif chip_id == ap_chip.BCM2XXX: from adafruit_blinka.microcontroller.bcm283x.pin import * elif chip_id == ap_chip.DRA74X: @@@ -20,6 -22,8 +22,8 @@@ 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.H6: + from adafruit_blinka.microcontroller.allwinner.h6.pin import * elif chip_id == ap_chip.H616: from adafruit_blinka.microcontroller.allwinner.h616.pin import * elif chip_id == ap_chip.SAMA5: @@@ -47,9 -51,7 +51,9 @@@ elif chip_id == ap_chip.IMX6ULL 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: @@@ -64,6 -66,8 +68,8 @@@ 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.RK3328: + from adafruit_blinka.microcontroller.rockchip.rk3328.pin import * elif chip_id == ap_chip.MIPS24KC: from adafruit_blinka.microcontroller.atheros.ar9331.pin import * elif chip_id == ap_chip.MIPS24KEC: @@@ -74,5 -78,7 +80,7 @@@ 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 * + elif chip_id == ap_chip.PICO_U2IF: + from adafruit_blinka.microcontroller.pico_u2if.pin import * else: raise NotImplementedError("Microcontroller not supported: ", chip_id)