diff --git a/libopencm3 b/libopencm3 index 6232f8d0..63398ff8 160000 --- a/libopencm3 +++ b/libopencm3 @@ -1 +1 @@ -Subproject commit 6232f8d0357055021e18325efa083a88ded30107 +Subproject commit 63398ff8000f88aed1e44fc8714c6f907c6c3982 diff --git a/scripts/stm32_mem.py b/scripts/stm32_mem.py index c6feed9d..690657e0 100755 --- a/scripts/stm32_mem.py +++ b/scripts/stm32_mem.py @@ -2,7 +2,7 @@ # # stm32_mem.py: STM32 memory access using USB DFU class # Copyright (C) 2011 Black Sphere Technologies -# Copyright (C) 2017 Uwe Bonnes (bon@elektron.ikp.physik.tu-darmstadt.de) +# Copyright (C) 2017, 2020 Uwe Bonnes (bon@elektron.ikp.physik.tu-darmstadt.de) # Written by Gareth McMullin # # This program is free software: you can redistribute it and/or modify @@ -121,9 +121,9 @@ def stm32_scan(args, test): print("Found multiple devices:\n") for dev in bmp_devs: dfudev = dfu.dfu_device(*dev) - man = dfudev.handle.getString(dfudev.dev.iManufacturer, 30) - product = dfudev.handle.getString(dfudev.dev.iProduct, 96) - serial_no = dfudev.handle.getString(dfudev.dev.iSerialNumber, 30) + man = dfudev.handle.getString(dfudev.dev.iManufacturer, 30).decode('utf8') + product = dfudev.handle.getString(dfudev.dev.iProduct, 96).decode('utf8') + serial_no = dfudev.handle.getString(dfudev.dev.iSerialNumber, 30).decode('utf8') print("Device ID:\t %04x:%04x" % (dfudev.dev.idVendor, dfudev.dev.idProduct)) print("Manufacturer:\t %s" % man) print("Product:\t %s" % product) @@ -134,9 +134,9 @@ def stm32_scan(args, test): for dev in bmp_devs: dfudev = dfu.dfu_device(*dev) - man = dfudev.handle.getString(dfudev.dev.iManufacturer, 30) - product = dfudev.handle.getString(dfudev.dev.iProduct, 96) - serial_no = dfudev.handle.getString(dfudev.dev.iSerialNumber, 30) + man = dfudev.handle.getString(dfudev.dev.iManufacturer, 30).decode('utf8') + product = dfudev.handle.getString(dfudev.dev.iProduct, 96).decode('utf8') + serial_no = dfudev.handle.getString(dfudev.dev.iSerialNumber, 30).decode('utf8') if args.serial_target: if man == "Black Sphere Technologies" and serial_no == args.serial_target: break @@ -150,7 +150,7 @@ def stm32_scan(args, test): print("Serial:\t\t %s" % serial_no) if args.serial_target and serial_no != args.serial_target: - print("Serial number doesn't match!\n") + print("Serial number doesn't match %s vs %s!\n" % (serial_no, args.serial_target)) exit(-2) return dfudev @@ -203,11 +203,11 @@ if __name__ == "__main__": bin = file.read() - product = dfudev.handle.getString(dfudev.dev.iProduct, 64) + product = dfudev.handle.getString(dfudev.dev.iProduct, 64).decode('utf8') if args.address : start = int(args.address, 0) else : - if b"F4" in product: + if "F4" in product or "STLINK-V3" in product: start = 0x8004000 else: start = 0x8002000 diff --git a/src/command.c b/src/command.c index b32a83a8..ee18ab07 100644 --- a/src/command.c +++ b/src/command.c @@ -149,16 +149,18 @@ int command_process(target *t, char *cmd) return target_command(t, argc, argv); } +#define BOARD_IDENT "Black Magic Probe" PLATFORM_IDENT FIRMWARE_VERSION + bool cmd_version(target *t, int argc, char **argv) { (void)t; (void)argc; (void)argv; + gdb_out(BOARD_IDENT); #if PC_HOSTED == 1 - gdb_outf("Black Magic Probe, PC-Hosted for " PLATFORM_IDENT() - ", Version " FIRMWARE_VERSION "\n"); + gdb_outf("\n for %s, %s\n", info.manufacturer, info.product); #else - gdb_outf("Black Magic Probe (Firmware " FIRMWARE_VERSION ") (Hardware Version %d)\n", platform_hwversion()); + gdb_outf(", Hardware Version %d\n", platform_hwversion()); #endif gdb_out("Copyright (C) 2015 Black Sphere Technologies Ltd.\n"); gdb_out("License GPLv3+: GNU GPL version 3 or later " diff --git a/src/platforms/common/cdcacm.c b/src/platforms/common/cdcacm.c index 2fb12a9c..4a6c9634 100644 --- a/src/platforms/common/cdcacm.c +++ b/src/platforms/common/cdcacm.c @@ -34,6 +34,7 @@ #endif #include "usbuart.h" #include "serialno.h" +#include "version.h" #include #include @@ -394,12 +395,15 @@ static const struct usb_config_descriptor config = { .interface = ifaces, }; -#if defined(STM32L0) || defined(STM32F3) || defined(STM32F4) -static char serial_no[13]; +#if defined(DUSE_ST_SERIAL) +char serial_no[13]; #else static char serial_no[9]; #endif +#define BOARD_IDENT "Black Magic Probe" PLATFORM_IDENT FIRMWARE_VERSION +#define DFU_IDENT "Black Magic Firmware Upgrade" PLATFORM_IDENT FIRMWARE_VERSION + static const char *usb_strings[] = { "Black Sphere Technologies", BOARD_IDENT, diff --git a/src/platforms/f4discovery/Makefile.inc b/src/platforms/f4discovery/Makefile.inc index 8596882b..c9116db5 100644 --- a/src/platforms/f4discovery/Makefile.inc +++ b/src/platforms/f4discovery/Makefile.inc @@ -17,9 +17,9 @@ LDFLAGS_BOOT = -lopencm3_stm32f4 \ ifeq ($(BMP_BOOTLOADER), 1) $(info Load address 0x08004000 for BMPBootloader) LDFLAGS = $(LDFLAGS_BOOT) -Wl,-Ttext=0x8004000 -CFLAGS += -DUSE_BMP_SERIAL else -LDFLAGS = $(LDFLAGS_BOOT) +LDFLAGS += $(LDFLAGS_BOOT) +CFLAGS += -DUSE_ST_SERIAL endif VPATH += platforms/stm32 diff --git a/src/platforms/f4discovery/platform.c b/src/platforms/f4discovery/platform.c index 53705138..2eb6bcbc 100644 --- a/src/platforms/f4discovery/platform.c +++ b/src/platforms/f4discovery/platform.c @@ -27,7 +27,7 @@ #include "usbuart.h" #include "morse.h" -#include +#include #include #include #include diff --git a/src/platforms/f4discovery/platform.h b/src/platforms/f4discovery/platform.h index 29e2b861..8f059094 100644 --- a/src/platforms/f4discovery/platform.h +++ b/src/platforms/f4discovery/platform.h @@ -27,14 +27,11 @@ #include "gpio.h" #include "timing.h" #include "timing_stm32.h" -#include "version.h" #include #define PLATFORM_HAS_TRACESWO -#define BOARD_IDENT "Black Magic Probe (F4Discovery), (Firmware " FIRMWARE_VERSION ")" -#define BOARD_IDENT_DFU "Black Magic Firmware Upgrade (F4Discovery)" -#define DFU_IDENT "Black Magic Firmware Upgrade (F4Discovery)" +#define PLATFORM_IDENT "(F4Discovery) " /* Important pin mappings for STM32 implementation: * diff --git a/src/platforms/hosted/ftdi_bmp.c b/src/platforms/hosted/ftdi_bmp.c index acf9ed4f..306e0259 100644 --- a/src/platforms/hosted/ftdi_bmp.c +++ b/src/platforms/hosted/ftdi_bmp.c @@ -20,7 +20,6 @@ */ #include "general.h" #include "gdb_if.h" -#include "version.h" #include "platform.h" #include "target.h" diff --git a/src/platforms/hosted/jlink.c b/src/platforms/hosted/jlink.c index 7515de5a..caf8bf90 100644 --- a/src/platforms/hosted/jlink.c +++ b/src/platforms/hosted/jlink.c @@ -38,6 +38,7 @@ /* Only two devices PIDS tested so long */ #define USB_VID_SEGGER_0101 0x0101 #define USB_VID_SEGGER_0105 0x0105 +#define USB_VID_SEGGER_1020 0x1020 static void jlink_print_caps(bmp_info_t *info) { @@ -175,7 +176,8 @@ int jlink_init(bmp_info_t *info) if (desc.idVendor != USB_PID_SEGGER) continue; if ((desc.idProduct != USB_VID_SEGGER_0101) && - (desc.idProduct != USB_VID_SEGGER_0105)) + (desc.idProduct != USB_VID_SEGGER_0105) && + (desc.idProduct != USB_VID_SEGGER_1020)) continue; int res = libusb_open(dev, &jl->ul_libusb_device_handle); if (res != LIBUSB_SUCCESS) diff --git a/src/platforms/hosted/platform.h b/src/platforms/hosted/platform.h index edbc16d2..d5f1860c 100644 --- a/src/platforms/hosted/platform.h +++ b/src/platforms/hosted/platform.h @@ -10,7 +10,7 @@ char *platform_ident(void); void platform_buffer_flush(void); -#define PLATFORM_IDENT() "NONE" +#define PLATFORM_IDENT "(PC-Hosted) " #define SET_IDLE_STATE(x) #define SET_RUN_STATE(x) diff --git a/src/platforms/hydrabus/Makefile.inc b/src/platforms/hydrabus/Makefile.inc index 24d43fa1..9d1d2a01 100644 --- a/src/platforms/hydrabus/Makefile.inc +++ b/src/platforms/hydrabus/Makefile.inc @@ -5,7 +5,7 @@ OBJCOPY = $(CROSS_COMPILE)objcopy CFLAGS += -Istm32/include -mcpu=cortex-m4 -mthumb \ -mfloat-abi=hard -mfpu=fpv4-sp-d16 \ -DSTM32F4 -DHYDRABUS -I../libopencm3/include \ - -Iplatforms/stm32 + -Iplatforms/stm32 -DUSE_ST_BOOTLOADER LDFLAGS = -lopencm3_stm32f4 \ -Wl,-T,platforms/stm32/f4discovery.ld -nostartfiles -lc -lnosys \ diff --git a/src/platforms/hydrabus/platform.c b/src/platforms/hydrabus/platform.c index 1b02976f..afac95a5 100644 --- a/src/platforms/hydrabus/platform.c +++ b/src/platforms/hydrabus/platform.c @@ -27,7 +27,7 @@ #include "usbuart.h" #include "morse.h" -#include +#include #include #include #include diff --git a/src/platforms/hydrabus/platform.h b/src/platforms/hydrabus/platform.h index f8c5a094..c2c85333 100644 --- a/src/platforms/hydrabus/platform.h +++ b/src/platforms/hydrabus/platform.h @@ -28,14 +28,11 @@ #include "gpio.h" #include "timing.h" #include "timing_stm32.h" -#include "version.h" #include #define PLATFORM_HAS_TRACESWO -#define BOARD_IDENT "Black Magic Probe (HydraBus), (Firmware " FIRMWARE_VERSION ")" -#define BOARD_IDENT_DFU "Black Magic (Upgrade) for HydraBus, (Firmware " FIRMWARE_VERSION ")" -#define DFU_IDENT "Black Magic Firmware Upgrade (HydraBus)" +#define PLATFORM_IDENT " (HydraBus))" /* Important pin mappings for STM32 implementation: * diff --git a/src/platforms/launchpad-icdi/platform.h b/src/platforms/launchpad-icdi/platform.h index d05f61c3..7ed96367 100644 --- a/src/platforms/launchpad-icdi/platform.h +++ b/src/platforms/launchpad-icdi/platform.h @@ -21,12 +21,8 @@ #include #include "timing.h" -#include "version.h" -#define BOARD_IDENT "Black Magic Probe (Launchpad ICDI), (Firmware " FIRMWARE_VERSION ")" -#define BOARD_IDENT_DFU "Black Magic (Upgrade) for Launchpad, (Firmware " FIRMWARE_VERSION ")" -#define DFU_IDENT "Black Magic Firmware Upgrade (Launchpad)" -#define DFU_IFACE_STRING "lolwut" +#define PLATFORM_IDENT "(Launchpad ICDI) " extern uint8_t running_status; diff --git a/src/platforms/native/platform.c b/src/platforms/native/platform.c index e16632b6..2f6e87f4 100644 --- a/src/platforms/native/platform.c +++ b/src/platforms/native/platform.c @@ -27,14 +27,14 @@ #include "usbuart.h" #include "morse.h" -#include +#include #include #include #include #include #include #include -#include +#include static void adc_init(void); static void setup_vbus_irq(void); @@ -97,7 +97,7 @@ void platform_init(void) initialise_monitor_handles(); #endif - rcc_clock_setup_in_hse_8mhz_out_72mhz(); + rcc_clock_setup_pll(&rcc_hse_configs[RCC_CLOCK_HSE8_72MHZ]); /* Enable peripherals */ rcc_periph_clock_enable(RCC_USB); diff --git a/src/platforms/native/platform.h b/src/platforms/native/platform.h index 451d308a..0ef4178f 100644 --- a/src/platforms/native/platform.h +++ b/src/platforms/native/platform.h @@ -38,10 +38,7 @@ extern bool debug_bmp; int usbuart_debug_write(const char *buf, size_t len); #endif -#define BOARD_IDENT "Black Magic Probe" -#define BOARD_IDENT_DFU "Black Magic Probe (Upgrade)" -#define BOARD_IDENT_UPD "Black Magic Probe (DFU Upgrade)" -#define DFU_IDENT "Black Magic Firmware Upgrade" +#define PLATFORM_IDENT " " #define UPD_IFACE_STRING "@Internal Flash /0x08000000/8*001Kg" /* Important pin mappings for STM32 implementation: diff --git a/src/platforms/native/usbdfu.c b/src/platforms/native/usbdfu.c index db44002c..5a3a6892 100644 --- a/src/platforms/native/usbdfu.c +++ b/src/platforms/native/usbdfu.c @@ -44,7 +44,7 @@ int main(void) dfu_protect(false); - rcc_clock_setup_in_hse_8mhz_out_72mhz(); + rcc_clock_setup_pll(&rcc_hse_configs[RCC_CLOCK_HSE8_72MHZ]); systick_set_clocksource(STK_CSR_CLKSOURCE_AHB_DIV8); systick_set_reload(900000); diff --git a/src/platforms/stlink/platform.c b/src/platforms/stlink/platform.c index a38b0a7f..93b0a3b0 100644 --- a/src/platforms/stlink/platform.c +++ b/src/platforms/stlink/platform.c @@ -52,7 +52,7 @@ void platform_init(void) void initialise_monitor_handles(void); initialise_monitor_handles(); #endif - rcc_clock_setup_in_hse_8mhz_out_72mhz(); + rcc_clock_setup_pll(&rcc_hse_configs[RCC_CLOCK_HSE8_72MHZ]); if (rev == 0) { led_idle_run = GPIO8; srst_pin = SRST_PIN_V1; diff --git a/src/platforms/stlink/platform.h b/src/platforms/stlink/platform.h index ee776f6a..12c498d9 100644 --- a/src/platforms/stlink/platform.h +++ b/src/platforms/stlink/platform.h @@ -27,10 +27,9 @@ #include "gpio.h" #include "timing.h" #include "timing_stm32.h" -#include "version.h" #include -#include +#include #include #ifdef ENABLE_DEBUG @@ -40,9 +39,7 @@ extern bool debug_bmp; int usbuart_debug_write(const char *buf, size_t len); #endif -#define BOARD_IDENT "Black Magic Probe (STLINK), (Firmware " FIRMWARE_VERSION ")" -#define BOARD_IDENT_DFU "Black Magic (Upgrade) for STLink/Discovery, (Firmware " FIRMWARE_VERSION ")" -#define DFU_IDENT "Black Magic Firmware Upgrade (STLINK)" +#define PLATFORM_IDENT "(STLINK/V2) " /* Hardware definitions... */ #define TDI_PORT GPIOA diff --git a/src/platforms/stlink/usbdfu.c b/src/platforms/stlink/usbdfu.c index 8b1cf7cf..12f83991 100644 --- a/src/platforms/stlink/usbdfu.c +++ b/src/platforms/stlink/usbdfu.c @@ -65,7 +65,7 @@ int main(void) dfu_jump_app_if_valid(); dfu_protect(false); - rcc_clock_setup_in_hse_8mhz_out_72mhz(); + rcc_clock_setup_pll(&rcc_hse_configs[RCC_CLOCK_HSE8_72MHZ]); systick_set_clocksource(STK_CSR_CLKSOURCE_AHB_DIV8); systick_set_reload(900000); diff --git a/src/platforms/stm32/dfucore.c b/src/platforms/stm32/dfucore.c index 84e588e8..3aceef9e 100644 --- a/src/platforms/stm32/dfucore.c +++ b/src/platforms/stm32/dfucore.c @@ -18,6 +18,8 @@ */ #include "general.h" +#include "version.h" + #include #include @@ -124,10 +126,11 @@ const struct usb_config_descriptor config = { static char serial_no[9]; static char if_string[] = DFU_IFACE_STRING; +#define BOARD_IDENT_DFU(BOARD_TYPE) "Black Magic Probe DFU " PLATFORM_IDENT "" FIRMWARE_VERSION static const char *usb_strings[] = { "Black Sphere Technologies", - BOARD_IDENT_DFU, + BOARD_IDENT_DFU(PLATFORM_IDENT), serial_no, /* This string is used by ST Microelectronics' DfuSe utility */ if_string, diff --git a/src/platforms/swlink/platform.c b/src/platforms/swlink/platform.c index a11ea55b..24b6140c 100644 --- a/src/platforms/swlink/platform.c +++ b/src/platforms/swlink/platform.c @@ -27,13 +27,13 @@ #include "cdcacm.h" #include "usbuart.h" -#include +#include #include #include #include #include #include -#include +#include uint32_t led_error_port; uint16_t led_error_pin; @@ -54,8 +54,7 @@ void platform_init(void) void initialise_monitor_handles(void); initialise_monitor_handles(); #endif - rcc_clock_setup_in_hse_8mhz_out_72mhz(); - + rcc_clock_setup_pll(&rcc_hse_configs[RCC_CLOCK_HSE8_72MHZ]); rev = detect_rev(); /* Enable peripherals */ rcc_periph_clock_enable(RCC_AFIO); diff --git a/src/platforms/swlink/platform.h b/src/platforms/swlink/platform.h index c8a9f2e4..0eb7f4d4 100644 --- a/src/platforms/swlink/platform.h +++ b/src/platforms/swlink/platform.h @@ -28,7 +28,6 @@ #include "gpio.h" #include "timing.h" #include "timing_stm32.h" -#include "version.h" #ifdef ENABLE_DEBUG # define PLATFORM_HAS_DEBUG @@ -37,9 +36,7 @@ extern bool debug_bmp; int usbuart_debug_write(const char *buf, size_t len); #endif -#define BOARD_IDENT "Black Magic Probe (SWLINK), (Firmware " FIRMWARE_VERSION ")" -#define BOARD_IDENT_DFU "Black Magic (Upgrade), SWLINK, (Firmware " FIRMWARE_VERSION ")" -#define DFU_IDENT "Black Magic Firmware Upgrade (SWLINK)" +#define PLATFORM_IDENT "(SWLINK) " /* Hardware definitions... */ #define TMS_PORT GPIOA diff --git a/src/platforms/swlink/usbdfu.c b/src/platforms/swlink/usbdfu.c index c6a2b282..1d763804 100644 --- a/src/platforms/swlink/usbdfu.c +++ b/src/platforms/swlink/usbdfu.c @@ -77,7 +77,7 @@ int main(void) dfu_protect(false); - rcc_clock_setup_in_hse_8mhz_out_72mhz(); + rcc_clock_setup_pll(&rcc_hse_configs[RCC_CLOCK_HSE8_72MHZ]); systick_set_clocksource(STK_CSR_CLKSOURCE_AHB_DIV8); systick_set_reload(900000); diff --git a/src/remote.c b/src/remote.c index 445d18ec..10fc65ef 100644 --- a/src/remote.c +++ b/src/remote.c @@ -24,6 +24,7 @@ #include "swdptap.h" #include "jtagtap.h" #include "gdb_if.h" +#include "platform.h" #include "version.h" #include "exception.h" #include @@ -299,11 +300,11 @@ void remotePacketProcessGEN(uint8_t i, char *packet) #endif break; -#if !defined(BOARD_IDENT) && defined(PLATFORM_IDENT) -# define BOARD_IDENT() PLATFORM_IDENT +#if !defined(BOARD_IDENT) && defined(BOARD_IDENT) +# define PLATFORM_IDENT() BOARD_IDENT #endif case REMOTE_START: - _respondS(REMOTE_RESP_OK, BOARD_IDENT " " FIRMWARE_VERSION); + _respondS(REMOTE_RESP_OK, PLATFORM_IDENT "" FIRMWARE_VERSION); break; default: