diff --git a/.gitmodules b/.gitmodules
index 681693a5a4..7bbb7910a1 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -18,3 +18,6 @@
[submodule "lib/printf"]
path = lib/printf
url = https://github.com/qmk/printf
+[submodule "lib/pico-sdk"]
+ path = lib/pico-sdk
+ url = https://github.com/raspberrypi/pico-sdk
diff --git a/Makefile b/Makefile
index 4c2e6a04dc..fc6d016448 100644
--- a/Makefile
+++ b/Makefile
@@ -401,6 +401,7 @@ ifndef SKIP_GIT
if [ ! -e lib/lufa ]; then git submodule sync lib/lufa && git submodule update --depth 50 --init lib/lufa; fi
if [ ! -e lib/vusb ]; then git submodule sync lib/vusb && git submodule update --depth 50 --init lib/vusb; fi
if [ ! -e lib/printf ]; then git submodule sync lib/printf && git submodule update --depth 50 --init lib/printf; fi
+ if [ ! -e lib/pico-sdk ]; then git submodule sync lib/pico-sdk && git submodule update --depth 50 --init lib/pico-sdk; fi
git submodule status --recursive 2>/dev/null | \
while IFS= read -r x; do \
case "$$x" in \
diff --git a/builddefs/bootloader.mk b/builddefs/bootloader.mk
index dfbe6232c6..0158e97b06 100644
--- a/builddefs/bootloader.mk
+++ b/builddefs/bootloader.mk
@@ -213,6 +213,10 @@ ifeq ($(strip $(BOOTLOADER)), md-boot)
OPT_DEFS += -DBOOTLOADER_MD_BOOT
BOOTLOADER_TYPE = md_boot
endif
+ifeq ($(strip $(BOOTLOADER)), RP2040)
+ OPT_DEFS += -DBOOTLOADER_RP2040
+ BOOTLOADER_TYPE = RP2040
+endif
ifeq ($(strip $(BOOTLOADER_TYPE)),)
$(call CATASTROPHIC_ERROR,Invalid BOOTLOADER,No bootloader specified. Please set an appropriate 'BOOTLOADER' in your keyboard's 'rules.mk' file.)
diff --git a/builddefs/build_keyboard.mk b/builddefs/build_keyboard.mk
index 50956c9780..f8bd538674 100644
--- a/builddefs/build_keyboard.mk
+++ b/builddefs/build_keyboard.mk
@@ -177,6 +177,18 @@ ifeq ($(strip $(CONVERT_TO_PROTON_C)), yes)
include platforms/chibios/boards/QMK_PROTON_C/convert_to_proton_c.mk
endif
+ifeq ($(strip $(CTPIM)), yes)
+ CONVERT_TO_PICO_MICRO=yes
+endif
+
+ifeq ($(strip $(CONVERT_TO_PICO_MICRO)), yes)
+ include platforms/pico/convert_to_pico_micro.mk
+endif
+
+ifneq ($(FORCE_LAYOUT),)
+ TARGET := $(TARGET)_$(FORCE_LAYOUT)
+endif
+
include $(BUILDDEFS_PATH)/mcu_selection.mk
# Find all the C source files to be compiled in subfolders.
@@ -261,6 +273,13 @@ ifdef MCU_FAMILY
PLATFORM_KEY=chibios
FIRMWARE_FORMAT?=bin
OPT_DEFS += -DMCU_$(MCU_FAMILY)
+ ifeq ($(MCU_FAMILY),PICO)
+ $(info "PLATFORM RP2040")
+ PLATFORM=PICO_SDK
+ PLATFORM_KEY=pico
+ FIRMWARE_FORMAT=uf2
+ UF2_FAMILY=RP2040
+ endif
else ifdef ARM_ATSAM
PLATFORM=ARM_ATSAM
PLATFORM_KEY=arm_atsam
diff --git a/builddefs/common_features.mk b/builddefs/common_features.mk
index 4819f66787..c1e13e568f 100644
--- a/builddefs/common_features.mk
+++ b/builddefs/common_features.mk
@@ -211,6 +211,11 @@ else
# arm_atsam EEPROM
OPT_DEFS += -DEEPROM_SAMD
SRC += $(PLATFORM_COMMON_DIR)/eeprom_samd.c
+ SRC += $(PLATFORM_COMMON_DIR)/eeprom.c
+ else ifeq ($(PLATFORM),PICO_SDK)
+ OPT_DEFS += -DEEPROM_PICO
+ SRC += $(PLATFORM_COMMON_DIR)/eeprom.c
+ SRC += $(PLATFORM_COMMON_DIR)/flash_pico.c
else ifeq ($(PLATFORM),TEST)
# Test harness "EEPROM"
OPT_DEFS += -DEEPROM_TEST_HARNESS
diff --git a/builddefs/common_rules.mk b/builddefs/common_rules.mk
index 6dfcf2b7f7..858adc5ae9 100644
--- a/builddefs/common_rules.mk
+++ b/builddefs/common_rules.mk
@@ -53,7 +53,7 @@ OPT ?= s
# gnu89 = c89 plus GCC extensions
# c99 = ISO C99 standard (not yet fully implemented)
# gnu99 = c99 plus GCC extensions
-CSTANDARD = -std=gnu99
+CSTANDARD = -std=gnu11
# Place -D or -U options here for C sources
@@ -86,8 +86,12 @@ ifeq ($(strip $(LTO_ENABLE)), yes)
$(info Enabling LTO on ChibiOS-targeting boards is known to have a high likelihood of failure.)
$(info If unsure, set LTO_ENABLE = no.)
endif
- CDEFS += -flto
- CDEFS += -DLTO_ENABLE
+ ifeq ($(PLATFORM),PICO_SDK)
+ $(info LTO is not available for this platform. Disabled automatically.)
+ else
+ CDEFS += -flto
+ CDEFS += -DLTO_ENABLE
+ endif
endif
DEBUG_ENABLE ?= yes
diff --git a/data/schemas/definitions.jsonschema b/data/schemas/definitions.jsonschema
index 46aba52cbd..83cf64f344 100644
--- a/data/schemas/definitions.jsonschema
+++ b/data/schemas/definitions.jsonschema
@@ -89,6 +89,10 @@
"type": "string",
"pattern": "^LINE_PIN\\d{1,2}$"
},
+ {
+ "type": "string",
+ "pattern": "^\\d{1,2}$"
+ },
{
"type": "number",
"multipleOf": 1
diff --git a/data/schemas/keyboard.jsonschema b/data/schemas/keyboard.jsonschema
index ffe34b2b93..485b43b236 100644
--- a/data/schemas/keyboard.jsonschema
+++ b/data/schemas/keyboard.jsonschema
@@ -57,7 +57,7 @@
},
"bootloader": {
"type": "string",
- "enum": ["atmel-dfu", "bootloadhid", "bootloadHID", "custom", "caterina", "halfkay", "kiibohd", "lufa-dfu", "lufa-ms", "md-boot", "qmk-dfu", "qmk-hid", "stm32-dfu", "stm32duino", "gd32v-dfu", "wb32-dfu", "unknown", "usbasploader", "USBasp", "tinyuf2", "vibl"],
+ "enum": ["atmel-dfu", "bootloadhid", "bootloadHID", "custom", "caterina", "halfkay", "kiibohd", "lufa-dfu", "lufa-ms", "md-boot", "qmk-dfu", "qmk-hid", "stm32-dfu", "stm32duino", "gd32v-dfu", "wb32-dfu", "unknown", "usbasploader", "USBasp", "tinyuf2", "vibl", "RP2040"],
},
"bootloader_instructions": {
"type": "string",
diff --git a/keyboards/rp2040_example/config.h b/keyboards/rp2040_example/config.h
new file mode 100644
index 0000000000..d6141803c2
--- /dev/null
+++ b/keyboards/rp2040_example/config.h
@@ -0,0 +1,155 @@
+/*
+Copyright 2021 sekigon-gonnoc
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x0000
+#define DEVICE_VER 0x0001
+#define MANUFACTURER sekigon-gonnoc
+#define PRODUCT rp2040_example
+
+/* key matrix size */
+#define MATRIX_ROWS 2
+#define MATRIX_COLS 3
+
+#define DEBUG_MATRIX_SCAN_RATE
+#define DEBUG_ACTION
+
+/*
+ * Keyboard Matrix Assignments
+ *
+ * Change this to how you wired your keyboard
+ * COLS: AVR pins used for columns, left to right
+ * ROWS: AVR pins used for rows, top to bottom
+ * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
+ * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
+ *
+ */
+#define MATRIX_ROW_PINS { 0, 1 }
+#define MATRIX_COL_PINS { 2, 3, 4 }
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/*
+ * Split Keyboard specific options, make sure you have 'SPLIT_KEYBOARD = yes' in your rules.mk, and define SOFT_SERIAL_PIN.
+ */
+#define SOFT_SERIAL_PIN D0 // or D1, D2, D3, E6
+
+//#define LED_NUM_LOCK_PIN B0
+//#define LED_CAPS_LOCK_PIN B1
+//#define LED_SCROLL_LOCK_PIN B2
+//#define LED_COMPOSE_PIN B3
+//#define LED_KANA_PIN B4
+
+//#define BACKLIGHT_PIN B7
+//#define BACKLIGHT_LEVELS 3
+//#define BACKLIGHT_BREATHING
+
+//#define RGB_DI_PIN E2
+//#ifdef RGB_DI_PIN
+//# define RGBLED_NUM 16
+//# define RGBLIGHT_HUE_STEP 8
+//# define RGBLIGHT_SAT_STEP 8
+//# define RGBLIGHT_VAL_STEP 8
+//# define RGBLIGHT_LIMIT_VAL 255 /* The maximum brightness level */
+//# define RGBLIGHT_SLEEP /* If defined, the RGB lighting will be switched off when the host goes to sleep */
+/*== all animations enable ==*/
+//# define RGBLIGHT_ANIMATIONS
+/*== or choose animations ==*/
+//# define RGBLIGHT_EFFECT_BREATHING
+//# define RGBLIGHT_EFFECT_RAINBOW_MOOD
+//# define RGBLIGHT_EFFECT_RAINBOW_SWIRL
+//# define RGBLIGHT_EFFECT_SNAKE
+//# define RGBLIGHT_EFFECT_KNIGHT
+//# define RGBLIGHT_EFFECT_CHRISTMAS
+//# define RGBLIGHT_EFFECT_STATIC_GRADIENT
+//# define RGBLIGHT_EFFECT_RGB_TEST
+//# define RGBLIGHT_EFFECT_ALTERNATING
+/*== customize breathing effect ==*/
+/*==== (DEFAULT) use fixed table instead of exp() and sin() ====*/
+//# define RGBLIGHT_BREATHE_TABLE_SIZE 256 // 256(default) or 128 or 64
+/*==== use exp() and sin() ====*/
+//# define RGBLIGHT_EFFECT_BREATHE_CENTER 1.85 // 1 to 2.7
+//# define RGBLIGHT_EFFECT_BREATHE_MAX 255 // 0 to 255
+//#endif
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCE 5
+
+/* define if matrix has ghost (lacks anti-ghosting diodes) */
+//#define MATRIX_HAS_GHOST
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* If defined, GRAVE_ESC will always act as ESC when CTRL is held.
+ * This is useful for the Windows task manager shortcut (ctrl+shift+esc).
+ */
+//#define GRAVE_ESC_CTRL_OVERRIDE
+
+/*
+ * Force NKRO
+ *
+ * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
+ * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
+ * makefile for this to work.)
+ *
+ * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
+ * until the next keyboard reset.
+ *
+ * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
+ * fully operational during normal computer usage.
+ *
+ * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
+ * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
+ * bootmagic, NKRO mode will always be enabled until it is toggled again during a
+ * power-up.
+ *
+ */
+//#define FORCE_NKRO
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+
+/* disable these deprecated features by default */
+#define NO_ACTION_MACRO
+#define NO_ACTION_FUNCTION
+
+/* Bootmagic Lite key configuration */
+//#define BOOTMAGIC_LITE_ROW 0
+//#define BOOTMAGIC_LITE_COLUMN 0
diff --git a/keyboards/rp2040_example/info.json b/keyboards/rp2040_example/info.json
new file mode 100644
index 0000000000..681b326dfc
--- /dev/null
+++ b/keyboards/rp2040_example/info.json
@@ -0,0 +1,19 @@
+{
+ "keyboard_name": "rp2040_example",
+ "url": "",
+ "maintainer": "sekigon-gonnoc",
+ "width": 3,
+ "height": 2,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"label": "k00", "x": 0, "y": 0},
+ {"label": "k01", "x": 1, "y": 0},
+ {"label": "k02", "x": 2, "y": 0},
+
+ {"label": "k10", "x": 0, "y": 1, "w": 1.5},
+ {"label": "k12", "x": 1.5, "y": 1, "w": 1.5}
+ ]
+ }
+ }
+}
diff --git a/keyboards/rp2040_example/keymaps/adc/keymap.c b/keyboards/rp2040_example/keymaps/adc/keymap.c
new file mode 100644
index 0000000000..88dc046c1c
--- /dev/null
+++ b/keyboards/rp2040_example/keymaps/adc/keymap.c
@@ -0,0 +1,73 @@
+/* Copyright 2021 sekigon-gonnoc
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#include QMK_KEYBOARD_H
+#include "pico_eeprom.h"
+#include "analog.h"
+
+// Defines names for use in layer keycodes and the keymap
+enum layer_names {
+ _BASE,
+ _FN
+};
+
+// Defines the keycodes used by our macros in process_record_user
+enum custom_keycodes {
+ QMKBEST = SAFE_RANGE,
+ QMKURL
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* Base */
+ [_BASE] = LAYOUT(
+ KC_A, KC_1, MO(_FN),
+ KC_TAB, KC_SPC
+ ),
+ [_FN] = LAYOUT(
+ QMKBEST, QMKURL, _______,
+ RESET, XXXXXXX
+ )
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case QMKBEST:
+ if (record->event.pressed) {
+ // when keycode QMKBEST is pressed
+ SEND_STRING("QMK is the best thing ever!");
+ } else {
+ // when keycode QMKBEST is released
+ }
+ break;
+ case QMKURL:
+ if (record->event.pressed) {
+ // when keycode QMKURL is pressed
+ SEND_STRING("https://qmk.fm/\n");
+ } else {
+ // when keycode QMKURL is released
+ }
+ break;
+ }
+ return true;
+}
+
+void matrix_scan_user(void) {
+ static int cnt = 0;
+ if (++cnt == 1000) {
+ cnt = 0;
+ int16_t ad = analogReadPin(26);
+ printf("ADC:%d\n", ad);
+ }
+}
diff --git a/keyboards/rp2040_example/keymaps/adc/readme.md b/keyboards/rp2040_example/keymaps/adc/readme.md
new file mode 100644
index 0000000000..7f32c76f01
--- /dev/null
+++ b/keyboards/rp2040_example/keymaps/adc/readme.md
@@ -0,0 +1 @@
+# The default keymap for rp2040_example
diff --git a/keyboards/rp2040_example/keymaps/adc/rules.mk b/keyboards/rp2040_example/keymaps/adc/rules.mk
new file mode 100644
index 0000000000..9ab0f66996
--- /dev/null
+++ b/keyboards/rp2040_example/keymaps/adc/rules.mk
@@ -0,0 +1,2 @@
+
+SRC += analog.c
diff --git a/keyboards/rp2040_example/keymaps/default/keymap.c b/keyboards/rp2040_example/keymaps/default/keymap.c
new file mode 100644
index 0000000000..eda75e2ed0
--- /dev/null
+++ b/keyboards/rp2040_example/keymaps/default/keymap.c
@@ -0,0 +1,62 @@
+/* Copyright 2021 sekigon-gonnoc
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#include QMK_KEYBOARD_H
+
+// Defines names for use in layer keycodes and the keymap
+enum layer_names {
+ _BASE,
+ _FN
+};
+
+// Defines the keycodes used by our macros in process_record_user
+enum custom_keycodes {
+ QMKBEST = SAFE_RANGE,
+ QMKURL
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* Base */
+ [_BASE] = LAYOUT(
+ KC_A, KC_1, MO(_FN),
+ KC_TAB, KC_SPC
+ ),
+ [_FN] = LAYOUT(
+ QMKBEST, QMKURL, _______,
+ RESET, XXXXXXX
+ )
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case QMKBEST:
+ if (record->event.pressed) {
+ // when keycode QMKBEST is pressed
+ SEND_STRING("QMK is the best thing ever!");
+ } else {
+ // when keycode QMKBEST is released
+ }
+ break;
+ case QMKURL:
+ if (record->event.pressed) {
+ // when keycode QMKURL is pressed
+ SEND_STRING("https://qmk.fm/\n");
+ } else {
+ // when keycode QMKURL is released
+ }
+ break;
+ }
+ return true;
+}
diff --git a/keyboards/rp2040_example/keymaps/default/readme.md b/keyboards/rp2040_example/keymaps/default/readme.md
new file mode 100644
index 0000000000..7f32c76f01
--- /dev/null
+++ b/keyboards/rp2040_example/keymaps/default/readme.md
@@ -0,0 +1 @@
+# The default keymap for rp2040_example
diff --git a/keyboards/rp2040_example/keymaps/rgblight/config.h b/keyboards/rp2040_example/keymaps/rgblight/config.h
new file mode 100644
index 0000000000..af26ccf9a3
--- /dev/null
+++ b/keyboards/rp2040_example/keymaps/rgblight/config.h
@@ -0,0 +1,6 @@
+
+#pragma once
+
+#define RGB_DI_PIN 5
+#define RGBLED_NUM 1
+#define RGBLIGHT_ANIMATIONS
diff --git a/keyboards/rp2040_example/keymaps/rgblight/keymap.c b/keyboards/rp2040_example/keymaps/rgblight/keymap.c
new file mode 100644
index 0000000000..1bcae85fc9
--- /dev/null
+++ b/keyboards/rp2040_example/keymaps/rgblight/keymap.c
@@ -0,0 +1,71 @@
+/* Copyright 2021 sekigon-gonnoc
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#include QMK_KEYBOARD_H
+#include "pico_eeprom.h"
+
+// Defines names for use in layer keycodes and the keymap
+enum layer_names {
+ _BASE,
+ _FN
+};
+
+// Defines the keycodes used by our macros in process_record_user
+enum custom_keycodes {
+ QMKBEST = SAFE_RANGE,
+ QMKURL
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* Base */
+ [_BASE] = LAYOUT(
+ KC_A, KC_1, MO(_FN),
+ KC_TAB, KC_SPC
+ ),
+ [_FN] = LAYOUT(
+ QMKBEST, QMKURL, _______,
+ RESET, XXXXXXX
+ )
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case QMKBEST:
+ if (record->event.pressed) {
+ // when keycode QMKBEST is pressed
+ SEND_STRING("QMK is the best thing ever!");
+ } else {
+ // when keycode QMKBEST is released
+ }
+ break;
+ case QMKURL:
+ if (record->event.pressed) {
+ // when keycode QMKURL is pressed
+ SEND_STRING("https://qmk.fm/\n");
+ } else {
+ // when keycode QMKURL is released
+ }
+ break;
+ }
+ return true;
+}
+
+#include "rgblight.h"
+
+void keyboard_post_init_user(void) {
+ rgblight_enable();
+ rgblight_mode_noeeprom(35);
+}
+
diff --git a/keyboards/rp2040_example/keymaps/rgblight/readme.md b/keyboards/rp2040_example/keymaps/rgblight/readme.md
new file mode 100644
index 0000000000..7f32c76f01
--- /dev/null
+++ b/keyboards/rp2040_example/keymaps/rgblight/readme.md
@@ -0,0 +1 @@
+# The default keymap for rp2040_example
diff --git a/keyboards/rp2040_example/keymaps/rgblight/rules.mk b/keyboards/rp2040_example/keymaps/rgblight/rules.mk
new file mode 100644
index 0000000000..74dc0328d5
--- /dev/null
+++ b/keyboards/rp2040_example/keymaps/rgblight/rules.mk
@@ -0,0 +1,2 @@
+
+RGBLIGHT_ENABLE = yes
diff --git a/keyboards/rp2040_example/readme.md b/keyboards/rp2040_example/readme.md
new file mode 100644
index 0000000000..3b26c5235d
--- /dev/null
+++ b/keyboards/rp2040_example/readme.md
@@ -0,0 +1,24 @@
+# rp2040_example
+
+* Sample implementation for RP2040.
+
+* Keyboard Maintainer: [sekigon-gonnoc](https://github.com/sekigon-gonnoc)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make rp2040_example:default
+
+Flashing example for this keyboard by `picotool`:
+
+ make rp2040_example:default:flash
+
+Convert firmware into uf2 format:
+
+ make rp2040_example:default:uf2
+
+To replace Pro Micro to Pico Micro, use `CTPIM=yes` (`CONVERT_TO_PICO_MICRO=yes`):
+
+ make ::