From cf3c26533cadf4e6739dbc9117caad01df2fa5e3 Mon Sep 17 00:00:00 2001 From: Nick Brassel Date: Fri, 2 Dec 2022 21:55:28 +1100 Subject: [PATCH] Fixup EFL and F4's sector selection. (#19221) --- builddefs/common_features.mk | 4 +- .../handwired/onekey/blackpill_f401/chconf.h | 19 +----- .../handwired/onekey/blackpill_f401/config.h | 6 +- .../handwired/onekey/blackpill_f401/halconf.h | 7 +- .../handwired/onekey/blackpill_f401/mcuconf.h | 2 +- .../onekey/blackpill_f401_tinyuf2/chconf.h | 21 ++++++ .../onekey/blackpill_f401_tinyuf2/config.h | 31 +++++++++ .../onekey/blackpill_f401_tinyuf2/halconf.h | 25 +++++++ .../onekey/blackpill_f401_tinyuf2/info.json | 16 +++++ .../onekey/blackpill_f401_tinyuf2/mcuconf.h | 28 ++++++++ .../onekey/blackpill_f401_tinyuf2/readme.md | 9 +++ .../onekey/blackpill_f401_tinyuf2/rules.mk | 1 + .../handwired/onekey/blackpill_f411/chconf.h | 19 +----- .../handwired/onekey/blackpill_f411/config.h | 2 +- .../handwired/onekey/blackpill_f411/halconf.h | 7 +- .../handwired/onekey/blackpill_f411/mcuconf.h | 2 +- .../onekey/blackpill_f411_tinyuf2/chconf.h | 4 +- .../onekey/blackpill_f411_tinyuf2/config.h | 4 ++ .../onekey/keymaps/wear_leveling/config.h | 6 ++ .../onekey/keymaps/wear_leveling/keymap.c | 65 +++++++++++++++++++ .../onekey/keymaps/wear_leveling/rules.mk | 1 + .../BLACKPILL_STM32_F401/configs/config.h | 14 +++- .../BLACKPILL_STM32_F411/configs/config.h | 14 +++- .../GENERIC_STM32_F401XC/configs/config.h | 10 +++ .../GENERIC_STM32_F411XE/configs/config.h | 10 +++ .../drivers/wear_leveling/wear_leveling_efl.c | 30 ++++----- 26 files changed, 281 insertions(+), 76 deletions(-) create mode 100644 keyboards/handwired/onekey/blackpill_f401_tinyuf2/chconf.h create mode 100755 keyboards/handwired/onekey/blackpill_f401_tinyuf2/config.h create mode 100644 keyboards/handwired/onekey/blackpill_f401_tinyuf2/halconf.h create mode 100644 keyboards/handwired/onekey/blackpill_f401_tinyuf2/info.json create mode 100755 keyboards/handwired/onekey/blackpill_f401_tinyuf2/mcuconf.h create mode 100755 keyboards/handwired/onekey/blackpill_f401_tinyuf2/readme.md create mode 100755 keyboards/handwired/onekey/blackpill_f401_tinyuf2/rules.mk create mode 100644 keyboards/handwired/onekey/keymaps/wear_leveling/config.h create mode 100644 keyboards/handwired/onekey/keymaps/wear_leveling/keymap.c create mode 100644 keyboards/handwired/onekey/keymaps/wear_leveling/rules.mk diff --git a/builddefs/common_features.mk b/builddefs/common_features.mk index 63814bbfaeb..d9130b53380 100644 --- a/builddefs/common_features.mk +++ b/builddefs/common_features.mk @@ -230,7 +230,7 @@ else # Wear-leveling EEPROM implementation, backed by MCU flash OPT_DEFS += -DEEPROM_DRIVER -DEEPROM_WEAR_LEVELING SRC += eeprom_driver.c eeprom_wear_leveling.c - WEAR_LEVELING_DRIVER = embedded_flash + WEAR_LEVELING_DRIVER ?= embedded_flash else ifneq ($(filter $(MCU_SERIES),STM32L0xx STM32L1xx),) # True EEPROM on STM32L0xx, L1xx OPT_DEFS += -DEEPROM_DRIVER -DEEPROM_STM32_L0_L1 @@ -239,7 +239,7 @@ else # Wear-leveling EEPROM implementation, backed by RP2040 flash OPT_DEFS += -DEEPROM_DRIVER -DEEPROM_WEAR_LEVELING SRC += eeprom_driver.c eeprom_wear_leveling.c - WEAR_LEVELING_DRIVER = rp2040_flash + WEAR_LEVELING_DRIVER ?= rp2040_flash else ifneq ($(filter $(MCU_SERIES),KL2x K20x),) # Teensy EEPROM implementations OPT_DEFS += -DEEPROM_KINETIS_FLEXRAM diff --git a/keyboards/handwired/onekey/blackpill_f401/chconf.h b/keyboards/handwired/onekey/blackpill_f401/chconf.h index 04ff4362aea..41ae8d12578 100644 --- a/keyboards/handwired/onekey/blackpill_f401/chconf.h +++ b/keyboards/handwired/onekey/blackpill_f401/chconf.h @@ -13,26 +13,9 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - -/* - * This file was auto-generated by: - * `qmk chibios-confmigrate -i keyboards/handwired/onekey/blackpill_f401/chconf.h -r platforms/chibios/common/configs/chconf.h` - */ - + #pragma once #define CH_CFG_ST_FREQUENCY 10000 -#define CH_CFG_FACTORY_OBJECTS_REGISTRY TRUE - -#define CH_CFG_FACTORY_GENERIC_BUFFERS TRUE - -#define CH_CFG_FACTORY_SEMAPHORES TRUE - -#define CH_CFG_FACTORY_MAILBOXES TRUE - -#define CH_CFG_FACTORY_OBJ_FIFOS TRUE - -#define CH_CFG_FACTORY_PIPES TRUE - #include_next diff --git a/keyboards/handwired/onekey/blackpill_f401/config.h b/keyboards/handwired/onekey/blackpill_f401/config.h index 05f3f077639..bb6219f1b3f 100644 --- a/keyboards/handwired/onekey/blackpill_f401/config.h +++ b/keyboards/handwired/onekey/blackpill_f401/config.h @@ -1,4 +1,4 @@ -/* Copyright 2019 +/* Copyright 2021 QMK * * 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 @@ -25,3 +25,7 @@ #define ADC_PIN A0 #define RGB_CI_PIN A2 + +#define SOLENOID_PIN B12 +#define SOLENOID_PINS { B12, B13, B14, B15 } +#define SOLENOID_PINS_ACTIVE_STATE { high, high, low } diff --git a/keyboards/handwired/onekey/blackpill_f401/halconf.h b/keyboards/handwired/onekey/blackpill_f401/halconf.h index 4982bb5b49a..00aca25c36a 100644 --- a/keyboards/handwired/onekey/blackpill_f401/halconf.h +++ b/keyboards/handwired/onekey/blackpill_f401/halconf.h @@ -1,4 +1,4 @@ -/* Copyright 2020 QMK +/* Copyright 2021 QMK * * 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 @@ -14,11 +14,6 @@ * along with this program. If not, see . */ -/* - * This file was auto-generated by: - * `qmk chibios-confmigrate -i keyboards/handwired/onekey/blackpill_f401/halconf.h -r platforms/chibios/common/configs/halconf.h` - */ - #pragma once #define HAL_USE_ADC TRUE diff --git a/keyboards/handwired/onekey/blackpill_f401/mcuconf.h b/keyboards/handwired/onekey/blackpill_f401/mcuconf.h index 1aa0fe4ce7d..fcb7d84f969 100644 --- a/keyboards/handwired/onekey/blackpill_f401/mcuconf.h +++ b/keyboards/handwired/onekey/blackpill_f401/mcuconf.h @@ -1,4 +1,4 @@ -/* Copyright 2020 Nick Brassel (tzarc) +/* Copyright 2021 QMK * * 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 diff --git a/keyboards/handwired/onekey/blackpill_f401_tinyuf2/chconf.h b/keyboards/handwired/onekey/blackpill_f401_tinyuf2/chconf.h new file mode 100644 index 00000000000..41ae8d12578 --- /dev/null +++ b/keyboards/handwired/onekey/blackpill_f401_tinyuf2/chconf.h @@ -0,0 +1,21 @@ +/* Copyright 2020 QMK + * + * 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 + +#define CH_CFG_ST_FREQUENCY 10000 + +#include_next diff --git a/keyboards/handwired/onekey/blackpill_f401_tinyuf2/config.h b/keyboards/handwired/onekey/blackpill_f401_tinyuf2/config.h new file mode 100755 index 00000000000..bb6219f1b3f --- /dev/null +++ b/keyboards/handwired/onekey/blackpill_f401_tinyuf2/config.h @@ -0,0 +1,31 @@ +/* Copyright 2021 QMK + * + * 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" + +#define BACKLIGHT_PWM_DRIVER PWMD5 +#define BACKLIGHT_PWM_CHANNEL 1 +#define BACKLIGHT_PAL_MODE 2 + +#define ADC_PIN A0 + +#define RGB_CI_PIN A2 + +#define SOLENOID_PIN B12 +#define SOLENOID_PINS { B12, B13, B14, B15 } +#define SOLENOID_PINS_ACTIVE_STATE { high, high, low } diff --git a/keyboards/handwired/onekey/blackpill_f401_tinyuf2/halconf.h b/keyboards/handwired/onekey/blackpill_f401_tinyuf2/halconf.h new file mode 100644 index 00000000000..00aca25c36a --- /dev/null +++ b/keyboards/handwired/onekey/blackpill_f401_tinyuf2/halconf.h @@ -0,0 +1,25 @@ +/* Copyright 2021 QMK + * + * 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 + +#define HAL_USE_ADC TRUE + +#define HAL_USE_I2C TRUE + +#define HAL_USE_PWM TRUE + +#include_next diff --git a/keyboards/handwired/onekey/blackpill_f401_tinyuf2/info.json b/keyboards/handwired/onekey/blackpill_f401_tinyuf2/info.json new file mode 100644 index 00000000000..ada49d38491 --- /dev/null +++ b/keyboards/handwired/onekey/blackpill_f401_tinyuf2/info.json @@ -0,0 +1,16 @@ +{ + "keyboard_name": "Onekey Blackpill STM32F401 TinyUF2", + "processor": "STM32F401", + "bootloader": "tinyuf2", + "board": "BLACKPILL_STM32_F401", + "matrix_pins": { + "cols": ["B0"], + "rows": ["A7"] + }, + "backlight": { + "pin": "A0" + }, + "rgblight": { + "pin": "A1" + } +} diff --git a/keyboards/handwired/onekey/blackpill_f401_tinyuf2/mcuconf.h b/keyboards/handwired/onekey/blackpill_f401_tinyuf2/mcuconf.h new file mode 100755 index 00000000000..fcb7d84f969 --- /dev/null +++ b/keyboards/handwired/onekey/blackpill_f401_tinyuf2/mcuconf.h @@ -0,0 +1,28 @@ +/* Copyright 2021 QMK + * + * 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 3 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_next "mcuconf.h" + +#undef STM32_ADC_USE_ADC1 +#define STM32_ADC_USE_ADC1 TRUE + +#undef STM32_I2C_USE_I2C1 +#define STM32_I2C_USE_I2C1 TRUE + +#undef STM32_PWM_USE_TIM5 +#define STM32_PWM_USE_TIM5 TRUE diff --git a/keyboards/handwired/onekey/blackpill_f401_tinyuf2/readme.md b/keyboards/handwired/onekey/blackpill_f401_tinyuf2/readme.md new file mode 100755 index 00000000000..e7fcf450edd --- /dev/null +++ b/keyboards/handwired/onekey/blackpill_f401_tinyuf2/readme.md @@ -0,0 +1,9 @@ +# F401 Blackpill onekey + +* Supported Hardware: STM32F401CCU6 WeAct v1.3 + +To trigger keypress, short together pins *B0* and *A7*. + +This variant requires the TinyUF2 bootloader to be installed. This can be downloaded from the [tinyuf2 releases page](https://github.com/adafruit/tinyuf2/releases). The F401 blackpill binary works for both F401- and F411-based blackpill devices. + +Double-tap reset to enter bootloader mode. Copy the built uf2 file to the device by dragging the file to the new USB disk. diff --git a/keyboards/handwired/onekey/blackpill_f401_tinyuf2/rules.mk b/keyboards/handwired/onekey/blackpill_f401_tinyuf2/rules.mk new file mode 100755 index 00000000000..1071cf62ee3 --- /dev/null +++ b/keyboards/handwired/onekey/blackpill_f401_tinyuf2/rules.mk @@ -0,0 +1 @@ +KEYBOARD_SHARED_EP = yes diff --git a/keyboards/handwired/onekey/blackpill_f411/chconf.h b/keyboards/handwired/onekey/blackpill_f411/chconf.h index 8b55eaeef08..41ae8d12578 100644 --- a/keyboards/handwired/onekey/blackpill_f411/chconf.h +++ b/keyboards/handwired/onekey/blackpill_f411/chconf.h @@ -13,26 +13,9 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - -/* - * This file was auto-generated by: - * `qmk chibios-confmigrate -i keyboards/handwired/onekey/blackpill_f411/chconf.h -r platforms/chibios/common/configs/chconf.h` - */ - + #pragma once #define CH_CFG_ST_FREQUENCY 10000 -#define CH_CFG_FACTORY_OBJECTS_REGISTRY TRUE - -#define CH_CFG_FACTORY_GENERIC_BUFFERS TRUE - -#define CH_CFG_FACTORY_SEMAPHORES TRUE - -#define CH_CFG_FACTORY_MAILBOXES TRUE - -#define CH_CFG_FACTORY_OBJ_FIFOS TRUE - -#define CH_CFG_FACTORY_PIPES TRUE - #include_next diff --git a/keyboards/handwired/onekey/blackpill_f411/config.h b/keyboards/handwired/onekey/blackpill_f411/config.h index c890043b099..bb6219f1b3f 100644 --- a/keyboards/handwired/onekey/blackpill_f411/config.h +++ b/keyboards/handwired/onekey/blackpill_f411/config.h @@ -1,4 +1,4 @@ -/* Copyright 2019 +/* Copyright 2021 QMK * * 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 diff --git a/keyboards/handwired/onekey/blackpill_f411/halconf.h b/keyboards/handwired/onekey/blackpill_f411/halconf.h index 8225cc72088..00aca25c36a 100644 --- a/keyboards/handwired/onekey/blackpill_f411/halconf.h +++ b/keyboards/handwired/onekey/blackpill_f411/halconf.h @@ -1,4 +1,4 @@ -/* Copyright 2020 QMK +/* Copyright 2021 QMK * * 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 @@ -14,11 +14,6 @@ * along with this program. If not, see . */ -/* - * This file was auto-generated by: - * `qmk chibios-confmigrate -i keyboards/handwired/onekey/blackpill_f411/halconf.h -r platforms/chibios/common/configs/halconf.h` - */ - #pragma once #define HAL_USE_ADC TRUE diff --git a/keyboards/handwired/onekey/blackpill_f411/mcuconf.h b/keyboards/handwired/onekey/blackpill_f411/mcuconf.h index 1aa0fe4ce7d..fcb7d84f969 100644 --- a/keyboards/handwired/onekey/blackpill_f411/mcuconf.h +++ b/keyboards/handwired/onekey/blackpill_f411/mcuconf.h @@ -1,4 +1,4 @@ -/* Copyright 2020 Nick Brassel (tzarc) +/* Copyright 2021 QMK * * 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 diff --git a/keyboards/handwired/onekey/blackpill_f411_tinyuf2/chconf.h b/keyboards/handwired/onekey/blackpill_f411_tinyuf2/chconf.h index 3d9a3936388..41ae8d12578 100644 --- a/keyboards/handwired/onekey/blackpill_f411_tinyuf2/chconf.h +++ b/keyboards/handwired/onekey/blackpill_f411_tinyuf2/chconf.h @@ -1,4 +1,4 @@ -/* Copyright 2021 QMK +/* Copyright 2020 QMK * * 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 @@ -13,7 +13,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + #pragma once #define CH_CFG_ST_FREQUENCY 10000 diff --git a/keyboards/handwired/onekey/blackpill_f411_tinyuf2/config.h b/keyboards/handwired/onekey/blackpill_f411_tinyuf2/config.h index 2b60320fc10..bb6219f1b3f 100755 --- a/keyboards/handwired/onekey/blackpill_f411_tinyuf2/config.h +++ b/keyboards/handwired/onekey/blackpill_f411_tinyuf2/config.h @@ -25,3 +25,7 @@ #define ADC_PIN A0 #define RGB_CI_PIN A2 + +#define SOLENOID_PIN B12 +#define SOLENOID_PINS { B12, B13, B14, B15 } +#define SOLENOID_PINS_ACTIVE_STATE { high, high, low } diff --git a/keyboards/handwired/onekey/keymaps/wear_leveling/config.h b/keyboards/handwired/onekey/keymaps/wear_leveling/config.h new file mode 100644 index 00000000000..642b442da3f --- /dev/null +++ b/keyboards/handwired/onekey/keymaps/wear_leveling/config.h @@ -0,0 +1,6 @@ +// Copyright 2018-2022 Nick Brassel (@tzarc) +// SPDX-License-Identifier: GPL-3.0-or-later +#pragma once + +#define DEBUG_EEPROM_OUTPUT +#define WEAR_LEVELING_DEBUG_OUTPUT diff --git a/keyboards/handwired/onekey/keymaps/wear_leveling/keymap.c b/keyboards/handwired/onekey/keymaps/wear_leveling/keymap.c new file mode 100644 index 00000000000..dc40ca15806 --- /dev/null +++ b/keyboards/handwired/onekey/keymaps/wear_leveling/keymap.c @@ -0,0 +1,65 @@ +// Copyright 2018-2022 Nick Brassel (@tzarc) +// SPDX-License-Identifier: GPL-3.0-or-later +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + LAYOUT_ortho_1x1(QK_BOOT) +}; + +#ifdef DEBUG_EEPROM_OUTPUT + +# ifdef WEAR_LEVELING_ENABLE +# include "wear_leveling.h" +# endif // WEAR_LEVELING_ENABLE + +uint8_t prng(void) { + static uint8_t s = 0xAA, a = 0; + s ^= s << 3; + s ^= s >> 5; + s ^= a++ >> 2; + return s; +} + +void keyboard_post_init_user(void) { + debug_enable = true; + debug_matrix = true; + debug_keyboard = true; +} + +void matrix_scan_user(void) { + static uint32_t last_eeprom_access = 0; + uint32_t now = timer_read32(); + if (now - last_eeprom_access > 5000) { + dprint("reading eeprom\n"); + last_eeprom_access = now; + + union { + uint8_t bytes[4]; + uint32_t raw; + } tmp; + extern uint8_t prng(void); + tmp.bytes[0] = prng(); + tmp.bytes[1] = prng(); + tmp.bytes[2] = prng(); + tmp.bytes[3] = prng(); + + eeconfig_update_user(tmp.raw); + uint32_t value = eeconfig_read_user(); + if (value != tmp.raw) { + dprint("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n"); + dprint("!! EEPROM readback mismatch!\n"); + dprint("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n"); + } + } + +# ifdef WEAR_LEVELING_ENABLE + static uint32_t last_wear_leveling_init = 0; + if (now - last_wear_leveling_init > 30000) { + dprint("init'ing wear-leveling\n"); + last_wear_leveling_init = now; + wear_leveling_init(); + } +# endif // WEAR_LEVELING_ENABLE +} + +#endif // DEBUG_EEPROM_OUTPUT diff --git a/keyboards/handwired/onekey/keymaps/wear_leveling/rules.mk b/keyboards/handwired/onekey/keymaps/wear_leveling/rules.mk new file mode 100644 index 00000000000..15b7f725b26 --- /dev/null +++ b/keyboards/handwired/onekey/keymaps/wear_leveling/rules.mk @@ -0,0 +1 @@ +CONSOLE_ENABLE = yes diff --git a/platforms/chibios/boards/BLACKPILL_STM32_F401/configs/config.h b/platforms/chibios/boards/BLACKPILL_STM32_F401/configs/config.h index e181422eba2..6d132ea6f3a 100644 --- a/platforms/chibios/boards/BLACKPILL_STM32_F401/configs/config.h +++ b/platforms/chibios/boards/BLACKPILL_STM32_F401/configs/config.h @@ -19,12 +19,22 @@ #ifndef STM32_LSECLK # define STM32_LSECLK 32768U -#endif // STM32_LSECLK +#endif // STM32_LSECLK #ifndef STM32_HSECLK # define STM32_HSECLK 25000000U -#endif // STM32_HSECLK +#endif // STM32_HSECLK #ifndef EARLY_INIT_PERFORM_BOOTLOADER_JUMP # define EARLY_INIT_PERFORM_BOOTLOADER_JUMP TRUE #endif + +#ifdef WEAR_LEVELING_EMBEDDED_FLASH +# ifndef WEAR_LEVELING_EFL_FIRST_SECTOR +# ifdef BOOTLOADER_TINYUF2 +# define WEAR_LEVELING_EFL_FIRST_SECTOR 3 +# else +# define WEAR_LEVELING_EFL_FIRST_SECTOR 1 +# endif +# endif +#endif diff --git a/platforms/chibios/boards/BLACKPILL_STM32_F411/configs/config.h b/platforms/chibios/boards/BLACKPILL_STM32_F411/configs/config.h index e181422eba2..6d132ea6f3a 100644 --- a/platforms/chibios/boards/BLACKPILL_STM32_F411/configs/config.h +++ b/platforms/chibios/boards/BLACKPILL_STM32_F411/configs/config.h @@ -19,12 +19,22 @@ #ifndef STM32_LSECLK # define STM32_LSECLK 32768U -#endif // STM32_LSECLK +#endif // STM32_LSECLK #ifndef STM32_HSECLK # define STM32_HSECLK 25000000U -#endif // STM32_HSECLK +#endif // STM32_HSECLK #ifndef EARLY_INIT_PERFORM_BOOTLOADER_JUMP # define EARLY_INIT_PERFORM_BOOTLOADER_JUMP TRUE #endif + +#ifdef WEAR_LEVELING_EMBEDDED_FLASH +# ifndef WEAR_LEVELING_EFL_FIRST_SECTOR +# ifdef BOOTLOADER_TINYUF2 +# define WEAR_LEVELING_EFL_FIRST_SECTOR 3 +# else +# define WEAR_LEVELING_EFL_FIRST_SECTOR 1 +# endif +# endif +#endif diff --git a/platforms/chibios/boards/GENERIC_STM32_F401XC/configs/config.h b/platforms/chibios/boards/GENERIC_STM32_F401XC/configs/config.h index e06ca0b7250..98653110184 100644 --- a/platforms/chibios/boards/GENERIC_STM32_F401XC/configs/config.h +++ b/platforms/chibios/boards/GENERIC_STM32_F401XC/configs/config.h @@ -20,3 +20,13 @@ #ifndef EARLY_INIT_PERFORM_BOOTLOADER_JUMP # define EARLY_INIT_PERFORM_BOOTLOADER_JUMP TRUE #endif + +#ifdef WEAR_LEVELING_EMBEDDED_FLASH +# ifndef WEAR_LEVELING_EFL_FIRST_SECTOR +# ifdef BOOTLOADER_TINYUF2 +# define WEAR_LEVELING_EFL_FIRST_SECTOR 3 +# else +# define WEAR_LEVELING_EFL_FIRST_SECTOR 1 +# endif +# endif +#endif diff --git a/platforms/chibios/boards/GENERIC_STM32_F411XE/configs/config.h b/platforms/chibios/boards/GENERIC_STM32_F411XE/configs/config.h index e06ca0b7250..98653110184 100644 --- a/platforms/chibios/boards/GENERIC_STM32_F411XE/configs/config.h +++ b/platforms/chibios/boards/GENERIC_STM32_F411XE/configs/config.h @@ -20,3 +20,13 @@ #ifndef EARLY_INIT_PERFORM_BOOTLOADER_JUMP # define EARLY_INIT_PERFORM_BOOTLOADER_JUMP TRUE #endif + +#ifdef WEAR_LEVELING_EMBEDDED_FLASH +# ifndef WEAR_LEVELING_EFL_FIRST_SECTOR +# ifdef BOOTLOADER_TINYUF2 +# define WEAR_LEVELING_EFL_FIRST_SECTOR 3 +# else +# define WEAR_LEVELING_EFL_FIRST_SECTOR 1 +# endif +# endif +#endif diff --git a/platforms/chibios/drivers/wear_leveling/wear_leveling_efl.c b/platforms/chibios/drivers/wear_leveling/wear_leveling_efl.c index cdd1e26a7d9..3e4f5ffb897 100644 --- a/platforms/chibios/drivers/wear_leveling/wear_leveling_efl.c +++ b/platforms/chibios/drivers/wear_leveling/wear_leveling_efl.c @@ -17,27 +17,25 @@ static flash_sector_t first_sector = UINT16_MAX; static flash_sector_t sector_count = UINT16_MAX; static BaseFlash * flash; -#ifndef WEAR_LEVELING_EFL_FIRST_SECTOR // "Automatic" detection of the flash size -- ideally ChibiOS would have this already, but alas, it doesn't. static inline uint32_t detect_flash_size(void) { -# if defined(WEAR_LEVELING_EFL_FLASH_SIZE) +#if defined(WEAR_LEVELING_EFL_FLASH_SIZE) return WEAR_LEVELING_EFL_FLASH_SIZE; -# elif defined(FLASH_BANK_SIZE) +#elif defined(FLASH_BANK_SIZE) return FLASH_BANK_SIZE; -# elif defined(FLASH_SIZE) +#elif defined(FLASH_SIZE) return FLASH_SIZE; -# elif defined(FLASHSIZE_BASE) -# if defined(QMK_MCU_SERIES_STM32F0XX) || defined(QMK_MCU_SERIES_STM32F1XX) || defined(QMK_MCU_SERIES_STM32F3XX) || defined(QMK_MCU_SERIES_STM32F4XX) || defined(QMK_MCU_SERIES_STM32G4XX) || defined(QMK_MCU_SERIES_STM32L0XX) || defined(QMK_MCU_SERIES_STM32L4XX) || defined(QMK_MCU_SERIES_GD32VF103) +#elif defined(FLASHSIZE_BASE) +# if defined(QMK_MCU_SERIES_STM32F0XX) || defined(QMK_MCU_SERIES_STM32F1XX) || defined(QMK_MCU_SERIES_STM32F3XX) || defined(QMK_MCU_SERIES_STM32F4XX) || defined(QMK_MCU_SERIES_STM32G4XX) || defined(QMK_MCU_SERIES_STM32L0XX) || defined(QMK_MCU_SERIES_STM32L4XX) || defined(QMK_MCU_SERIES_GD32VF103) return ((*(uint32_t *)FLASHSIZE_BASE) & 0xFFFFU) << 10U; // this register has the flash size in kB, so we convert it to bytes -# elif defined(QMK_MCU_SERIES_STM32L1XX) -# error This MCU family has an uncommon flash size register definition and has not been implemented. Perhaps try using the true EEPROM on the MCU instead? -# endif -# else -# error Unknown flash size definition. - return 0; +# elif defined(QMK_MCU_SERIES_STM32L1XX) +# error This MCU family has an uncommon flash size register definition and has not been implemented. Perhaps try using the true EEPROM on the MCU instead? # endif +#else +# error Unknown flash size definition. + return 0; +#endif } -#endif // WEAR_LEVELING_EFL_FIRST_SECTOR bool backing_store_init(void) { bs_dprintf("Init\n"); @@ -46,8 +44,9 @@ bool backing_store_init(void) { // Need to re-lock the EFL, as if we've just had the bootloader executing it'll already be unlocked. backing_store_lock(); - const flash_descriptor_t *desc = flashGetDescriptor(flash); - uint32_t counter = 0; + const flash_descriptor_t *desc = flashGetDescriptor(flash); + uint32_t counter = 0; + uint32_t flash_size = detect_flash_size(); #if defined(WEAR_LEVELING_EFL_FIRST_SECTOR) @@ -68,7 +67,6 @@ bool backing_store_init(void) { #else // defined(WEAR_LEVELING_EFL_FIRST_SECTOR) // Work out how many sectors we want to use, working backwards from the end of the flash - uint32_t flash_size = detect_flash_size(); flash_sector_t last_sector = desc->sectors_count; for (flash_sector_t i = 0; i < desc->sectors_count; ++i) { first_sector = desc->sectors_count - i - 1;