]> Repositories - Adafruit_Blinka-hackapet.git/commitdiff
Merge pull request #688 from caternuson/add_kb2040 8.20.0
authorMelissa LeBlanc-Williams <melissa@adafruit.com>
Fri, 7 Jul 2023 17:48:19 +0000 (10:48 -0700)
committerGitHub <noreply@github.com>
Fri, 7 Jul 2023 17:48:19 +0000 (10:48 -0700)
Add KB2040

src/adafruit_blinka/board/kb2040_u2if.py [new file with mode: 0644]
src/adafruit_blinka/microcontroller/rp2040_u2if/i2c.py
src/adafruit_blinka/microcontroller/rp2040_u2if/spi.py
src/board.py
src/busio.py
src/neopixel_write.py
src/pwmio.py

diff --git a/src/adafruit_blinka/board/kb2040_u2if.py b/src/adafruit_blinka/board/kb2040_u2if.py
new file mode 100644 (file)
index 0000000..95b1473
--- /dev/null
@@ -0,0 +1,57 @@
+# SPDX-FileCopyrightText: 2023 Carter Nelson for Adafruit Industries
+#
+# SPDX-License-Identifier: MIT
+"""
+Pin definitions for the KB2040 with u2if firmware.
+
+Adafruit CircuitPython 8.2.0 on 2023-07-05; Adafruit KB2040 with rp2040
+>>> import board
+>>> board.
+A0              A1              A2              A3
+BUTTON          CLK             D0              D1
+D10             D11             D12             D13
+D2              D3              D4              D5
+D6              D7              D8              D9
+I2C             MISO            MOSI            NEOPIXEL
+RX              SCK             SCL             SDA
+SPI             STEMMA_I2C      TX              UART
+board_id
+"""
+
+from adafruit_blinka.microcontroller.rp2040_u2if import pin
+
+D0 = TX = pin.GP0
+D1 = RX = pin.GP1
+D2 = pin.GP2
+D3 = pin.GP3
+D4 = pin.GP4
+D5 = pin.GP5
+D6 = pin.GP6
+D7 = pin.GP7
+D8 = pin.GP8
+D9 = pin.GP9
+D10 = pin.GP10
+D11 = pin.GP11
+D12 = pin.GP12
+D13 = pin.GP13
+
+A0 = pin.GP26
+A1 = pin.GP27
+A2 = pin.GP28
+A3 = pin.GP29
+
+BUTTON = pin.GP11
+
+NEOPIXEL = pin.GP17
+
+SDA = pin.GP12
+SCL = pin.GP13
+
+SCLK = pin.GP18
+MOSI = pin.GP19
+MISO = pin.GP20
+
+
+# access u2if via pin instance to open for specifc VID/PID
+# pylint:disable = protected-access
+pin.GP0._u2if_open_hid(0x239A, 0x0105)
index 1715b4a026a9443f19f12b3ee646881b188a2f28..f294e1e5839e5a9499be729fc2738413619741ef 100644 (file)
@@ -185,3 +185,17 @@ class I2C_QT2040_Trinkey(I2C):
         self._index = index
 
         super().__init__(index, frequency=frequency)
+
+
+class I2C_KB2040(I2C):
+    """I2C Class for KB2040 u2if"""
+
+    def __init__(self, scl, sda, *, frequency=100000):
+        index = None
+        if scl.id == 13 and sda.id == 12:
+            index = 0
+        if index is None:
+            raise ValueError("I2C not found on specified pins.")
+        self._index = index
+
+        super().__init__(index, frequency=frequency)
index 7491c0343d03e63328b153d67d449c5c5c98950c..0acc5e62fcde6ad86b5f5fc70f5c607a3dc82a40 100644 (file)
@@ -166,3 +166,15 @@ class SPI_MacroPad(SPI):
         if index is None:
             raise ValueError("No SPI port on specified pin.")
         super().__init__(index, baudrate=baudrate)
+
+
+class SPI_KB2040(SPI):
+    """SPI Class for KB2040 u2if"""
+
+    def __init__(self, clock, *, baudrate=100000):
+        index = None
+        if clock.id == 18:
+            index = 0
+        if index is None:
+            raise ValueError("No SPI port on specified pin.")
+        super().__init__(index, baudrate=baudrate)
index 89a2a73609c1410643ab49babec6cdd02e440164..74aeb5cc7b1a67edce3a9c364792ce67aaca8894 100644 (file)
@@ -322,6 +322,9 @@ elif board_id == ap_board.MACROPAD_U2IF:
 elif board_id == ap_board.QT2040_TRINKEY_U2IF:
     from adafruit_blinka.board.qt2040_trinkey_u2if import *
 
+elif board_id == ap_board.KB2040_U2IF:
+    from adafruit_blinka.board.kb2040_u2if import *
+
 elif board_id == ap_board.LICHEE_RV:
     from adafruit_blinka.board.lichee_rv import *
 
index ed5c88c2016e324ecd2805714ee23f400dada482..2de9e60a69137419a5c734f00d9e179cf27f14c5 100644 (file)
@@ -114,6 +114,13 @@ class I2C(Lockable):
                 I2C_QT2040_Trinkey as _I2C,
             )
 
+            self._i2c = _I2C(scl, sda, frequency=frequency)
+            return
+        if detector.board.kb2040_u2if:
+            from adafruit_blinka.microcontroller.rp2040_u2if.i2c import (
+                I2C_KB2040 as _I2C,
+            )
+
             self._i2c = _I2C(scl, sda, frequency=frequency)
             return
         if detector.chip.id == ap_chip.RP2040:
@@ -312,6 +319,14 @@ class SPI(Lockable):
         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
+        if detector.board.kb2040_u2if:
+            from adafruit_blinka.microcontroller.rp2040_u2if.spi import (
+                SPI_KB2040 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
@@ -397,6 +412,10 @@ class SPI(Lockable):
             from adafruit_blinka.microcontroller.rp2040_u2if.spi import (
                 SPI_MacroPad as _SPI,
             )
+        elif detector.board.kb2040_u2if:
+            from adafruit_blinka.microcontroller.rp2040_u2if.spi import (
+                SPI_KB2040 as _SPI,
+            )
         elif detector.board.qtpy_u2if:
             from adafruit_blinka.microcontroller.rp2040_u2if.spi import SPI_QTPY as _SPI
         elif detector.chip.id == ap_chip.RP2040:
index 997dd0dec5e75dafbe7dec5cac56f77817274067..7c4f757a0fdb3d68481e5618f7d87055f5d707dd 100644 (file)
@@ -28,6 +28,7 @@ elif (
     or detector.board.itsybitsy_u2if
     or detector.board.macropad_u2if
     or detector.board.qt2040_trinkey_u2if
+    or detector.board.kb2040_u2if
 ):
     from adafruit_blinka.microcontroller.rp2040_u2if import neopixel as _neopixel
 elif "sphinx" in sys.modules:
index 57854df42b736a6fa61ae6a9a9c954ad3791dbee..886241fb8535f906727286fe8b5bd4426fd92845 100644 (file)
@@ -45,6 +45,7 @@ elif (
     or detector.board.itsybitsy_u2if
     or detector.board.macropad_u2if
     or detector.board.qt2040_trinkey_u2if
+    or detector.board.kb2040_u2if
 ):
     from adafruit_blinka.microcontroller.rp2040_u2if.pwmio import PWMOut
 elif "sphinx" in sys.modules: