summaryrefslogtreecommitdiff
path: root/app/boards
diff options
context:
space:
mode:
authorNick Winans <nick@winans.codes>2021-05-29 10:00:40 -0500
committerPete Johanson <peter@peterjohanson.com>2021-05-30 11:47:20 -0400
commit3f838f0aaf90cd5f8dad622fd1d901a9a8eb40d0 (patch)
tree96609a1b216a072799c6032d7b7462294969832b /app/boards
parenta32cd668d6c793ee77c4d85ce5fb47e793f8ae11 (diff)
feat(boards): Add nice!60 board
Diffstat (limited to 'app/boards')
-rw-r--r--app/boards/arm/nice60/CMakeLists.txt8
-rw-r--r--app/boards/arm/nice60/Kconfig8
-rw-r--r--app/boards/arm/nice60/Kconfig.board6
-rw-r--r--app/boards/arm/nice60/Kconfig.defconfig31
-rw-r--r--app/boards/arm/nice60/README.md9
-rw-r--r--app/boards/arm/nice60/board.cmake6
-rw-r--r--app/boards/arm/nice60/nice60.dts172
-rw-r--r--app/boards/arm/nice60/nice60.keymap50
-rw-r--r--app/boards/arm/nice60/nice60.yaml14
-rw-r--r--app/boards/arm/nice60/nice60_defconfig27
10 files changed, 331 insertions, 0 deletions
diff --git a/app/boards/arm/nice60/CMakeLists.txt b/app/boards/arm/nice60/CMakeLists.txt
new file mode 100644
index 0000000..f833ff2
--- /dev/null
+++ b/app/boards/arm/nice60/CMakeLists.txt
@@ -0,0 +1,8 @@
+set_property(GLOBAL APPEND PROPERTY extra_post_build_commands
+ COMMAND ${PYTHON_EXECUTABLE} ${ZEPHYR_BASE}/../tools/uf2/utils/uf2conv.py
+ -c
+ -b 0x1000
+ -f 0xADA52840
+ -o ${PROJECT_BINARY_DIR}/${CONFIG_KERNEL_BIN_NAME}.uf2
+ ${PROJECT_BINARY_DIR}/${CONFIG_KERNEL_BIN_NAME}.bin
+)
diff --git a/app/boards/arm/nice60/Kconfig b/app/boards/arm/nice60/Kconfig
new file mode 100644
index 0000000..db7cf39
--- /dev/null
+++ b/app/boards/arm/nice60/Kconfig
@@ -0,0 +1,8 @@
+# Copyright (c) 2021 Nick Winans
+# SPDX-License-Identifier: MIT
+
+config BOARD_ENABLE_DCDC
+ bool "Enable DCDC mode"
+ select SOC_DCDC_NRF52X
+ default y
+ depends on BOARD_NICE60
diff --git a/app/boards/arm/nice60/Kconfig.board b/app/boards/arm/nice60/Kconfig.board
new file mode 100644
index 0000000..778f79e
--- /dev/null
+++ b/app/boards/arm/nice60/Kconfig.board
@@ -0,0 +1,6 @@
+# Copyright (c) 2021 Nick Winans
+# SPDX-License-Identifier: MIT
+
+config BOARD_NICE60
+ bool "nice!60"
+ depends on SOC_NRF52840_QIAA
diff --git a/app/boards/arm/nice60/Kconfig.defconfig b/app/boards/arm/nice60/Kconfig.defconfig
new file mode 100644
index 0000000..81a7c03
--- /dev/null
+++ b/app/boards/arm/nice60/Kconfig.defconfig
@@ -0,0 +1,31 @@
+# Copyright (c) 2021 Nick Winans
+# SPDX-License-Identifier: MIT
+
+if BOARD_NICE60
+
+config ZMK_KEYBOARD_NAME
+ default "nice!60"
+
+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
+
+config ZMK_BATTERY_VOLTAGE_DIVIDER
+ default y
+
+endif # BOARD_NICE60
diff --git a/app/boards/arm/nice60/README.md b/app/boards/arm/nice60/README.md
new file mode 100644
index 0000000..49433df
--- /dev/null
+++ b/app/boards/arm/nice60/README.md
@@ -0,0 +1,9 @@
+# nice!60
+![nice!60](https://i.imgur.com/0YWv5PE.png)
+
+The nice!60 is a hotswap 60% made by Nice Keyboards. https://nicekeyboards.com/nice-60
+
+## Building nice!60 ZMK firmware
+```
+west build -p -b nice60
+```
diff --git a/app/boards/arm/nice60/board.cmake b/app/boards/arm/nice60/board.cmake
new file mode 100644
index 0000000..7f511c5
--- /dev/null
+++ b/app/boards/arm/nice60/board.cmake
@@ -0,0 +1,6 @@
+# Copyright (c) 2021 Nick Winans
+# SPDX-License-Identifier: MIT
+
+board_runner_args(nrfjprog "--nrf-family=NRF52" "--softreset")
+include(${ZEPHYR_BASE}/boards/common/nrfjprog.board.cmake)
+include(${ZEPHYR_BASE}/boards/common/openocd-nrf5.board.cmake)
diff --git a/app/boards/arm/nice60/nice60.dts b/app/boards/arm/nice60/nice60.dts
new file mode 100644
index 0000000..f50f94a
--- /dev/null
+++ b/app/boards/arm/nice60/nice60.dts
@@ -0,0 +1,172 @@
+/*
+ * Copyright (c) 2021 Nick Winans
+ *
+ * SPDX-License-Identifier: MIT
+ */
+
+/dts-v1/;
+#include <nordic/nrf52840_qiaa.dtsi>
+#include <dt-bindings/zmk/matrix_transform.h>
+
+/ {
+ model = "nice!60";
+ compatible = "nice,60";
+
+ chosen {
+ zephyr,code-partition = &code_partition;
+ zephyr,sram = &sram0;
+ zephyr,flash = &flash0;
+ zmk,kscan = &kscan0;
+ zmk,matrix_transform = &default_transform;
+ zmk,underglow = &led_strip;
+ };
+
+ default_transform: keymap_transform_0 {
+ compatible = "zmk,matrix-transform";
+ columns = <14>;
+ rows = <5>;
+ map = <
+RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,6) RC(0,7) RC(0,8) RC(0,9) RC(0,10) RC(0,11) RC(0,12) RC(0,13)
+RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) RC(1,8) RC(1,9) RC(1,10) RC(1,11) RC(1,12) RC(1,13)
+RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10) RC(2,11) RC(2,13)
+RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(3,6) RC(3,7) RC(3,8) RC(3,9) RC(3,10) RC(3,13)
+RC(4,0) RC(4,1) RC(4,2) RC(4,5) RC(4,9) RC(4,10) RC(4,11) RC(4,13)
+ >;
+ };
+
+ kscan0: kscan {
+ compatible = "zmk,kscan-gpio-matrix";
+ label = "KSCAN";
+
+ diode-direction = "col2row";
+ row-gpios
+ = <&gpio1 14 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
+ , <&gpio1 13 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
+ , <&gpio1 12 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
+ , <&gpio1 11 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
+ , <&gpio1 10 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
+ ;
+ col-gpios
+ = <&gpio1 15 GPIO_ACTIVE_HIGH>
+ , <&gpio0 29 GPIO_ACTIVE_HIGH>
+ , <&gpio0 31 GPIO_ACTIVE_HIGH>
+ , <&gpio0 30 GPIO_ACTIVE_HIGH>
+ , <&gpio0 28 GPIO_ACTIVE_HIGH>
+ , <&gpio0 2 GPIO_ACTIVE_HIGH>
+ , <&gpio0 3 GPIO_ACTIVE_HIGH>
+ , <&gpio1 3 GPIO_ACTIVE_HIGH>
+ , <&gpio1 7 GPIO_ACTIVE_HIGH>
+ , <&gpio1 4 GPIO_ACTIVE_HIGH>
+ , <&gpio1 6 GPIO_ACTIVE_HIGH>
+ , <&gpio1 5 GPIO_ACTIVE_HIGH>
+ , <&gpio1 1 GPIO_ACTIVE_HIGH>
+ , <&gpio1 2 GPIO_ACTIVE_HIGH>
+ ;
+ };
+
+ leds {
+ compatible = "gpio-leds";
+ blue_led: led_0 {
+ gpios = <&gpio0 26 GPIO_ACTIVE_HIGH>;
+ label = "Blue LED";
+ };
+ };
+
+ ext-power {
+ compatible = "zmk,ext-power-generic";
+ label = "EXT_POWER";
+ control-gpios = <&gpio0 5 GPIO_ACTIVE_LOW>;
+ };
+
+ vbatt {
+ compatible = "zmk,battery-voltage-divider";
+ label = "BATTERY";
+ io-channels = <&adc 2>;
+ output-ohms = <2000000>;
+ full-ohms = <(2000000 + 806000)>;
+ };
+};
+
+&adc {
+ status = "okay";
+};
+
+&gpiote {
+ status = "okay";
+};
+
+&gpio0 {
+ status = "okay";
+};
+
+&gpio1 {
+ status = "okay";
+};
+
+&spi0 {
+ compatible = "nordic,nrf-spim";
+ /* Cannot be used together with i2c0. */
+ status = "okay";
+ sck-pin = <12>;
+ mosi-pin = <27>;
+ miso-pin = <13>;
+
+ led_strip: ws2812@0 {
+ compatible = "worldsemi,ws2812-spi";
+ label = "WS2812";
+
+ /* SPI */
+ reg = <0>; /* ignored, but necessary for SPI bindings */
+ spi-max-frequency = <4000000>;
+
+ /* WS2812 */
+ chain-length = <12>; /* LED strip length */
+ spi-one-frame = <0x70>;
+ spi-zero-frame = <0x40>;
+ };
+};
+
+&usbd {
+ status = "okay";
+};
+
+&flash0 {
+ /*
+ * For more information, see:
+ * http://docs.zephyrproject.org/latest/devices/dts/flash_partitions.html
+ */
+ partitions {
+ compatible = "fixed-partitions";
+ #address-cells = <1>;
+ #size-cells = <1>;
+
+ sd_partition: partition@0 {
+ label = "mbr";
+ reg = <0x00000000 0x00001000>;
+ };
+
+ code_partition: partition@1000 {
+ label = "code_partition";
+ reg = <0x00001000 0x000d3000>;
+ };
+
+ /*
+ * The flash starting at 0x000d4000 and ending at
+ * 0x000f3fff is reserved for use by the application.
+ */
+
+ /*
+ * Storage partition will be used by FCB/LittleFS/NVS
+ * if enabled.
+ */
+ storage_partition: partition@d4000 {
+ label = "storage";
+ reg = <0x000d4000 0x00020000>;
+ };
+
+ boot_partition: partition@f4000 {
+ label = "adafruit_boot";
+ reg = <0x000f4000 0x0000c000>;
+ };
+ };
+};
diff --git a/app/boards/arm/nice60/nice60.keymap b/app/boards/arm/nice60/nice60.keymap
new file mode 100644
index 0000000..bdb188d
--- /dev/null
+++ b/app/boards/arm/nice60/nice60.keymap
@@ -0,0 +1,50 @@
+/*
+ * Copyright (c) 2021 Nick Winans
+ *
+ * SPDX-License-Identifier: MIT
+ */
+
+#include <behaviors.dtsi>
+#include <dt-bindings/zmk/keys.h>
+#include <dt-bindings/zmk/rgb.h>
+#include <dt-bindings/zmk/bt.h>
+
+/ {
+ keymap {
+ compatible = "zmk,keymap";
+
+ default_layer {
+// ------------------------------------------------------------------------------------------
+// | ESC | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | BKSP |
+// | TAB | Q | W | E | R | T | Y | U | I | O | P | [ | ] | "|" |
+// | CAPS | A | S | D | F | G | H | J | K | L | ; | ' | ENTER |
+// | SHIFT | Z | X | C | V | B | N | M | , | . | / | SHIFT |
+// | CTL | WIN | ALT | SPACE | ALT | WIN | MO(1) | CTL |
+// ------------------------------------------------------------------------------------------
+ bindings = <
+ &gresc &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp MINUS &kp EQUAL &kp BSPC
+ &kp TAB &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp LBKT &kp RBKT &kp BSLH
+ &kp CLCK &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp SQT &kp RET
+ &kp LSHFT &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &kp COMMA &kp DOT &kp FSLH &kp RSHFT
+ &kp LCTRL &kp LGUI &kp LALT &kp SPACE &kp RALT &kp RGUI &mo 1 &kp RCTRL
+ >;
+ };
+
+ rgb_layer {
+// ------------------------------------------------------------------------------------------------
+// | BT CLR | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | EFFECT REV |
+// | BT 1 | | UP | | HUEUP | SATUP | BRIUP | SPDUP | | | | | | |
+// | BT 2 | LT | DN | RT | HUEDN | SATDN | BRIDN | SPDDN | | | | | EFFECT FORW |
+// | BT 3 | | | | | | | | | | | |
+// | BT 4 | | | TOG RGB | PRT SCR | | | DEL |
+// ------------------------------------------------------------------------------------------------
+ bindings = <
+ &bt BT_CLR &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 &rgb_ug RGB_EFR
+ &bt BT_SEL 0 &trans &kp UP &trans &rgb_ug RGB_HUI &rgb_ug RGB_SAI &rgb_ug RGB_BRI &rgb_ug RGB_SPI &trans &trans &trans &trans &trans &trans
+ &bt BT_SEL 1 &kp LEFT &kp DOWN &kp RIGHT &rgb_ug RGB_HUD &rgb_ug RGB_SAD &rgb_ug RGB_BRD &rgb_ug RGB_SPD &trans &trans &trans &trans &rgb_ug RGB_EFF
+ &bt BT_SEL 2 &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans
+ &bt BT_SEL 3 &trans &trans &rgb_ug RGB_TOG &kp PSCRN &trans &trans &kp DEL
+ >;
+ };
+ };
+};
diff --git a/app/boards/arm/nice60/nice60.yaml b/app/boards/arm/nice60/nice60.yaml
new file mode 100644
index 0000000..d3db56f
--- /dev/null
+++ b/app/boards/arm/nice60/nice60.yaml
@@ -0,0 +1,14 @@
+identifier: nice60
+name: nice!60
+type: mcu
+arch: arm
+toolchain:
+ - zephyr
+ - gnuarmemb
+supported:
+ - adc
+ - usb_device
+ - ble
+ - ieee802154
+ - pwm
+ - watchdog
diff --git a/app/boards/arm/nice60/nice60_defconfig b/app/boards/arm/nice60/nice60_defconfig
new file mode 100644
index 0000000..3a3a978
--- /dev/null
+++ b/app/boards/arm/nice60/nice60_defconfig
@@ -0,0 +1,27 @@
+# Copyright (c) 2021 Nick Winans
+# SPDX-License-Identifier: MIT
+
+CONFIG_SOC_SERIES_NRF52X=y
+CONFIG_SOC_NRF52840_QIAA=y
+CONFIG_BOARD_NICE60=y
+
+# Enable MPU
+CONFIG_ARM_MPU=y
+
+# enable GPIO
+CONFIG_GPIO=y
+
+CONFIG_USE_DT_CODE_PARTITION=y
+
+CONFIG_MPU_ALLOW_FLASH_WRITE=y
+CONFIG_NVS=y
+CONFIG_SETTINGS_NVS=y
+CONFIG_FLASH=y
+CONFIG_FLASH_PAGE_LAYOUT=y
+CONFIG_FLASH_MAP=y
+
+CONFIG_ZMK_RGB_UNDERGLOW=y
+CONFIG_WS2812_STRIP=y
+
+CONFIG_ZMK_RGB_UNDERGLOW_HUE_START=160
+CONFIG_ZMK_RGB_UNDERGLOW_EFF_START=3