Skip to content

Bloom v2.0.0

Latest
Compare
Choose a tag to compare
@navnavnav navnavnav released this 23 Feb 17:46

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 new default_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. So mon eeprom fill AABBCC instead of mon 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 to true:

    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 parameter

    insight:
      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.