Skip to content

Commit 0ae4a3d

Browse files
Serasidisfpistm
authored andcommitted
HID Bootloader v2.2 support (#540)
* HID Bootloader v2.2 support https://github.com/Serasidis/STM32_HID_Bootloader Signed-off-by: Vassilis Serasidis <[email protected]>
1 parent df4a54a commit 0ae4a3d

File tree

6 files changed

+61
-6
lines changed

6 files changed

+61
-6
lines changed

boards.txt

+13-1
Original file line numberDiff line numberDiff line change
@@ -680,6 +680,12 @@ GenF1.menu.upload_method.bmpMethod=BMP (Black Magic Probe)
680680
GenF1.menu.upload_method.bmpMethod.upload.protocol=gdb_bmp
681681
GenF1.menu.upload_method.bmpMethod.upload.tool=bmp_upload
682682

683+
GenF1.menu.upload_method.hidMethod=HID Bootloader 2.2
684+
GenF1.menu.upload_method.hidMethod.upload.protocol=hid22
685+
GenF1.menu.upload_method.hidMethod.upload.tool=hid_upload
686+
GenF1.menu.upload_method.hidMethod.build.flash_offset=0x800
687+
GenF1.menu.upload_method.hidMethod.build.bootloader_flags=-DBL_HID -DVECT_TAB_OFFSET={build.flash_offset}
688+
683689
GenF1.menu.upload_method.dfu2Method=Maple DFU Bootloader 2.0
684690
GenF1.menu.upload_method.dfu2Method.upload.protocol=maple
685691
GenF1.menu.upload_method.dfu2Method.upload.tool=maple_upload
@@ -704,7 +710,7 @@ GenF4.name=Generic STM32F4 series
704710
GenF4.build.vid=0x0483
705711
GenF4.build.core=arduino
706712
GenF4.build.board=GenF4
707-
GenF4.build.extra_flags=-D{build.product_line} {build.enable_usb} {build.xSerial}
713+
GenF4.build.extra_flags=-D{build.product_line} {build.enable_usb} {build.xSerial} {build.bootloader_flags}
708714
GenF4.build.mcu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard
709715
GenF4.build.series=STM32F4xx
710716
GenF4.build.cmsis_lib_gcc=arm_cortexM4l_math
@@ -785,6 +791,12 @@ GenF4.menu.upload_method.bmpMethod=BMP (Black Magic Probe)
785791
GenF4.menu.upload_method.bmpMethod.upload.protocol=gdb_bmp
786792
GenF4.menu.upload_method.bmpMethod.upload.tool=bmp_upload
787793

794+
GenF4.menu.upload_method.hidMethod=HID Bootloader 2.2
795+
GenF4.menu.upload_method.hidMethod.upload.protocol=hid22
796+
GenF4.menu.upload_method.hidMethod.upload.tool=hid_upload
797+
GenF4.menu.upload_method.hidMethod.build.flash_offset=0x4000
798+
GenF4.menu.upload_method.hidMethod.build.bootloader_flags=-DBL_HID -DVECT_TAB_OFFSET={build.flash_offset}
799+
788800
###############################
789801
# Sparky Flight Controllers
790802

cores/arduino/stm32/backup.h

+11
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,17 @@ extern "C" {
4646
#define RTC_BKP_VALUE 0x32F2
4747
#endif
4848

49+
#if defined (BL_HID)
50+
#if !defined(HID_MAGIC_NUMBER_BKP_INDEX)
51+
#define HID_MAGIC_NUMBER_BKP_INDEX LL_RTC_BKP_DR4
52+
#endif /* HID_MAGIC_NUMBER_BKP_INDEX */
53+
#if !defined(HID_OLD_MAGIC_NUMBER_BKP_INDEX) && defined(LL_RTC_BKP_DR10)
54+
#define HID_OLD_MAGIC_NUMBER_BKP_INDEX LL_RTC_BKP_DR10
55+
#endif /* HID_OLD_MAGIC_NUMBER_BKP_INDEX */
56+
#ifndef HID_MAGIC_NUMBER_BKP_VALUE
57+
#define HID_MAGIC_NUMBER_BKP_VALUE 0x424C
58+
#endif /* HID_MAGIC_NUMBER_BKP_VALUE */
59+
#endif /* BL_HID */
4960

5061
/* Exported functions ------------------------------------------------------- */
5162
static inline void resetBackupDomain(void)

cores/arduino/stm32/bootloader.c

+22
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
#include "bootloader.h"
22

33
#include "stm32_def.h"
4+
#include "backup.h"
45

56
#ifdef BL_LEGACY_LEAF
67
void dtr_togglingHook(uint8_t *buf, uint32_t *len)
@@ -15,3 +16,24 @@ void dtr_togglingHook(uint8_t *buf, uint32_t *len)
1516
}
1617
}
1718
#endif /* BL_LEGACY_LEAF */
19+
20+
#ifdef BL_HID
21+
void dtr_togglingHook(uint8_t *buf, uint32_t *len)
22+
{
23+
/**
24+
* Four byte is the magic pack "1EAF" that puts the MCU into bootloader.
25+
* Check if the incoming contains the string "1EAF".
26+
* If yes, put the MCU into the bootloader mode.
27+
*/
28+
if ((*len >= 4) && (buf[0] == '1') && (buf[1] == 'E') && (buf[2] == 'A') && (buf[3] == 'F')) {
29+
enableBackupDomain();
30+
/* New HID Bootloader (ver 2.2+) */
31+
setBackupRegister(HID_MAGIC_NUMBER_BKP_INDEX, HID_MAGIC_NUMBER_BKP_VALUE);
32+
#ifdef HID_OLD_MAGIC_NUMBER_BKP_INDEX
33+
/* Compatibility to the old HID Bootloader (ver <= 2.1) */
34+
setBackupRegister(HID_OLD_MAGIC_NUMBER_BKP_INDEX, HID_MAGIC_NUMBER_BKP_VALUE);
35+
#endif
36+
NVIC_SystemReset();
37+
}
38+
}
39+
#endif /* BL_HID */

cores/arduino/stm32/bootloader.h

+2-2
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,10 @@
22
#define _BOOTLOADER_H_
33

44
/* Ensure DTR_TOGGLING_SEQ enabled */
5-
#ifdef BL_LEGACY_LEAF
5+
#if defined(BL_LEGACY_LEAF) || defined(BL_HID)
66
#ifndef DTR_TOGGLING_SEQ
77
#define DTR_TOGGLING_SEQ
8-
#endif /* DTR_TOGGLING_SEQ */
8+
#endif /* DTR_TOGGLING_SEQ || BL_HID */
99
#endif /* BL_LEGACY_LEAF */
1010

1111
#ifdef __cplusplus

platform.txt

+10
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,16 @@ tools.bmp_upload.upload.params.verbose=-batch
169169
tools.bmp_upload.upload.params.quiet=--batch-silent
170170
tools.bmp_upload.upload.pattern="{path}{cmd}" -nx -b {upload.speed} {upload.verbose} -ex "set confirm off" -ex "target extended-remote {serial.port}" -ex "monitor swdp_scan" -ex "attach 1" -ex "load" -ex "compare-sections" -ex "kill" "{build.path}/{build.project_name}.elf"
171171

172+
# HID flash 2.2 (HID bootloader v2.2 for STM32F1 and STM32F4 series)
173+
tools.hid_upload.cmd=hid-flash
174+
tools.hid_upload.cmd.windows=hid-flash.exe
175+
tools.hid_upload.path={runtime.hardware.path}/tools/win
176+
tools.hid_upload.path.macosx={runtime.hardware.path}/tools/macosx
177+
tools.hid_upload.path.linux={runtime.hardware.path}/tools/linux
178+
tools.hid_upload.upload.params.verbose=-d
179+
tools.hid_upload.upload.params.quiet=n
180+
tools.hid_upload.upload.pattern="{path}/{cmd}" "{build.path}/{build.project_name}.bin" {serial.port.file}
181+
172182
# Upload using Maple bootloader over DFU
173183
tools.maple_upload.cmd=maple_upload
174184
tools.maple_upload.cmd.windows=maple_upload.bat

variants/DIYMROE_F407VGT/ldscript.ld

+3-3
Original file line numberDiff line numberDiff line change
@@ -52,17 +52,17 @@
5252
ENTRY(Reset_Handler)
5353

5454
/* Highest address of the user mode stack */
55-
_estack = 0x20020000; /* end of RAM */
55+
_estack = 0x20000000 + LD_MAX_DATA_SIZE; /* end of RAM */
5656
/* Generate a link error if heap and stack don't fit into RAM */
5757
_Min_Heap_Size = 0x200; /* required amount of heap */
5858
_Min_Stack_Size = 0x400; /* required amount of stack */
5959

6060
/* Specify the memory areas */
6161
MEMORY
6262
{
63-
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 128K
63+
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = LD_MAX_DATA_SIZE
6464
CCMRAM (rw) : ORIGIN = 0x10000000, LENGTH = 64K
65-
FLASH (rx) : ORIGIN = 0x8000000, LENGTH = 1024K
65+
FLASH (rx) : ORIGIN = 0x8000000 + LD_FLASH_OFFSET, LENGTH = LD_MAX_SIZE - LD_FLASH_OFFSET
6666
}
6767

6868
/* Define output sections */

0 commit comments

Comments
 (0)