From: caternuson Date: Fri, 21 May 2021 18:00:38 +0000 (-0700) Subject: qt2040 trinkey updates X-Git-Tag: 6.10.0~1^2~4 X-Git-Url: https://git.ayoreis.com/Adafruit_Blinka-hackapet.git/commitdiff_plain/05eccbdb7a4966de1a8d8fec15369c967806275f qt2040 trinkey updates --- diff --git a/src/adafruit_blinka/board/qtpy_u2if.py b/src/adafruit_blinka/board/qtpy_u2if.py new file mode 100644 index 0000000..0f52ff4 --- /dev/null +++ b/src/adafruit_blinka/board/qtpy_u2if.py @@ -0,0 +1,53 @@ +"""Pin definitions for the QT Py RP2040 with u2if firmware.""" + +""" +Adafruit CircuitPython 6.2.0 on 2021-04-05; Adafruit QTPy RP2040 with rp2040 +>>> import board +>>> board. +A0 A1 A2 A3 +BUTTON D0 D1 D10 +D2 D3 D4 D5 +D6 D7 D8 D9 +I2C MISO MOSI NEOPIXEL +NEOPIXEL_POWER RX SCK SCL +SCL1 SDA SDA1 SPI +TX UART +""" + + +from adafruit_blinka.microcontroller.rp2040_u2if import pin + +D0 = pin.GP29 +D1 = pin.GP28 +D2 = pin.GP27 +D3 = pin.GP26 +D4 = pin.GP24 +D5 = pin.GP25 +D6 = pin.GP20 +D7 = pin.GP5 +D8 = pin.GP6 +D9 = pin.GP4 +D10 = pin.GP3 + +#A0 = pin.GP29 # not currently supported in firmware +A1 = pin.GP28 +A2 = pin.GP27 +A3 = pin.GP26 + +SCL = pin.GP25 +SDA = pin.GP24 + +SCL1 = pin.GP23 +SDA1 = pin.GP22 + +SCLK = SCK = pin.GP6 +MOSI = pin.GP3 +MISO = pin.GP4 + +NEOPIXEL = pin.GP12 +NEOPIXEL_POWER = pin.GP11 + +BUTTON = pin.GP21 + +# access u2if via pin instance to open for specifc VID/PID +pin.GP0._u2if_open_hid(0x239A, 0x80F8) diff --git a/src/adafruit_blinka/microcontroller/rp2040_u2if/analogio.py b/src/adafruit_blinka/microcontroller/rp2040_u2if/analogio.py index bd1cfbb..51b365b 100644 --- a/src/adafruit_blinka/microcontroller/rp2040_u2if/analogio.py +++ b/src/adafruit_blinka/microcontroller/rp2040_u2if/analogio.py @@ -47,3 +47,11 @@ class AnalogIn_Feather(AnalogIn): if pin.id not in (26, 27, 28): raise ValueError("Pin does not support ADC.") super().__init__(pin) + +class AnalogIn_QTPY(AnalogIn): + """AnalogIn Base Class for QT Py 2040 u2if""" + + def __init__(self, pin): + if pin.id not in (26, 27, 28): + raise ValueError("Pin does not support ADC.") + super().__init__(pin) diff --git a/src/adafruit_blinka/microcontroller/rp2040_u2if/i2c.py b/src/adafruit_blinka/microcontroller/rp2040_u2if/i2c.py index c7e7e75..ec836ce 100644 --- a/src/adafruit_blinka/microcontroller/rp2040_u2if/i2c.py +++ b/src/adafruit_blinka/microcontroller/rp2040_u2if/i2c.py @@ -82,6 +82,21 @@ class I2C_Feather(I2C): super().__init__(index, frequency=frequency) +class I2C_QTPY(I2C): + """I2C Class for QT2040 Trinkey u2if""" + + def __init__(self, scl, sda, *, frequency=100000): + index = None + if scl.id == 25 and sda.id == 24: + index = 0 + if scl.id == 23 and sda.id == 22: + index = 1 + if index is None: + raise ValueError("I2C not found on specified pins.") + self._index = index + + super().__init__(index, frequency=frequency) + class I2C_QT2040_Trinkey(I2C): """I2C Class for QT2040 Trinkey u2if""" diff --git a/src/adafruit_blinka/microcontroller/rp2040_u2if/pin.py b/src/adafruit_blinka/microcontroller/rp2040_u2if/pin.py index c7ef781..c072e07 100644 --- a/src/adafruit_blinka/microcontroller/rp2040_u2if/pin.py +++ b/src/adafruit_blinka/microcontroller/rp2040_u2if/pin.py @@ -82,6 +82,7 @@ GP19 = Pin(19) GP20 = Pin(20) GP21 = Pin(21) GP22 = Pin(22) +GP23 = Pin(23) GP24 = Pin(24) GP25 = Pin(25) GP26 = Pin(26) diff --git a/src/adafruit_blinka/microcontroller/rp2040_u2if/rp2040_u2if.py b/src/adafruit_blinka/microcontroller/rp2040_u2if/rp2040_u2if.py index 995d14c..f75510f 100644 --- a/src/adafruit_blinka/microcontroller/rp2040_u2if/rp2040_u2if.py +++ b/src/adafruit_blinka/microcontroller/rp2040_u2if/rp2040_u2if.py @@ -380,7 +380,6 @@ class RP2040_u2if: # ---------------------------------------------------------------- def neopixel_write(self, gpio, buf): """NeoPixel write.""" - print("open serial") # open serial (data is sent over this) if self._serial is None: import serial @@ -394,7 +393,6 @@ class RP2040_u2if: if self._serial is None: raise RuntimeError("Could not find Pico com port.") - print("init") # init if not self._neopixel_initialized: # deinit any current setup @@ -415,7 +413,6 @@ class RP2040_u2if: self._serial.reset_output_buffer() - print("write") # write # command is done over HID remain_bytes = len(buf) @@ -430,28 +427,22 @@ class RP2040_u2if: "Neopixel write error : too many pixel for the firmware." ) elif resp[2] == 0x02: - print(resp[0:10]) raise RuntimeError( "Neopixel write error : transfer already in progress." ) else: raise RuntimeError("Neopixel write error.") - print("write 1") # buffer is sent over serial self._serial.write(buf) # hack (see u2if) - print("write 2") if len(buf) % 64 == 0: self._serial.write([0]) self._serial.flush() # polling loop to wait for write complete? - print("write 3") time.sleep(0.1) resp = self._hid.read(64) - print("write 4") while resp[0] != self.WS2812B_WRITE: resp = self._hid.read(64) - print("write 5") if resp[1] != self.RESP_OK: raise RuntimeError("Neopixel write (flush) error.") diff --git a/src/adafruit_blinka/microcontroller/rp2040_u2if/spi.py b/src/adafruit_blinka/microcontroller/rp2040_u2if/spi.py index 4d0bf86..ef1161d 100644 --- a/src/adafruit_blinka/microcontroller/rp2040_u2if/spi.py +++ b/src/adafruit_blinka/microcontroller/rp2040_u2if/spi.py @@ -83,4 +83,14 @@ class SPI_Feather(SPI): index = 0 if index is None: raise ValueError("No SPI port on specified pin.") + super().__init__(index, baudrate=baudrate) + +class SPI_QTPY(SPI): + + def __init__(self, clock, *, baudrate=100000): + index = None + if clock.id == 6: + index = 0 + if index is None: + raise ValueError("No SPI port on specified pin.") super().__init__(index, baudrate=baudrate) \ No newline at end of file diff --git a/src/analogio.py b/src/analogio.py index c506448..e6837b3 100644 --- a/src/analogio.py +++ b/src/analogio.py @@ -33,5 +33,7 @@ elif detector.board.pico_u2if: from adafruit_blinka.microcontroller.rp2040_u2if.analogio import AnalogIn_Pico as AnalogIn elif detector.board.feather_u2if: from adafruit_blinka.microcontroller.rp2040_u2if.analogio import AnalogIn_Feather as AnalogIn +elif detector.board.qtpy_u2if: + from adafruit_blinka.microcontroller.rp2040_u2if.analogio import AnalogIn_QTPY as AnalogIn else: raise NotImplementedError("analogio not supported for this board.") diff --git a/src/board.py b/src/board.py index 2ab1038..9bcc022 100755 --- a/src/board.py +++ b/src/board.py @@ -230,6 +230,9 @@ elif board_id == ap_board.PICO_U2IF: elif board_id == ap_board.FEATHER_U2IF: from adafruit_blinka.board.feather_u2if import * +elif board_id == ap_board.QTPY_U2IF: + from adafruit_blinka.board.qtpy_u2if import * + elif board_id == ap_board.QT2040_TRINKEY_U2IF: from adafruit_blinka.board.qt2040_trinkey_u2if import * diff --git a/src/busio.py b/src/busio.py index 7d32a8b..8dcf6ab 100755 --- a/src/busio.py +++ b/src/busio.py @@ -61,6 +61,11 @@ class I2C(Lockable): if detector.board.feather_u2if: from adafruit_blinka.microcontroller.rp2040_u2if.i2c import I2C_Feather as _I2C + self._i2c = _I2C(scl, sda, frequency=frequency) + return + if detector.board.qtpy_u2if: + from adafruit_blinka.microcontroller.rp2040_u2if.i2c import I2C_QTPY as _I2C + self._i2c = _I2C(scl, sda, frequency=frequency) return if detector.board.qt2040_trinkey_u2if: @@ -210,6 +215,12 @@ class SPI(Lockable): if detector.board.feather_u2if: from adafruit_blinka.microcontroller.rp2040_u2if.spi import SPI_Feather 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.board.qtpy_u2if: + from adafruit_blinka.microcontroller.rp2040_u2if.spi import SPI_QTPY 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 diff --git a/src/digitalio.py b/src/digitalio.py index 4f78cc0..d67e6f6 100755 --- a/src/digitalio.py +++ b/src/digitalio.py @@ -85,6 +85,8 @@ elif detector.board.pico_u2if: from adafruit_blinka.microcontroller.rp2040_u2if.pin import Pin elif detector.board.feather_u2if: from adafruit_blinka.microcontroller.rp2040_u2if.pin import Pin +elif detector.board.qtpy_u2if: + from adafruit_blinka.microcontroller.rp2040_u2if.pin import Pin elif detector.board.qt2040_trinkey_u2if: from adafruit_blinka.microcontroller.rp2040_u2if.pin import Pin diff --git a/src/neopixel_write.py b/src/neopixel_write.py index 5852b25..d024bec 100644 --- a/src/neopixel_write.py +++ b/src/neopixel_write.py @@ -14,7 +14,8 @@ from adafruit_blinka.agnostic import detector if detector.board.any_raspberry_pi: from adafruit_blinka.microcontroller.bcm283x import neopixel as _neopixel -elif detector.board.pico_u2if or detector.board.feather_u2if: +elif detector.board.pico_u2if or detector.board.feather_u2if or \ + detector.board.qtpy_u2if or detector.board.qt2040_trinkey_u2if: from adafruit_blinka.microcontroller.rp2040_u2if import neopixel as _neopixel elif "sphinx" in sys.modules: pass