Major release
This release contains breaking changes. If you're upgrading from a previous version of Bloom, you'll need to carefully consider the changes made in this release. Please follow the instructions provided in the migration tutorial.
Breaking changes
-
With Bloom's new TDF format, the use of TDF keys (which use snake casing:
some_value
) is going to become more prominent in project configuration files (bloom.yaml). In addition, the inconsistency of casing in bloom.yaml was beginning to bother me. For these reasons, I have decided to change all keys and values to snake case:tool: # Old: name: "atmel-ice" physicalInterface: "debug-wire" # New: name: "atmel_ice" physical_interface: "debug_wire" server: # Old: name: "avr-gdb-rsp" # New: name: "avr_gdb_rsp" # Same applies to all other keys and values that used to use kebab-casing or camelCasing...
-
The
variantName
target config parameter has been removed. See the newdefault_variant_key
Insight config parameter for similar functionality. It's worth noting that this functionality may no longer be required, as the Insight GUI will now persist the selected variant across debug sessions, eliminating the need for specifying the variant in bloom.yaml, for most cases. -
The
svd
GDB monitor command has been removed. SVDs can be generated via the new target details page on the Bloom website (e.g. https://bloom.oscillate.io/docs/target/atmega4809).
RISC-V support
Support for RISC-V has been introduced in this release, with initial support being limited to a handful of RISC-V targets from WCH:
- WCH CH32V003
- CH32V003F4P6
- CH32V003F4U6
- CH32V003A4M6
- CH32V003J4M6
- WCH CH32X035
- CH32X035R8T6
- CH32X035C8T6
- CH32X035G8U6
- CH32X035G8R6
- CH32X035F8U6
- CH32X035F8P6
WCH-LinkE
Support for the WCH-LinkE debug tool has been introduced in this release, alongside an implementation of a RISC-V debug translator. The wch_linke
configuration value can be used to select the tool in bloom.yaml:
tool:
name: "wch_linke"
# ...
RISC-V GDB debug server
A RISC-V compatible GDB debug server has been introduced in this release. The riscv_gdb_rsp
configuration value can be used to select the server in bloom.yaml:
server:
name: "riscv_gdb_rsp"
# ...
Delta programming
Delta programming allows Bloom to significantly reduce programming times when uploading small changes to the program binary, during a debug session. Only the changes are programmed. Delta programming is enabled by default. It can be disabled via the new delta_programming
target config parameter:
target:
# ...
delta_programming: false
Delta programming is only supported on AVR UPDI, debugWIRE and WCH RISC-V targets. AVR PDI and JTAG targets do not support delta programming.
Support for additional AVR targets
AVR Target | Config value |
---|---|
ATtiny3224 | attiny3224 |
ATtiny3226 | attiny3226 |
ATtiny3227 | attiny3227 |
AVR16EA28 | avr16ea28 |
AVR16EA32 | avr16ea32 |
AVR16EA48 | avr16ea48 |
AVR16EB14 | avr16eb14 |
AVR16EB20 | avr16eb20 |
AVR16EB28 | avr16eb28 |
AVR16EB32 | avr16eb32 |
AVR32EA28 | avr32ea28 |
AVR32EA32 | avr32ea32 |
AVR32EA48 | avr32ea48 |
AVR32EB14 | avr32eb14 |
AVR32EB20 | avr32eb20 |
AVR32EB28 | avr32eb28 |
AVR32EB32 | avr32eb32 |
AVR16DU14 | avr16du14 |
AVR16DU20 | avr16du20 |
AVR16DU28 | avr16du28 |
AVR16DU32 | avr16du32 |
AVR32DU14 | avr32du14 |
AVR32DU20 | avr32du20 |
AVR32DU28 | avr32du28 |
AVR32DU32 | avr32du32 |
AVR64DU28 | avr64du28 |
AVR64DU32 | avr64du32 |
Register access GDB monitor commands
The list regisers (lr
), read register (rr
), write register (wr
) and write register bit field (wrb
) GDB monitor commands have been introduced in this release. See Accessing target registers via GDB for more.
Automatic enabling of EDBG/AVR mode on MPLAB Snap and PICkit4 tools
Bloom will now detect the MPLAB Snap and PICkit 4 tools in "PIC mode", and perform the switch operation to enable EDBG/AVR mode.
Other changes
-
Included program counter in the output of the
monitor reset
GDB command. -
The format of the GDB monitor
eeprom fill
command has changed. It now expects the fill value to be provided as the third argument, without the--value
prefix. Somon eeprom fill AABBCC
instead ofmon eeprom fill --value=AABBCC
. The--value
prefix incorrectly implied that the argument was optional. -
GDB packet acknowledgement has been disabled by default in the GDB debug server. This means Bloom will attempt to disable packet acknowledgment with GDB at the beginning of each connection. This comes with some fairly significant performance improvements, as GDB was taking over 40 ms to acknowledge receipt of response packets, causing delays of almost 1 second, in some cases. For those who wish to keep packet acknowledgment enabled, set the new
packet_acknowledgement
debug server config param totrue
:server: packet_acknowledgement: true # <- Bloom will keep packet acknowledgment enabled # ...
-
New target driver pass-through commands, for invoking target-specific functionality via GDB monitor commands.
-
Added the
--capabilities-machine
CLI command, to list the build's capabilities (supported targets, insight GUI, etc), in JSON format. -
Disabled the CMSIS-DAP command delay by default for all EDBG tools, as it was choking the EDBG driver and causing a noticeable drag on Bloom's performance. Introduced a new debug tool config param to enable it, if needed:
tool: edbg_driver: cmsis_command_delay: 35 # <- Delay (in milliseconds) for all CMSIS-DAP commands sent via Bloom's EDBG driver. 35 ms was the old default # ...
-
Introduced headless builds - these are builds that exclude the Insight GUI at build time, reducing Bloom's CPU and memory footprint. Headless builds can be run on resource-constrained hardware, such as Raspberry Pi. They have no GUI dependencies.
-
Added
default_variant_key
Insight config parameterinsight: default_variant_key: "atmega328pb_an" # ...
The Insight GUI will use this when selecting a target variant at startup.
-
The selected target variant in the Insight GUI will now be persisted across debug sessions.
Bug fixes
- Target signature verification was failing on some Xplained Nano development boards, in certain circumstances. Reported by @fakr00n
- Bloom was sending a null byte to GDB, when an empty response was expected. This did not appear to cause any issues with typical usage. Reported by @ccrause
- The Insight GUI wasn't correctly selecting the target variant at startup. Reported by @lkoepsel
- Flashing AVR targets with pending software breakpoint removal requests was resulting in program memory corruption, when debugging with an EDBG tool. The tool was attempting to remove the breakpoints that had already been overwritten as a result of the programming session.