]> Repositories - Adafruit_Blinka-hackapet.git/commitdiff
qt2040 trinkey updates
authorcaternuson <caternuson@gmail.com>
Fri, 21 May 2021 18:00:38 +0000 (11:00 -0700)
committercaternuson <caternuson@gmail.com>
Fri, 21 May 2021 18:00:38 +0000 (11:00 -0700)
src/adafruit_blinka/board/qtpy_u2if.py [new file with mode: 0644]
src/adafruit_blinka/microcontroller/rp2040_u2if/analogio.py
src/adafruit_blinka/microcontroller/rp2040_u2if/i2c.py
src/adafruit_blinka/microcontroller/rp2040_u2if/pin.py
src/adafruit_blinka/microcontroller/rp2040_u2if/rp2040_u2if.py
src/adafruit_blinka/microcontroller/rp2040_u2if/spi.py
src/analogio.py
src/board.py
src/busio.py
src/digitalio.py
src/neopixel_write.py

diff --git a/src/adafruit_blinka/board/qtpy_u2if.py b/src/adafruit_blinka/board/qtpy_u2if.py
new file mode 100644 (file)
index 0000000..0f52ff4
--- /dev/null
@@ -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)
index bd1cfbb0de1450388b383e36bf2ba36615cb5db5..51b365b2611f4953c57f5b1436265ca9ac044000 100644 (file)
@@ -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)
index c7e7e7546f5b104ee56b0c5d2ed57c982bee2b0f..ec836cebcad857a69008d4db3883619007c0252e 100644 (file)
@@ -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"""
 
index c7ef7819076aefe5a7afe09fa48b02dd6633130e..c072e073ac2df3223ebaa011222de6b3b05cc9dd 100644 (file)
@@ -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)
index 995d14c89bafc644bec00fc949c0106ebd99822d..f75510f56ce2be6caeddca1a3ed8e88387a4797c 100644 (file)
@@ -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.")
 
index 4d0bf86d46076a72244771e8e969b62a87085c2f..ef1161d97670996f5fc43fdbbdf74e33ff275a2e 100644 (file)
@@ -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
index c506448124fbf4eae60c8c33bea1ccff8a535238..e6837b348455b56b79b997dfdfbc0c449534c878 100644 (file)
@@ -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.")
index 2ab103844dd6fabe370c19348cb6ac12f40736ff..9bcc0221d5c18f310cb820257a31ab8b1125377e 100755 (executable)
@@ -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 *
 
index 7d32a8b5adeed50399aa86d53a7b83b22d27a728..8dcf6ab13fd85037bcf71cff2cc91ca1669b166e 100755 (executable)
@@ -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
index 4f78cc0fda40c837a65352fea5cccd6f33378d12..d67e6f6ff1135069fd9644461ea1ca8f99bf293a 100755 (executable)
@@ -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
 
index 5852b254335175894b7b35d81edc28958f94eb57..d024becf85482d4ae8ac6e5a157290f754d03b18 100644 (file)
@@ -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