Kiibohd bootloader, take 2 (#10129)

This commit is contained in:
Ryan 2020-08-25 18:58:00 +10:00 committed by James Young
parent fa6cf85727
commit b89b2030af
12 changed files with 28 additions and 74 deletions

View file

@ -27,6 +27,7 @@
# qmk-dfu QMK DFU (LUFA + blinkenlight) # qmk-dfu QMK DFU (LUFA + blinkenlight)
# bootloadHID HIDBootFlash compatible (ATmega32A) # bootloadHID HIDBootFlash compatible (ATmega32A)
# USBasp USBaspLoader (ATmega328P) # USBasp USBaspLoader (ATmega328P)
# kiibohd Input:Club Kiibohd bootloader (only used on their boards)
# #
# BOOTLOADER_SIZE can still be defined manually, but it's recommended # BOOTLOADER_SIZE can still be defined manually, but it's recommended
# you add any possible configuration to this list # you add any possible configuration to this list
@ -89,7 +90,19 @@ ifeq ($(strip $(BOOTLOADER)), lufa-ms)
BOOTLOADER_SIZE = 6144 BOOTLOADER_SIZE = 6144
FIRMWARE_FORMAT = bin FIRMWARE_FORMAT = bin
endif endif
ifdef BOOTLOADER_SIZE ifdef BOOTLOADER_SIZE
OPT_DEFS += -DBOOTLOADER_SIZE=$(strip $(BOOTLOADER_SIZE)) OPT_DEFS += -DBOOTLOADER_SIZE=$(strip $(BOOTLOADER_SIZE))
endif endif
ifeq ($(strip $(BOOTLOADER)), kiibohd)
OPT_DEFS += -DBOOTLOADER_KIIBOHD
ifeq ($(strip $(MCU_ORIG)), MK20DX128)
MCU_LDSCRIPT = MK20DX128BLDR4
endif
ifeq ($(strip $(MCU_ORIG)), MK20DX256)
MCU_LDSCRIPT = MK20DX256BLDR8
endif
DFU_ARGS = -d 1C11:B007
DFU_SUFFIX_ARGS = -v 1C11 -p B007
endif

View file

@ -1 +0,0 @@
#define KIIBOHD_BOOTLOADER

View file

@ -1,27 +1,12 @@
# MCU name # MCU name
MCU = MK20DX256 MCU = MK20DX256
# Linker script to use # Bootloader selection
# - it should exist either in <chibios>/os/common/ports/ARMCMx/compilers/GCC/ld/ BOOTLOADER = kiibohd
# or <this_dir>/ld/
# - NOTE: a custom ld script is needed for EEPROM on Teensy LC
# - LDSCRIPT =
# - MKL26Z64 for Teensy LC
# - MK20DX128 for Teensy 3.0
# - MK20DX256 for Teensy 3.1 and 3.2
# - MK20DX128BLDR4 for Infinity 60% with Kiibohd bootloader
# - MK20DX256BLDR8 for Infinity ErgoDox with Kiibohd bootloader
MCU_LDSCRIPT = MK20DX256BLDR8
BOOTLOADER = dfu
# Build Options # Build Options
# comment out to disable the options. # comment out to disable the options.
# #
DFU_ARGS = -d 1c11:b007
DFU_SUFFIX_ARGS = -p b007 -v 1c11
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration
MOUSEKEY_ENABLE = yes # Mouse keys MOUSEKEY_ENABLE = yes # Mouse keys
EXTRAKEY_ENABLE = yes # Audio control and System control EXTRAKEY_ENABLE = yes # Audio control and System control

View file

@ -1 +0,0 @@
#define KIIBOHD_BOOTLOADER

View file

@ -1,16 +1,8 @@
# MCU name # MCU name
MCU = MK20DX128 MCU = MK20DX128
# Linker script to use # Bootloader selection
# - it should exist either in <chibios>/os/common/ports/ARMCMx/compilers/GCC/ld/ BOOTLOADER = kiibohd
# or <this_dir>/ld/
# - NOTE: a custom ld script is needed for EEPROM on Teensy LC
# - LDSCRIPT =
# - MKL26Z64 for Teensy LC
# - MK20DX128 for Teensy 3.0
# - MK20DX256 for Teensy 3.1 and 3.2
# - MK20DX128BLDR4 for Infinity with Kiibohd bootloader
MCU_LDSCRIPT = MK20DX128BLDR4
# Board: it should exist either in <chibios>/os/hal/boards/ # Board: it should exist either in <chibios>/os/hal/boards/
# or <this_dir>/boards # or <this_dir>/boards
@ -21,15 +13,9 @@ MCU_LDSCRIPT = MK20DX128BLDR4
# - MCHCK_K20 for Infinity KB # - MCHCK_K20 for Infinity KB
BOARD = MCHCK_K20 BOARD = MCHCK_K20
BOOTLOADER = dfu
# Build Options # Build Options
# comment out to disable the options. # comment out to disable the options.
# #
DFU_ARGS = -d 1c11:b007
DFU_SUFFIX_ARGS = -p b007 -v 1c11
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration
## (Note that for BOOTMAGIC on Teensy LC you have to use a custom .ld script.) ## (Note that for BOOTMAGIC on Teensy LC you have to use a custom .ld script.)
MOUSEKEY_ENABLE = yes # Mouse keys MOUSEKEY_ENABLE = yes # Mouse keys

View file

@ -1 +0,0 @@
#define KIIBOHD_BOOTLOADER

View file

@ -1,17 +1,8 @@
# MCU name # MCU name
MCU = MK20DX256 MCU = MK20DX256
# Linker script to use # Bootloader selection
# - it should exist either in <chibios>/os/common/ports/ARMCMx/compilers/GCC/ld/ BOOTLOADER = kiibohd
# or <this_dir>/ld/
# - NOTE: a custom ld script is needed for EEPROM on Teensy LC
# - LDSCRIPT =
# - MKL26Z64 for Teensy LC
# - MK20DX128 for Teensy 3.0
# - MK20DX256 for Teensy 3.1 and 3.2
# - MK20DX128BLDR4 for Infinity with Kiibohd bootloader
# - MK20DX256BLDR8 for Infinity ErgoDox with Kiibohd bootloader
MCU_LDSCRIPT = MK20DX256BLDR8
# Board: it should exist either in <chibios>/os/hal/boards/ # Board: it should exist either in <chibios>/os/hal/boards/
# or <this_dir>/boards # or <this_dir>/boards
@ -19,11 +10,6 @@ MCU_LDSCRIPT = MK20DX256BLDR8
# hack to ensure the watchdog has started before trying to disable it. # hack to ensure the watchdog has started before trying to disable it.
BOARD = IC_TEENSY_3_1 BOARD = IC_TEENSY_3_1
DFU_ARGS = -d 1c11:b007
DFU_SUFFIX_ARGS = -p b007 -v 1c11
BOOTLOADER = dfu
# Build Options # Build Options
# comment out to disable the options. # comment out to disable the options.
# #

View file

@ -1 +0,0 @@
#define KIIBOHD_BOOTLOADER

View file

@ -1,17 +1,8 @@
# MCU name # MCU name
MCU = MK20DX256 MCU = MK20DX256
# Linker script to use # Bootloader selection
# - it should exist either in <chibios>/os/common/ports/ARMCMx/compilers/GCC/ld/ BOOTLOADER = kiibohd
# or <this_dir>/ld/
# - NOTE: a custom ld script is needed for EEPROM on Teensy LC
# - LDSCRIPT =
# - MKL26Z64 for Teensy LC
# - MK20DX128 for Teensy 3.0
# - MK20DX256 for Teensy 3.1 and 3.2
# - MK20DX128BLDR4 for Infinity with Kiibohd bootloader
# - MK20DX256BLDR8 for Infinity ErgoDox with Kiibohd bootloader
MCU_LDSCRIPT = MK20DX256BLDR8
# Board: it should exist either in <chibios>/os/hal/boards/ # Board: it should exist either in <chibios>/os/hal/boards/
# or <this_dir>/boards # or <this_dir>/boards
@ -22,11 +13,6 @@ MCU_LDSCRIPT = MK20DX256BLDR8
# - MCHCK_K20 for Infinity KB # - MCHCK_K20 for Infinity KB
BOARD = IC_TEENSY_3_1 BOARD = IC_TEENSY_3_1
DFU_ARGS = -d 1c11:b007
DFU_SUFFIX_ARGS = -p b007 -v 1c11
BOOTLOADER = dfu
# Build Options # Build Options
# comment out to disable the options. # comment out to disable the options.
# #

View file

@ -1,3 +1,5 @@
MCU_ORIG := $(MCU)
ifneq ($(findstring MKL26Z64, $(MCU)),) ifneq ($(findstring MKL26Z64, $(MCU)),)
# Cortex version # Cortex version
MCU = cortex-m0plus MCU = cortex-m0plus

View file

@ -386,7 +386,7 @@ bin: $(BUILD_DIR)/$(TARGET).bin sizeafter
flash: $(BUILD_DIR)/$(TARGET).bin cpfirmware sizeafter flash: $(BUILD_DIR)/$(TARGET).bin cpfirmware sizeafter
ifneq ($(strip $(PROGRAM_CMD)),) ifneq ($(strip $(PROGRAM_CMD)),)
$(PROGRAM_CMD) $(PROGRAM_CMD)
else ifeq ($(strip $(BOOTLOADER)),dfu) else ifeq ($(strip $(BOOTLOADER)),kiibohd)
$(call EXEC_DFU_UTIL) $(call EXEC_DFU_UTIL)
else ifeq ($(strip $(MCU_FAMILY)),KINETIS) else ifeq ($(strip $(MCU_FAMILY)),KINETIS)
$(call EXEC_TEENSY) $(call EXEC_TEENSY)

View file

@ -82,7 +82,7 @@ void enter_bootloader_mode_if_requested(void) {
#elif defined(KL2x) || defined(K20x) // STM32_BOOTLOADER_DUAL_BANK // STM32_BOOTLOADER_ADDRESS #elif defined(KL2x) || defined(K20x) // STM32_BOOTLOADER_DUAL_BANK // STM32_BOOTLOADER_ADDRESS
/* Kinetis */ /* Kinetis */
# if defined(KIIBOHD_BOOTLOADER) # if defined(BOOTLOADER_KIIBOHD)
/* Kiibohd Bootloader (MCHCK and Infinity KB) */ /* Kiibohd Bootloader (MCHCK and Infinity KB) */
# define SCB_AIRCR_VECTKEY_WRITEMAGIC 0x05FA0000 # define SCB_AIRCR_VECTKEY_WRITEMAGIC 0x05FA0000
const uint8_t sys_reset_to_loader_magic[] = "\xff\x00\x7fRESET TO LOADER\x7f\x00\xff"; const uint8_t sys_reset_to_loader_magic[] = "\xff\x00\x7fRESET TO LOADER\x7f\x00\xff";
@ -92,14 +92,14 @@ void bootloader_jump(void) {
SCB->AIRCR = SCB_AIRCR_VECTKEY_WRITEMAGIC | SCB_AIRCR_SYSRESETREQ_Msk; SCB->AIRCR = SCB_AIRCR_VECTKEY_WRITEMAGIC | SCB_AIRCR_SYSRESETREQ_Msk;
} }
# else /* defined(KIIBOHD_BOOTLOADER) */ # else /* defined(BOOTLOADER_KIIBOHD) */
/* Default for Kinetis - expecting an ARM Teensy */ /* Default for Kinetis - expecting an ARM Teensy */
# include "wait.h" # include "wait.h"
void bootloader_jump(void) { void bootloader_jump(void) {
wait_ms(100); wait_ms(100);
__BKPT(0); __BKPT(0);
} }
# endif /* defined(KIIBOHD_BOOTLOADER) */ # endif /* defined(BOOTLOADER_KIIBOHD) */
#else /* neither STM32 nor KINETIS */ #else /* neither STM32 nor KINETIS */
__attribute__((weak)) void bootloader_jump(void) {} __attribute__((weak)) void bootloader_jump(void) {}