Releases: blackmagic-debug/blackmagic
Stable Release v1.9.0
We are happy to announce the v1.9.0 release of Black Magic Debug. This ended up being much larger than intended, but exciting.
Here are some of the highlights:
- Improved SWD timings, addressing reliability issue with the previous release
- Extended support for RTT to all host platforms
- New
auto_scan
monitor command, allowing automatic scan chain detection - New
erase_range
monitor command, allowing erasing Flash ranges on any target - Added clang-tidy and clang-format configurations and project code formatting is enforced
- Introduced a Contributor Covenant based Code of Conduct for contribution
- Introduced PR templates and contribution guidelines to streamline and simplify contribution and review processes
- Support for TCK/SWCLK High-Z when idle. This is needed for projects that reuse the TCK pin as GPIO during runtime. Especially useful for ultra low pin count devices.
- And a bunch of newly supported targets:
- Atmel/Microchip SAMx7x
- GigaDevice GD32F303
- TI LM3S5732 and LM3S8962
- ArteryTek ATF32F403A/407/415
- CKS32F103
- Renesas RA
For more details please refer to the ChangeLog down below.
ChangeLog v1.9.0
Core Changes
- RTT support via the target USB serial connection [koendv/dragonmux]
- Added a clang-format configuration [xobs/dragonmux]
- Implemented a new
auto_scan
monitor command which first tries JTAG and if that fails, tries SWD scan [dragonmux] - Introduced a Contributor Covenant based Code of Conduct for contribution [dragonmux]
- Improved reset terminology usage and documentation via
HACKING.md
[dragonmux] - Renamed the main branch to
main
[esden] - Improved the project README and fixed various links in it [dragonmux]
- Implemented support for redirecting semihosting output to the target USB serial connection [dragonmux/sullin]
- Consistent mass erase progress indication and support for mass erase generically [dragonmux]
- Switched the project language standard from GNU99 to C11 [dragonmux]
- Ensure the
_DEFAULT_SOURCE
and_GNU_SOURCE
macros are defined to enable certain glibc features we depend on [xobs] - Prepared the JTAG-TAP code for adding RISC-V support [dragonmux]
- Do not turn idle indication LED off when the GDB USB serial connection is closed and target already detached [fabalthazar]
- Implemented a pull request template and contribution guidelines [dragonmux]
- Implemented support for talking SFDP to SPI Flash attached to Flashless targets [dragonmux]
- Changed old wiki links to point to the website instead [Xiretza]
- Implemented support for tri-stating (setting to High-Z) the TCK/SWCLK pin when BMP is idle on supported host platforms [dragonmux]
- Removed printing of a debug message for
vMustReplyEmpty
packets to prevent confusion when debugging GDB comms [perigoso] - Superfluous semicolon cleanup/removal [perigoso]
- Cleaned up, updated and improved the RTT usage documentation [esden]
- Converted the SWO documentation to Markdown and cleaned it up [esden]
- Cleaned up the include guards, making them consistent and fixing some undefined behaviour [esden/perigoso]
- Cleaned up and fixed the Flash erase and write function return types for all targets [perigoso]
- Added improved project guidelines for contribution licensing, header guard macros and type and typedef naming via
HACKING.md
[dragonmux] - Enabled simultaneous use of RTT and the auxillary (target) UART [koendv]
- Enabled support for RTT on the F072 platform [koendv]
- Improved the bitbang’d protocol timings for SWD which were causing setup-and-hold violations [dragonmux]
- Improved Flash operation completions handling for a speed and Flash usage improvement [dragonmux]
- Cleaned up the RTT implementation and provided test programs for RTT [koendv]
- Run
clang-format
across the entire code base [dragonmux] - Improved the
const
-correctness of a chunk of the code [dragonmux] - Addressed various code quality and consistency issues with the targets [dragonmux]
- Removed the
jtag_proc_t *jp
parameters from the JTAG abstraction layer as they’re redundant [dragonmux] - Fixed the naming conformity across the code base, rigorously applying the naming requirements from the contribution guidelines [dragonmux]
- Fixed a
NULL
pointer dereference issue in the RTT monitor command when no arguments are given [koendv] - Fixed the target register description XML allocation inducing memory exhaustion and not being reliably cleaned up [dragonmux]
- Fixed various spelling mistakes throughout the code base [perigoso]
- Fixer the RTT code enum naming [perigoso]
- Fixed a regression that lead to a crash due to a
NULL
pointer in the target registers description XML handling [dragonmux] - Removed the target structure using defaulted functions as the way it was done was relying on undefined behaviour and causing issues [dragonmux]
Build System Changes
- Only remake include/version.h when the Git hash changes [TheJJ/dragonmux]
clang-tidy
andclang-format
support [dragonmux]
Script/Utility Changes
- Support for Nix’ nix-shell [cyber-murmel]
- Improved udev rules [dragonmux]
- VSCode extension recomendations [dragonmux]
- Deprecated stm32_mem.py and the in-repo upgrade program [dragonmux]
- Added ST-Link udev rules [sidprice]
- Added a second set of symlinks to the main project udev rules to gracefully deal with having multiple probes connected to one host simultaneously [dragonmux]
Project CI Changes
- Fixed the CI up for PRs after the rename to main [dragonmux]
- Added a proper dependency on libusb’s dev package to the main build workflow [dragonmux]
- Removed the stale Travis CI configuration [dragonmux]
- Added a PR code size difference check to the workflows [perigoso]
- Added a merge-blocking PR lint for clang-format issues [perigoso]
- Added a check to the PR lint flow for the case of hexadecimal constants (
0xFEEDACA7
will result in an error,0xfeedaca7
is allowed) [perigoso] - Added a check for accidental assignments in control flow conditions and other similar constructs [perigoso]
ARM (ADIv5) Changes
- ARM Debug: Formatting and code style readability clean-ups [perigoso]
- ARM Debug: Fix some formatting constant misuse [gatin00b]
- ARM Debug: Access Port scan early bailout was too eager, failing after just 1 rather than 8 invalid APs [dragonmux]
- ARM Debug: Improved the correctness of the JEP106 reading and handling code for RP2040 [perigoso]
- ARM Debug: Fixed a grammatical error [gatin00b]
- ARM Debug: Unified DPIDR and target ID register handling between the SWD and JTAG DP handling [perigoso]
- ARM Debug: Use
PRIxNN
specifiers in all debug print statements [xobs] - ARM Debug: Early DP accesses trigger aborts corrupting AP writes [dragonmux/mubes]
- ARM Debug (JTAG): Fixed support for and improved identification of DPv0 devices [dragonmux]
- ARM Debug: Made consistent use of the DP bank macros, and removed the duplicate base check ready to support LPC55 [dragonmux]
- ARM Debug: Improved handling of target halt and resume, and removed the RP2040 rescue special-casing [jamesturton]
- ARM Debug: Fixed the triggering of nuisance CID warnings for Cortex-M23 and Cortex-M33 System Control Spaces [dragonmux]
- ARM Debug: Improved the handling of sticky errors generated during AP scanning [dragonmux]
- ARM Debug (SWD): Fixed a bug in the fault handling during AP/DP access that broke remote protocol use [dragonmux]
- ARM Debug (SWD): Fixed an issue attaching to a target that occurs when there is a delay between scan and attach [dragonmux]
- ARM Debug: Fixed protocol recovery progressing incorrectly for DPv2+ debug ports, leading to a no-communication state [dragonmux]
Target Changes
- ch32f1:
printf
format string fixes [dragonmux] - ARM Cortex-A: Implement watch-points support [gsmcmulin]
- rp: Corrected the SRAM sizing [DagAgren]
- rp: Fixed how reset is done using
CORTEXM_TOPT_INHIBIT_NRST
[jamesturton] - sam3x: Corrected
gpnvm
command usage text [perigoso] - rp: Better heuristic detection of attached SPI Flash size [jamesturton/djix123]
- stm32wl: Improved support for the second CPU and part detection [UweBonnes]
- sam3x: Fixed uninitialised variables being present [sidprice/perigoso]
- stm32f1: General code clean-up and formatting fixes [perigoso]
- kinetis: Code organisation clean-up and function naming fixes [perigoso]
- efm32: Code cleanup and implementation fixes [perigoso]
- nrf52: Fixed mass erase silently failing under certain conditions [dragonmux]
- target: clang-tidy lint fixes and readability improvements [dragonmux]
- target: Implemented a new monitor command (
erase_range
) to allow erasing Flash ranges on any target [dragonmux] - target: Implement weak aliased no-op stubs for all probe routines to allow disabling any target [perigoso]
- target: Fix probing of LPC1343 parts which weren’t being properly detected [perigoso]
- ch32f1: Improve compatibility with various CH32F1 variants and other STM32F1 clones [grumat]
- command: Implemented support for LPC82x low power reset via a new monitor command (
tdi_low_reset
) [dragonmux] - command: Fixed the formatting and type consistency of the target commands implementation [dragonmux]
- JTAG scan: Loosen strictness to allow detection of non-conforming JTAG targets [dragonmux]
- lmi: Fix Stelaris/Tiva-C probing being unreliable [dragonmux]
- ch32f1: Fixed some types issues and missing
static
annotation [dragonmux] - rp: Code organisation conformity against the other targets, and clang-tidy lint fixes [dragonmux]
- ARM Cortex-M: Corrected the “Please report unknown device” diagnostic to report a more appropriate set of IDs [perigoso]
- stm32h7: Fixed the probe part detection IDs due to them being incorrect from the incorrect ADIv5 code before [perigoso]
- sam...
Relase Candidate V1.9.0-rc1
We are happy to announce the second v1.9.0 release candidate of Black Magic Debug.
In this release
- Fixed an error in BMDA’s DAP link reset logic [zyp]
- Fixed the USB serial port control notifications (such as DTR) being sent over the wrong endpoint [dragonmux]
- Fixed the CRC32 calculations being broken in BMDA and non-STM32 probes [perigoso]
- Fixed a regression in the identification of STM32F0 parts [dragonmux]
- Fixed a regression in the
HOSTED_BMP_ONLY=1
build of BMDA for Windows due to mishandling a possible return value formRegGetValue()
[LAK132] - Fixed the nRF52 target support being able to trigger probe memory exhaustion due to the size of the write buffers [dragonmux]
- Fixed a
NULL
pointer dereference issue in the RTT monitor command when no arguments are given [koendv] - Corrected the part lookup for STM32F4 series and adjacent parts [perigoso]
- Added a second set of symlinks to the udev rules to handle when multiple probes are attached to one host properly [dragonmux]
- Added a missing
NULL
check intarget_flash_erase
[perigoso] - Fixed the BMDA build on OSX [djix123]
- Fixed the Cortex-M SWD attach regression that occurs when there is a delay between scan and attach [dragonmux]
- Fixed the target register description allocation inducing memory exhaustion and not being reliably cleaned up [dragonmux]
- Fixed compilation of the DFU bootloaders under some ARM GCC toolchains [dragonmux]
- Fixed a regression in BMDA’s file handling which caused Flash write and verify operations to be no-ops [hollinsky]
- Implemented a monitor command to allow clean BMDA shutdowns [dragonmux]
- Fixed dap_jtagtap_tdi_tdo_seq() crashing when ticks is 0 and final_tms is true [dragonmux]
Contributors to v1.9.0-rc1
We have had 8 individuals contribute 97 commits to the v1.9.0-rc1 release. It would not have been possible without your help! Thank you!
Contributor (Contributions)
dragonmux (86)
Rafael Silva (3)
Jonathan Giles (2)
Paul Hollinsky (2)
Vegard Storheil Eriksen (1)
Koen De Vleeschauwer (1)
LAK132 (1)
Piotr Esden-Tempski (1)
Sponsors
This project is sponsored in parts by:
- 1BitSquared - Design, Manufacture and distribution of open source embedded hardware development tools and platforms, as well as educational electronics. Thank you everyone who buys Black Magic Probes from 1BitSquared directly through our stores or indirectly through Adafruit. The hardware sales allow us to continue supporting the Black Magic Debug project.
- All the generous Patrons and GitHub Sponsors supporting esden’s work
- All the generous GitHub Sponsors supporting dragonmux’s work
Relase Candidate V1.9.0-rc0
We are happy to announce the first v1.9.0 release candidate of Black Magic Debug. This ended up being much larger than intended, but exciting.
Here are some of the highlights:
- Improved SWD timings, addressing reliability issue with the previous release
- Extended support for RTT to all host platforms
- New
auto_scan
monitor command, allowing automatic scan chain detection - New
erase_range
monitor command, allowing erasing Flash ranges on any target - Added clang-tidy and clang-format configurations and project code formatting is enforced
- Introduced a Contributor Covenant based Code of Conduct for contribution
- Introduced PR templates and contribution guidelines to streamline and simplify contribution and review processes
- Support for TCK/SWCLK High-Z when idle. This is needed for projects that reuse the TCK pin as GPIO during runtime. Especially useful for ultra low pin count devices.
- And a bunch of newly supported targets:
- Atmel/Microchip SAMx7x
- GigaDevice GD32F303
- TI LM3S5732 and LM3S8962
- ArteryTek ATF32F403A/407/415
- CKS32F103
- Renesas RA
For more details please refer to the ChangeLog down below.
ChangeLog v1.9-rc0
Core Changes
- RTT support via the target USB serial connection [koendv/dragonmux]
- Added a clang-format configuration [xobs/dragonmux]
- Implemented a new
auto_scan
monitor command which first tries JTAG and if that fails, tries SWD scan [dragonmux] - Introduced a Contributor Covenant based Code of Conduct for contribution [dragonmux]
- Improved reset terminology usage and documentation via
HACKING.md
[dragonmux] - Renamed the main branch to
main
[esden] - Improved the project README and fixed various links in it [dragonmux]
- Implemented support for redirecting semihosting output to the target USB serial connection [dragonmux/sullin]
- Consistent mass erase progress indication and support for mass erase generically [dragonmux]
- Switched the project language standard from GNU99 to C11 [dragonmux]
- Ensure the
_DEFAULT_SOURCE
and_GNU_SOURCE
macros are defined to enable certain glibc features we depend on [xobs] - Prepared the JTAG-TAP code for adding RISC-V support [dragonmux]
- Do not turn idle indication LED off when the GDB USB serial connection is closed and target already detached [fabalthazar]
- Implemented a pull request template and contribution guidelines [dragonmux]
- Implemented support for talking SFDP to SPI Flash attached to Flashless targets [dragonmux]
- Changed old wiki links to point to the website instead [Xiretza]
- Implemented support for tri-stating (setting to High-Z) the TCK/SWCLK pin when BMP is idle on supported host platforms [dragonmux]
- Removed printing of a debug message for
vMustReplyEmpty
packets to prevent confusion when debugging GDB comms [perigoso] - Superfluous semicolon cleanup/removal [perigoso]
- Cleaned up, updated and improved the RTT usage documentation [esden]
- Converted the SWO documentation to Markdown and cleaned it up [esden]
- Cleaned up the include guards, making them consistent and fixing some undefined behaviour [esden/perigoso]
- Cleaned up and fixed the Flash erase and write function return types for all targets [perigoso]
- Added improved project guidelines for contribution licensing, header guard macros and type and typedef naming via
HACKING.md
[dragonmux] - Enabled simultaneous use of RTT and the auxillary (target) UART [koendv]
- Enabled support for RTT on the F072 platform [koendv]
- Improved the bitbang’d protocol timings for SWD which were causing setup-and-hold violations [dragonmux]
- Improved Flash operation completions handling for a speed and Flash usage improvement [dragonmux]
- Cleaned up the RTT implementation and provided test programs for RTT [koendv]
- Run
clang-format
across the entire code base [dragonmux] - Improved the
const
-correctness of a chunk of the code [dragonmux] - Addressed various code quality and consistency issues with the targets [dragonmux]
- Removed the
jtag_proc_t *jp
parameters from the JTAG abstraction layer as they’re redundant [dragonmux] - Fixed the naming conformity across the code base, rigorously applying the naming requirements from the contribution guidelines [dragonmux]
Build System Changes
- Only remake include/version.h when the Git hash changes [TheJJ/dragonmux]
clang-tidy
andclang-format
support [dragonmux]
Script/Utility Changes
- Support for Nix’ nix-shell [cyber-murmel]
- Improved udev rules [dragonmux]
- VSCode extension recomendations [dragonmux]
- Deprecated stm32_mem.py and the in-repo upgrade program [dragonmux]
- Added ST-Link udev rules [sidprice]
Project CI Changes
- Fixed the CI up for PRs after the rename to main [dragonmux]
- Added a proper dependency on libusb’s dev package to the main build workflow [dragonmux]
- Removed the stale Travis CI configuration [dragonmux]
- Added a PR code size difference check to the workflows [perigoso]
- Added a merge-blocking PR lint for clang-format issues [perigoso]
- Added a check to the PR lint flow for the case of hexadecimal constants (
0xFEEDACA7
will result in an error,0xfeedaca7
is allowed) [perigoso] - Added a check for accidental assignments in control flow conditions and other similar constructs [perigoso]
ARM (ADIv5) Changes
- ARM Debug: Formatting and code style readability clean-ups [perigoso]
- ARM Debug: Fix some formatting constant misuse [gatin00b]
- ARM Debug: Access Port scan early bailout was too eager, failing after just 1 rather than 8 invalid APs [dragonmux]
- ARM Debug: Improved the correctness of the JEP106 reading and handling code for RP2040 [perigoso]
- ARM Debug: Fixed a grammatical error [gatin00b]
- ARM Debug: Unified DPIDR and target ID register handling between the SWD and JTAG DP handling [perigoso]
- ARM Debug: Use
PRIxNN
specifiers in all debug print statements [xobs] - ARM Debug: Early DP accesses trigger aborts corrupting AP writes [dragonmux/mubes]
- ARM Debug (JTAG): Fixed support for and improved identification of DPv0 devices [dragonmux]
- ARM Debug: Made consistent u# Release v1.9se of the DP bank macros, and removed the duplicate base check ready to support LPC55 [dragonmux]
- ARM Debug: Improved handling of target halt and resume, and removed the RP2040 rescue special-casing [jamesturton]
- ARM Debug: Fixed the triggering of nuisance CID warnings for Cortex-M23 and Cortex-M33 System Control Spaces [dragonmux]
- ARM Debug: Improved the handling of sticky errors generated during AP scanning [dragonmux]
- ARM Debug (SWD): Fixed a bug in the fault handling during AP/DP access that broke remote protocol use [dragonmux]
Target Changes
- ch32f1:
printf
format string fixes [dragonmux] - ARM Cortex-A: Implement watch-points support [gsmcmulin]
- rp: Corrected the SRAM sizing [DagAgren]
- rp: Fixed how reset is done using
CORTEXM_TOPT_INHIBIT_NRST
[jamesturton] - sam3x: Corrected
gpnvm
command usage text [perigoso] - rp: Better heuristic detection of attached SPI Flash size [jamesturton/djix123]
- stm32wl: Improved support for the second CPU and part detection [UweBonnes]
- sam3x: Fixed uninitialised variables being present [sidprice/perigoso]
- stm32f1: General code clean-up and formatting fixes [perigoso]
- kinetis: Code organisation clean-up and function naming fixes [perigoso]
- efm32: Code cleanup and implementation fixes [perigoso]
- nrf52: Fixed mass erase silently failing under certain conditions [dragonmux]
- target: clang-tidy lint fixes and readability improvements [dragonmux]
- target: Implemented a new monitor command (
erase_range
) to allow erasing Flash ranges on any target [dragonmux] - target: Implement weak aliased no-op stubs for all probe routines to allow disabling any target [perigoso]
- target: Fix probing of LPC1343 parts which weren’t being properly detected [perigoso]
- ch32f1: Improve compatibility with various CH32F1 variants and other STM32F1 clones [grumat]
- command: Implemented support for LPC82x low power reset via a new monitor command (
tdi_low_reset
) [dragonmux] - command: Fixed the formatting and type consistency of the target commands implementation [dragonmux]
- JTAG scan: Loosen strictness to allow detection of non-conforming JTAG targets [dragonmux]
- lmi: Fix Stelaris/Tiva-C probing being unreliable [dragonmux]
- ch32f1: Fixed some types issues and missing
static
annotation [dragonmux] - rp: Code organisation conformity against the other targets, and clang-tidy lint fixes [dragonmux]
- ARM Cortex-M: Corrected the “Please report unknown device” diagnostic to report a more appropriate set of IDs [perigoso]
- stm32h7: Fixed the probe part detection IDs due to them being incorrect from the incorrect ADIv5 code before [perigoso]
- samd: Fixed the device ID family mask to match the value in the datasheet [dragonmux]
- target: Made
target_flash_for_addr()
public in the target-facing part of the target API ready for the AVR JTAG-PDI support [dragonmux] - rp: Implemented generalised SPI Flash programming and access support using SFDP [dragonmux]
- samd: Fixed some attach errata for the AT SAMD11 which can be triggered by the normal Cortex-M attach routine [dragonmux]
- ch32f1: Improved differentiation between CH32F103, CKS32F103 and APM32F103 using the revision ID [djix123]
- ch32f1: Fixed several debug format strings which had
ENABLE_DEBUG=1
builds broken [esden] - target_flash: Moved the Flash handling into its own file and implemented guaranteed address alignment in the API [perigoso]
- ARM Cortex-A/M: Generate the GDB target description strings dynamically to save on Flash code size [Qyriad]
- sam4l: Fixed the debug format string specifiers [xobs]
- target_probe: Fixed AppleClang compatability [amyspark]
- ARM Cortex-...
Stable Release V1.8.2
We are happy to announce the V1.8.2 point release of Black Magic Debug.
In this release
- Added “Fake thread support”. This is a work around, for a bug in GDB V11 and V12 where GDB crashes when the server that does not have threads. [dragonmux]
You can download pre-built firmware binaries from the GitHub release page. If you are downloading the sources archive, make sure to download the full-sources
archives, otherwise you will not have the libopencm3 library that is necessary for firmware compilation. You can of course always check out the specific version tag using git.
Sponsors
This project is sponsored in parts by:
- 1BitSquared - Design, Manufacture and distribution of open source embedded hardware development tools and platforms, as well as educational electronics. Thank you everyone who buys Black Magic Probes from 1BitSquared directly through our stores or indirectly through Adafruit. The hardware sales allow us to continue supporting the Black Magic Debug project.
- All the generous Patrons and GitHub Sponsors supporting esden’s work
- All the generous GitHub Sponsors supporting dragonmux’s work
Stable Release V1.8.1
We are happy to announce the V1.8.1 point release of Black Magic Debug.
In this release
- Fixed
HOSTED_BMP_ONLY
build of Black Magic Debug App (BMDA) [Qyriad] - Fixed GDB protocol
sscanf
formatting pattern that was, among others, breaking breakpoints [dragonmux] - Fixed a watchpoint handling issue and a register sanity check [aksdfauytv]
- Fixed CH32F probe routine so it does not overwrite the MCU ID code.
- Fixed an issue where Kinetis parts that write Flash 8 bytes at a time could get bricked. (affected parts: S32K and K64) [dragonmux]
- Fixed “reading old ADC values” issue on Black Magic Probe (BMP aka. native) V2.3 hardware. [esden]
- Fixed flash memory write buffer lifetimes to decrease the probability of running out of heap. [dragonmux]
- Fixed an issue where mass_erase command on STM32F4 was returning a
Failed
result in most cases. [esden]
You can download pre-built firmware binaries from the GitHub release page. If you are downloading the sources make sure to downolad the full-sources
archives, otherwise you will not have the libopencm3 library that is necessary for firmware compilation.
Sponsors
This project is sponsored in parts by:
- 1BitSquared - Design, Manufacture and distribution of open source embedded hardware development tools and platforms, as well as educational electronics. Thank you everyone who buys Black Magic Probes from 1BitSquared directly through our stores or indirectly through Adafruit. The hardware sales allow us to continue supporting the Black Magic Debug project.
- All the generous Patrons and GitHub Sponsors supporting esden’s work
- All the generous GitHub Sponsors supporting dragonmux’s work
Stable Release V1.8.0
We are happy to announce the V1.8.0 release of Black Magic Debug. It is a big one since we did not make a stable release since October 2020!!! So this release is very much overdue. But that also means we have a lot of new and interesting things in this release.
Here are some highlights:
- Added support for the new Black Magic Probe v2.3 hardware.
- Improved target scan reliability for devices that are asleep or using WFI.
- Black Magic App (BMA aka. hosted) now has better support of CMSIS-DAP probes.
- All python scripts and utilities were updated to run and require Python 3.
- Added GitHub Actions CI builds
- And a bunch of newly supported targets:
- WCH CH32F103
- GigaDevice GD32F1/F3
- GigaDevice GD32E23x
- NXP Kinetis K12 and placeholders for other K-Series MCUs
- NXP LPC11xx XL, LPC546xx, LPC802, LPC804, LPC832 and LPC834
- NXP MIMXRT10XX detection (no flash support)
- NXP S32K14x, S32K118, S32K148
- RaspberryPi RP2040
- Microchip SAMD09
- ST STM32G03/4/5/6/7/8/B/C, STM32G49x/G4Ax
- ST STM32H7B3/B0/A3 & STM32H723/33/25/35/30
- ST STM32L55
- ST STM32WB55
- ST STM32WLxx
You can download pre-built firmware binaries from the GitHub release page. If you are downloading the sources make sure to downolad the full-sources
archives, otherwise you will not have the libopencm3 library that is necessary for firmware compilation.
For more details please refer to the ChangeLog down below.
Legend in Historical Context
Black Magic Debug consists of multiple elements that have fairly similar naming that can be confusing. To make this Change Log bit easier to decipher here is a little bit of history and term explanation.
Black Magic Debug (BMD) was originally designed as just a firmware for a purpose made hardware called Black Magic Probe (BMP) that can speak the GNU Debugger (GDB) “remote” serial protocol. The original BMP hardware is also called “native” as over time additional “Host” platforms were added that the firmware could be loaded onto. (such host hardware can be an STM32F4 discovery board, or ST-Link hardware and many more)
Additionally BMD can also be compiled as a stand alone PC application, (we call it Black Magic App, or BMA and formally known as hosted) that can act as a software in the middle, similar to the way OpenOCD works. In this case BMP is only acting as a USB to JTAG/SWD translator and the Black Magic App (BMA) does all the heavy lifting. Additionally this also allows the use of BMA with other probe hardware running non Black Magic Firmware (BMF), like for example: JLink, ST-Link, sw-link, FTDI and more.
- Black Magic Debug (abbreviated to BMD) - Is the project name, an umbrella describing the project but also sometimes acts as the term describing the software.
- Black Magic Firmware (abbrev. BMF) - More specifically just the Black Magic Firmware that is loaded either onto Black Magic Probe hardware or onto any other supported host hardware.
- Black Magic Hosted aka. Black Magic App (abbrev. BMA) - The Black Magic Debug system compiled as a PC application instead of a Firmware. Allowing it to be used in software in the middle mode instead of being contained to a hardware device. This is also sometimes just called “hosted” in the context of the project.
- Black Magic Probe (abbrev. BMP) - The “native” Black Magic Debug (BMD) hardware that was specifically designed and intended for the BMD project. This is the hardware you can buy from 1BitSquared, Adafruit and other resellers as “the Black Magic Probe”.
- Black Magic Core (Abbrev. BMC) - This describes the core code of the project that handles JTAG/SWD protocol, implements Flashing, target detection and all target specific functionality. It does not include host platform specific code like for example code that toggles GPIO.
- Host Platform - Refers to the hardware that the BMD software (either Firmware or Application) runs on. It can be the PC, STM32, lm4f or some more specific hardware like Black Magic Probe aka. native, ST-Link, sw-link and so on.
- Probe aka. Cable - Refers to the hardware that is connected between the PC running GDB (and/or BMA) and the Target (DUT). In the simplest case it is a USB to JTAG/SWD converter like an FTDI chip but in most cases it is a dedicated hardware running either our BMF or some other firmware.
- Target - Refers to the Device Under Test (DUT), this is the hardware that the user wants to debug using BMD.
Changelog V1.8.0
Core Changes
- SWD debug: Immediately turn around SWDIO after reading with parity to avoid driving SWDIO until the next command. [JojoS] [UweBonnes]
- Try harder to read the
ROMTABLE
when the target is sleeping [UweBonnes] - Remove forced halt from
cortexm_probe
[UweBonnes] - Narrow down probing for targets based on the designer ID to decrease the size of the search tree and speed up detection [UweBonnes]
- Allow debugging of not fully supported (no flash routine) ARM Cortex-M targets [UweBonnes]
- Fix version.h generation for the
all_platforms
build target [UweBonnes] - Print Morse code messages in plain text to the USB UART endpoint when built with
ENABLE_DEBUG
anddebug_bmp
is enabled [UweBonnes] - Added documentation for building Black Magic PC Hosted in MSYS2 [stoyan-shopov]
- Added more cycles in
cortexm_halt_resume
to always keep the CPU going [UweBonnes] - Store
CPUID
in target structure [UweBonnes] - GDB: Fixed a lost of sync protocol error in GDB protocol
REMOTE_SOM
state [stoyan-shopov] - command: Fixed a build error caused by
cortexm_wait_timeout
using signed integers [stoyan-shopov] - JTAG: Added debug output verbosity of found devices [UweBonnes]
- version.h: Removed include from
platform.h
and consolidated identifier string generation, decreasing build churn [UweBonnes] - CLI: Consolidated
mon version
output [UweBonnes] - CLI: Added JTAG/SWD protocol frequency setting [UweBonnes]
- target: Changed
target_foreach
signature to return target count instead of a bool indicating that there are some targets present [UweBonnes] - docs: Corrected and updated documentation describing the available baud rate limits for SWO usage [UweBonnes]
- firmware: Unify USB serial number handling [UweBonnes]
- Turn off the error LED on successful attach to target [compuphase]
- Remote JTAG: Fix bitmask calculation bug [UweBonnes]
- Remote JTAG: Split up large transactions [UweBonnes]
- GDB: Escape
*
in responses of the GDB remote serial protocol to avoid interpretation as RLE sequence start [compuphase] - crc32: Abort with from
target_mem_read
whengeneric_crc32
fails [UweBonnes] - remote: Allow for packets to be larger than 256 bytes [UweBonnes]
- tpwr: Test VRef voltage before enabling target power (
mon tpwr
) to avoid potential power conflict [compuphase] - GDB: Better error reporting when the monitor command fails [UweBonnes]
- GCC11 compilation fixes [jamesturton] [UweBonnes] [dragonmux]
- crc32: Define
start_time
when debug is enabled as it is used for crc32 benchmarking [xobs] - doc: Update references from blacksphere to blackmagic-debug due to organization rename [esden]
- crc32: Fixed launchpad-icdi build [dragonmux]
- GDB: Cleaned up the sscanf usage in GDB Z packet handler [fabalthazar]
- GDB: Added putpacket2 which allows sending two sub messages as one [mean00]
- GDB: Fix unused variables and naming [mean00]
- GDB: Correct function naming scheme for consistency [mean00]
- GDB: Formatting cleanup [dragonmux]
- Updated Copyright monitor command output and iManufacturer strings to reflect the organization rename from Black Sphere Technologies to Black Magic Debug [esden]
Build system Changes
- Remove no longer needed
libftdi
andpc-stlinkv2
platforms [UweBonnes] - Added
HOSTED_BMP_ONLY=1
option to allow for easier building of the PC-hosted Black Magic Debug Application when only BMP support is needed [UweBonnes] [stoyan-shopov] - Fixed builds using newer GNU make versions that remove
-
prefix from$(MAKEFLAGS)
[noahp] - Compile with
-Os
by default. Can be overridden usingmake OPT_FLAGS=...
. SWD/JTAG bitbang code remains compiled using-O3
for good bitbang speed [UweBonnes] - Fixed compilation of BMA on MacOS where
hidapi-libusb
is called justhidapi
[UweBonnes] - Added linker flag to show memory usage [esden]
- Only build needed libopencm3 libraries [esden]
- Don’t try to report memory usage for BMA builds, as this breaks clang builds [esden]
VCS Changes
- Added
src/artifacts
directory created when runningall_platforms
build to.gitignore
[noahp] - Added
.gitattributes
for better control of line endings [xobs]
CI System Changes
- Updated travis to use bionic instead of trusty, which means we don’t need to build libftdi1 any more [UweBonnes]
- Added GitHub Actions for builds on push and run test build some PRs [Qyriad]
- Added BMA build to github actions to catch more potential issues [esden]
- Added libftdi1 and hidapi dependency installation [esden]
Script/Utility Changes
- all python script utilities (
dfu-convert.py
, , , ) ported to Python 3 [agners] - stm32_mem.py: Allow UTF-8 characters in manufacturer ID, product ID and serial number [UweBonnes]
- stm32_mem.py: Wait longer for device to appear [UweBonnes]
- bootprog.py: Updated to run on python3 [esden]
- get_openocd_nrf51_ids.py: Updated to run on python3 [esden]
- gdb.py, hexprog.py: Updated to run on python3 [markrages]
- stm32_mem.py: More python3 port fixes, cosmetic cleanup and remove unnecessary Python 2 compatibility [schodet]
- dfu-convert.py: Update for Python 3 and drop Python 2 support [schodet]
- bootprog.py: Finish converting to Python 3 [schodet]
- dfu.py, gdb.py, get_openocd_nrf51_ids.py, hexprog.py, stm32_mem.py: More Python 3 updates, also changed the shebang to use ...
Stable release v1.7.1
Changes since V1.7:
- version.h now reflects the latest tag.
Otherwise the version is misleading for users and problem reports.
Blackmagic V1.6.2-rc1: Second pre-release
- More FTDI work
- Hosted can auto-detect BMP firmware also on Windows and Darwin
- Many bug-fixes, enhancements amd more devices
w.r.t. 1.6.2-rc0
BMP high-level remote procedures and unified hosted
- Support BMP/remote, Stlink, Jlink and CMSIS-Dap with a single executable.
- Export BMP high level procedures for use with hosted and other programs.
- Bump up version to allow fallback to low level BMP remote function when BMP firmware is too old.
Stable Release V1.6.1
We are happy to announce the release of V1.6.1 Black Magic Probe firmware.
Black Magic V1.6.1
This version ships on V2.1 Black Magic Probe hardware with serial number 158 and higher.
Change Log
- Fixed a possible crash (issue #222) caused by an error in the logic freeing removed breakpoints.