Skip to content

Commit

Permalink
Merge pull request #688 from caternuson/add_kb2040
Browse files Browse the repository at this point in the history
Add KB2040
  • Loading branch information
makermelissa authored Jul 7, 2023
2 parents b84de48 + ae345a4 commit b671d2c
Show file tree
Hide file tree
Showing 7 changed files with 107 additions and 0 deletions.
57 changes: 57 additions & 0 deletions src/adafruit_blinka/board/kb2040_u2if.py
Original file line number Diff line number Diff line change
@@ -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)
14 changes: 14 additions & 0 deletions src/adafruit_blinka/microcontroller/rp2040_u2if/i2c.py
Original file line number Diff line number Diff line change
Expand Up @@ -185,3 +185,17 @@ def __init__(self, scl, sda, *, frequency=100000):
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)
12 changes: 12 additions & 0 deletions src/adafruit_blinka/microcontroller/rp2040_u2if/spi.py
Original file line number Diff line number Diff line change
Expand Up @@ -166,3 +166,15 @@ def __init__(self, clock, *, baudrate=100000):
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)
3 changes: 3 additions & 0 deletions src/board.py
Original file line number Diff line number Diff line change
Expand Up @@ -322,6 +322,9 @@
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 *

Expand Down
19 changes: 19 additions & 0 deletions src/busio.py
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,13 @@ def init(self, scl, sda, frequency):
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:
Expand Down Expand Up @@ -312,6 +319,14 @@ def __init__(self, clock, MOSI=None, MISO=None):
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
Expand Down Expand Up @@ -397,6 +412,10 @@ def configure(self, baudrate=100000, polarity=0, phase=0, bits=8):
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:
Expand Down
1 change: 1 addition & 0 deletions src/neopixel_write.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
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:
Expand Down
1 change: 1 addition & 0 deletions src/pwmio.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@
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:
Expand Down

0 comments on commit b671d2c

Please sign in to comment.