From 86ea1fa15095ed8f44fcf8e82de6a593df48e785 Mon Sep 17 00:00:00 2001 From: KemoNine Date: Wed, 30 Dec 2020 22:38:33 +0000 Subject: [PATCH] First attempts at getting the mdk dongle working with zmk --- .../arm/nrf52840_mdk_dongle/CMakeLists.txt | 15 ++ .../boards/arm/nrf52840_mdk_dongle/Kconfig | 10 ++ .../arm/nrf52840_mdk_dongle/Kconfig.board | 8 + .../arm/nrf52840_mdk_dongle/Kconfig.defconfig | 30 ++++ .../arm/nrf52840_mdk_dongle/board.cmake | 8 + .../mdk_dongle_power_led.c | 39 ++++ .../nrf52840_mdk_dongle.dts | 168 ++++++++++++++++++ .../nrf52840_mdk_dongle.yaml | 13 ++ .../nrf52840_mdk_dongle_defconfig | 14 ++ .../shields/mdk_dongle/Kconfig.defconfig | 9 + .../boards/shields/mdk_dongle/Kconfig.shield | 5 + .../boards/shields/mdk_dongle/README.md | 0 .../boards/shields/mdk_dongle/mdk_dongle.conf | 0 .../shields/mdk_dongle/mdk_dongle.keymap | 21 +++ .../shields/mdk_dongle/mdk_dongle.overlay | 32 ++++ 15 files changed, 372 insertions(+) create mode 100644 keyboards/zmk-config/config/boards/arm/nrf52840_mdk_dongle/CMakeLists.txt create mode 100644 keyboards/zmk-config/config/boards/arm/nrf52840_mdk_dongle/Kconfig create mode 100644 keyboards/zmk-config/config/boards/arm/nrf52840_mdk_dongle/Kconfig.board create mode 100644 keyboards/zmk-config/config/boards/arm/nrf52840_mdk_dongle/Kconfig.defconfig create mode 100644 keyboards/zmk-config/config/boards/arm/nrf52840_mdk_dongle/board.cmake create mode 100644 keyboards/zmk-config/config/boards/arm/nrf52840_mdk_dongle/mdk_dongle_power_led.c create mode 100644 keyboards/zmk-config/config/boards/arm/nrf52840_mdk_dongle/nrf52840_mdk_dongle.dts create mode 100644 keyboards/zmk-config/config/boards/arm/nrf52840_mdk_dongle/nrf52840_mdk_dongle.yaml create mode 100644 keyboards/zmk-config/config/boards/arm/nrf52840_mdk_dongle/nrf52840_mdk_dongle_defconfig create mode 100755 keyboards/zmk-config/config/boards/shields/mdk_dongle/Kconfig.defconfig create mode 100755 keyboards/zmk-config/config/boards/shields/mdk_dongle/Kconfig.shield create mode 100644 keyboards/zmk-config/config/boards/shields/mdk_dongle/README.md create mode 100644 keyboards/zmk-config/config/boards/shields/mdk_dongle/mdk_dongle.conf create mode 100644 keyboards/zmk-config/config/boards/shields/mdk_dongle/mdk_dongle.keymap create mode 100644 keyboards/zmk-config/config/boards/shields/mdk_dongle/mdk_dongle.overlay diff --git a/keyboards/zmk-config/config/boards/arm/nrf52840_mdk_dongle/CMakeLists.txt b/keyboards/zmk-config/config/boards/arm/nrf52840_mdk_dongle/CMakeLists.txt new file mode 100644 index 00000000..dc577d17 --- /dev/null +++ b/keyboards/zmk-config/config/boards/arm/nrf52840_mdk_dongle/CMakeLists.txt @@ -0,0 +1,15 @@ +# +# Copyright (c) 2020 The ZMK Contributors +# SPDX-License-Identifier: MIT +# + +target_sources(app PRIVATE mdk_dongle_power_led.c) + +set_property(GLOBAL APPEND PROPERTY extra_post_build_commands + COMMAND ${PYTHON_EXECUTABLE} ${ZEPHYR_BASE}/../tools/uf2/utils/uf2conv.py + -c + -b 0x26000 + -f 0xADA52840 + -o ${PROJECT_BINARY_DIR}/${CONFIG_KERNEL_BIN_NAME}.uf2 + ${PROJECT_BINARY_DIR}/${CONFIG_KERNEL_BIN_NAME}.bin +) \ No newline at end of file diff --git a/keyboards/zmk-config/config/boards/arm/nrf52840_mdk_dongle/Kconfig b/keyboards/zmk-config/config/boards/arm/nrf52840_mdk_dongle/Kconfig new file mode 100644 index 00000000..0c2a0d66 --- /dev/null +++ b/keyboards/zmk-config/config/boards/arm/nrf52840_mdk_dongle/Kconfig @@ -0,0 +1,10 @@ +# +# Copyright (c) 2020 The ZMK Contributors +# SPDX-License-Identifier: MIT +# + +config BOARD_ENABLE_DCDC + bool "Enable DCDC mode" + select SOC_DCDC_NRF52X + default y + depends on BOARD_NRF52840_MDK_DONGLE diff --git a/keyboards/zmk-config/config/boards/arm/nrf52840_mdk_dongle/Kconfig.board b/keyboards/zmk-config/config/boards/arm/nrf52840_mdk_dongle/Kconfig.board new file mode 100644 index 00000000..7d6d7f2d --- /dev/null +++ b/keyboards/zmk-config/config/boards/arm/nrf52840_mdk_dongle/Kconfig.board @@ -0,0 +1,8 @@ +# +# Copyright (c) 2020 The ZMK Contributors +# SPDX-License-Identifier: MIT +# + +config BOARD_NRF52840_MDK_DONGLE + bool "NRF52840-MDK-dongle" + depends on SOC_NRF52840_QIAA diff --git a/keyboards/zmk-config/config/boards/arm/nrf52840_mdk_dongle/Kconfig.defconfig b/keyboards/zmk-config/config/boards/arm/nrf52840_mdk_dongle/Kconfig.defconfig new file mode 100644 index 00000000..8518ec51 --- /dev/null +++ b/keyboards/zmk-config/config/boards/arm/nrf52840_mdk_dongle/Kconfig.defconfig @@ -0,0 +1,30 @@ +# +# Copyright (c) 2020 The ZMK Contributors +# SPDX-License-Identifier: MIT +# + +if BOARD_NRF52840_MDK_DONGLE + +config BOARD + default "nrf52840_mdk_DONGLE" + +if USB + +config USB_NRFX + default y + +config USB_DEVICE_STACK + default y + +endif # USB + +config BT_CTLR + default BT + +config ZMK_BLE + default y + +config ZMK_USB + default y + +endif # BOARD_NRF52840_MDK_DONGLE diff --git a/keyboards/zmk-config/config/boards/arm/nrf52840_mdk_dongle/board.cmake b/keyboards/zmk-config/config/boards/arm/nrf52840_mdk_dongle/board.cmake new file mode 100644 index 00000000..0c5f98ca --- /dev/null +++ b/keyboards/zmk-config/config/boards/arm/nrf52840_mdk_dongle/board.cmake @@ -0,0 +1,8 @@ +# +# Copyright (c) 2020 The ZMK Contributors +# SPDX-License-Identifier: MIT +# + +board_runner_args(nrfjprog "--nrf-family=NRF52" "--softreset") +include(${ZEPHYR_BASE}/boards/common/blackmagicprobe.board.cmake) +include(${ZEPHYR_BASE}/boards/common/nrfjprog.board.cmake) diff --git a/keyboards/zmk-config/config/boards/arm/nrf52840_mdk_dongle/mdk_dongle_power_led.c b/keyboards/zmk-config/config/boards/arm/nrf52840_mdk_dongle/mdk_dongle_power_led.c new file mode 100644 index 00000000..195816a9 --- /dev/null +++ b/keyboards/zmk-config/config/boards/arm/nrf52840_mdk_dongle/mdk_dongle_power_led.c @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include +#include +#include +#include + +#define POWER_LED_NODE DT_ALIAS(led1_red) + +#if DT_NODE_HAS_STATUS(POWER_LED_NODE, okay) +#define POWER_LED DT_GPIO_LABEL(POWER_LED_NODE, gpios) +#define PIN DT_GPIO_PIN(POWER_LED_NODE, gpios) +#define FLAGS DT_GPIO_FLAGS(POWER_LED_NODE, gpios) +#else +#error "Unsupported board: power led devicetree alias is not defined" +#define POWER_LED "" +#define PIN 0 +#define FLAGS 0 +#endif + +static int pwr_led_init(const struct device *dev) { + dev = device_get_binding(POWER_LED); + if (dev == NULL) { + return -EIO; + } + + int ret = gpio_pin_configure(dev, PIN, GPIO_OUTPUT_ACTIVE | FLAGS); + if (ret < 0) { + return -EIO; + } + + return gpio_pin_set(dev, PIN, true); +} + +SYS_INIT(pwr_led_init, APPLICATION, CONFIG_APPLICATION_INIT_PRIORITY); diff --git a/keyboards/zmk-config/config/boards/arm/nrf52840_mdk_dongle/nrf52840_mdk_dongle.dts b/keyboards/zmk-config/config/boards/arm/nrf52840_mdk_dongle/nrf52840_mdk_dongle.dts new file mode 100644 index 00000000..20ffc15c --- /dev/null +++ b/keyboards/zmk-config/config/boards/arm/nrf52840_mdk_dongle/nrf52840_mdk_dongle.dts @@ -0,0 +1,168 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * SPDX-License-Identifier: MIT + */ + +/dts-v1/; +#include + +/ { + model = "nRF52840-MDK Dongle Dev Kit"; + compatible = "nordic,pca10056-dk"; + + chosen { + zephyr,sram = &sram0; + zephyr,flash = &flash0; + zephyr,code-partition = &slot0_partition; + }; + + leds { + compatible = "gpio-leds"; + led0_green: led_0 { + gpios = <&gpio0 22 GPIO_ACTIVE_LOW>; + label = "Green LED 0"; + }; + led1_red: led_1 { + gpios = <&gpio0 23 GPIO_ACTIVE_LOW>; + label = "Red LED 1"; + }; + led2_blue: led_2 { + gpios = <&gpio0 24 GPIO_ACTIVE_LOW>; + label = "Blue LED 2"; + }; + }; + + pwmleds { + compatible = "pwm-leds"; + pwm_led0_green: pwm_led_0 { + pwms = <&pwm0 22>; + label = "Green PWM LED 0"; + }; + pwm_led1_red: pwm_led_1 { + pwms = <&pwm0 23>; + label = "Red PWM LED 1"; + }; + pwm_led2_blue: pwm_led_2 { + pwms = <&pwm0 24>; + label = "Blue PWM LED 2"; + }; + }; + + buttons { + compatible = "gpio-keys"; + button0: button_0 { + gpios = <&gpio0 18 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)>; + label = "Push button switch 0"; + }; + }; + + /* These aliases are provided for compatibility with samples */ + aliases { + sw0 = &button0; + led0 = &led0_green; + led1 = &led1_red; + led2 = &led2_blue; + led0-green = &led0_green; + led1-red = &led1_red; + led1-blue = &led2_blue; + pwm-led0 = &pwm_led0_green; + pwm-led1 = &pwm_led1_red; + pwm-led2 = &pwm_led2_blue; + green-pwm-led = &pwm_led0_green; + red-pwm-led = &pwm_led1_red; + blue-pwm-led = &pwm_led2_blue; + }; +}; + +&adc { + status = "okay"; +}; + +&gpiote { + status = "okay"; +}; + +&gpio0 { + status = "okay"; +}; + +&gpio1 { + status = "okay"; +}; + +&uart0 { + compatible = "nordic,nrf-uart"; + current-speed = <115200>; + status = "okay"; + tx-pin = <20>; + rx-pin = <19>; + rts-pin = <5>; + cts-pin = <7>; +}; + +&i2c0 { + compatible = "nordic,nrf-twi"; + status = "okay"; + sda-pin = <26>; + scl-pin = <27>; +}; + +&i2c1 { + compatible = "nordic,nrf-twi"; + status = "okay"; + sda-pin = <30>; + scl-pin = <31>; +}; + +&pwm0 { + status = "okay"; + ch0-pin = <22>; + ch0-inverted; + ch1-pin = <23>; + ch1-inverted; + ch2-pin = <24>; + ch2-inverted; +}; + +&flash0 { + /* + * For more information, see: + * https://docs.zephyrproject.org/latest/guides/dts/legacy-macros.html#legacy-flash-partitions + */ + partitions { + compatible = "fixed-partitions"; + #address-cells = <1>; + #size-cells = <1>; + + boot_partition: partition@0 { + label = "mcuboot"; + reg = <0x000000000 0x0000C000>; + }; + slot0_partition: partition@c000 { + label = "image-0"; + reg = <0x0000C000 0x00067000>; + }; + slot1_partition: partition@73000 { + label = "image-1"; + reg = <0x00073000 0x00067000>; + }; + scratch_partition: partition@da000 { + label = "image-scratch"; + reg = <0x000da000 0x0001e000>; + }; + + /* + * The flash starting at 0x000f8000 and ending at + * 0x000fffff is reserved for use by the application. + */ + + /* + * Storage partition will be used by FCB/LittleFS/NVS + * if enabled. + */ + storage_partition: partition@f8000 { + label = "storage"; + reg = <0x000f8000 0x00008000>; + }; + }; +}; diff --git a/keyboards/zmk-config/config/boards/arm/nrf52840_mdk_dongle/nrf52840_mdk_dongle.yaml b/keyboards/zmk-config/config/boards/arm/nrf52840_mdk_dongle/nrf52840_mdk_dongle.yaml new file mode 100644 index 00000000..6eb3819d --- /dev/null +++ b/keyboards/zmk-config/config/boards/arm/nrf52840_mdk_dongle/nrf52840_mdk_dongle.yaml @@ -0,0 +1,13 @@ +identifier: nrf52840_mdk +name: nRF52840-MDK-dongle +type: mcu +arch: arm +toolchain: + - zephyr + - gnuarmemb + - xtools +supported: + - usb_device + - ble + - ieee802154 + - pwm diff --git a/keyboards/zmk-config/config/boards/arm/nrf52840_mdk_dongle/nrf52840_mdk_dongle_defconfig b/keyboards/zmk-config/config/boards/arm/nrf52840_mdk_dongle/nrf52840_mdk_dongle_defconfig new file mode 100644 index 00000000..2c623bbf --- /dev/null +++ b/keyboards/zmk-config/config/boards/arm/nrf52840_mdk_dongle/nrf52840_mdk_dongle_defconfig @@ -0,0 +1,14 @@ +# +# Copyright (c) 2020 The ZMK Contributors +# SPDX-License-Identifier: MIT +# + +CONFIG_SOC_SERIES_NRF52X=y +CONFIG_SOC_NRF52840_QIAA=y +CONFIG_BOARD_NRF52840_MDK_DONGLE=y + +# Enable MPU +CONFIG_ARM_MPU=y + +# enable GPIO +CONFIG_GPIO=y diff --git a/keyboards/zmk-config/config/boards/shields/mdk_dongle/Kconfig.defconfig b/keyboards/zmk-config/config/boards/shields/mdk_dongle/Kconfig.defconfig new file mode 100755 index 00000000..5896884e --- /dev/null +++ b/keyboards/zmk-config/config/boards/shields/mdk_dongle/Kconfig.defconfig @@ -0,0 +1,9 @@ +# Copyright (c) 2020 The ZMK Contributors +# SPDX-License-Identifier: MIT + +if SHIELD_MDK_DONGLE + +config ZMK_KEYBOARD_NAME + default "MDK Dongle" + +endif diff --git a/keyboards/zmk-config/config/boards/shields/mdk_dongle/Kconfig.shield b/keyboards/zmk-config/config/boards/shields/mdk_dongle/Kconfig.shield new file mode 100755 index 00000000..4fecac94 --- /dev/null +++ b/keyboards/zmk-config/config/boards/shields/mdk_dongle/Kconfig.shield @@ -0,0 +1,5 @@ +# Copyright (c) 2020 The ZMK Contributors +# SPDX-License-Identifier: MIT + +config SHIELD_MDK_DONGLE + def_bool $(shields_list_contains,mdk_dongle) diff --git a/keyboards/zmk-config/config/boards/shields/mdk_dongle/README.md b/keyboards/zmk-config/config/boards/shields/mdk_dongle/README.md new file mode 100644 index 00000000..e69de29b diff --git a/keyboards/zmk-config/config/boards/shields/mdk_dongle/mdk_dongle.conf b/keyboards/zmk-config/config/boards/shields/mdk_dongle/mdk_dongle.conf new file mode 100644 index 00000000..e69de29b diff --git a/keyboards/zmk-config/config/boards/shields/mdk_dongle/mdk_dongle.keymap b/keyboards/zmk-config/config/boards/shields/mdk_dongle/mdk_dongle.keymap new file mode 100644 index 00000000..47b70518 --- /dev/null +++ b/keyboards/zmk-config/config/boards/shields/mdk_dongle/mdk_dongle.keymap @@ -0,0 +1,21 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include +#include +#include + +/ { + keymap { + compatible = "zmk,keymap"; + + default_layer { + bindings = < + &kp Z + >; + }; + }; +}; diff --git a/keyboards/zmk-config/config/boards/shields/mdk_dongle/mdk_dongle.overlay b/keyboards/zmk-config/config/boards/shields/mdk_dongle/mdk_dongle.overlay new file mode 100644 index 00000000..6ebf5ea0 --- /dev/null +++ b/keyboards/zmk-config/config/boards/shields/mdk_dongle/mdk_dongle.overlay @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include + +/ { + kscan0: kscan { + compatible = "zmk,kscan-gpio-direct"; + + label = "KSCAN"; + + input-gpios + = <&gpio0 18 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)> + ; + }; + + default_transform: keymap_transform_0 { + compatible = "zmk,matrix-transform"; + columns = <1>; + rows = <1>; + + map = ; + }; + + chosen { + zmk,kscan = &kscan0; + zmk,matrix_transform = &default_transform; + }; +};