Skip to content

Releases: bloombloombloom/Bloom

Bloom v2.0.0

23 Feb 17:46
Compare
Choose a tag to compare

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.

Bloom v1.0.0

26 Sep 13:31
Compare
Choose a tag to compare

Major release


This release contains breaking and behavioural 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

  • JSON project configuration files (bloom.json) are no longer supported.
  • The avr8 target has been removed - you must now specify the exact target name in your project configuration file.
  • The enabled Insight config parameter has been removed. See the activateOnStartup parameter.
  • The releasePostDebugSession debug tool config parameter has been removed. If you want Bloom to give up control of the debug tool, trigger a shutdown.
  • The old updateDwenFuseBit AVR8 config parameter was renamed to manageDwenFuseBit in version 0.11.0. The old parameter name was still accepted, but has been removed in this release.
  • The debugTool configuration key (in bloom.yaml) has been renamed to tool.
  • The debugServer configuration key (in bloom.yaml) has been renamed to server.

Behavioural changes

  • By default, the Insight GUI will no longer activate on startup. It can be activated, on-demand, via the new monitor insight GDB command. This behaviour can be changed via the new activateOnStartup insight config parameter.
  • Closing the Insight window will no longer trigger a shutdown. This behaviour can be changed via the new shutdownOnClose insight config parameter.
  • Bloom will no longer go into a suspended state when control of the debug tool is lost. Instead, it will just shutdown abruptly.

New Insight config parameters:

insight:
  activateOnStartup: false # <- If true, the Insight GUI will be activated immediately after startup (which is what it used to do, prior to v1.0.0).
  shutdownOnClose: false # <- If true, Bloom will shutdown when the user closes the main Insight window (which is what it used to do, prior to v1.0.0).

Support for additional AVR-DD targets

  • Support for the following targets is included in this release:

    • AVR16DD14 (untested)
    • AVR16DD20 (untested)
    • AVR16DD28 (untested)
    • AVR16DD32 (untested)
    • AVR32DD14 (untested)
    • AVR32DD20 (untested)
    • AVR32DD28 (untested)
    • AVR32DD32 (untested)

Hardware breakpoints

  • Bloom will now make use of any hardware breakpoints available on the target.

  • Once all hardware breakpoint resources have been exhausted, Bloom will fall back to software breakpoints.

  • This functionality can be disabled via the new hardwareBreakpoints target config param:

    target:
      name: "atmega4809"
      physicalInterface: "updi"
      hardwareBreakpoints: false # <-- Setting this param to false will disable Bloom's use of HW breakpoints.
  • This functionality is enabled by default (hardwareBreakpoints defaults to true).

  • Upon target activation, Bloom will report the number of available hardware breakpoints on the target:

    2023-09-20 20:36:45.768 BST [TC] [52]: [INFO] Target activated
    2023-09-20 20:36:45.768 BST [TC] [53]: [INFO] Target ID: 0x1e9651
    2023-09-20 20:36:45.768 BST [TC] [54]: [INFO] Target name: ATmega4809
    2023-09-20 20:36:45.768 BST [TC] [55]: [INFO] Available hardware breakpoints: 1
    2023-09-20 20:36:45.809 BST [DS] [58]: [INFO] Starting DebugServer
    

Program memory caching

  • Bloom will now cache the target's program memory

  • This functionality can be enabled/disabled via the new programMemoryCache target config param:

    target:
      name: "atmega4809"
      physicalInterface: "updi"
      programMemoryCache: false # <-- Setting this param to false will disable program memory caching.
  • This functionality is enabled by default (programMemoryCache defaults to true).

  • Users should disable this if their application can update program memory (e.g. bootloaders).

Range stepping

  • Bloom is now able to decode and analyse AVR8 opcodes from the target's program memory. This enables the ability to perform range stepping on the target, where GDB will instruct Bloom to step within a PC range and only halt target execution when it goes out of the given range.

  • Bloom will use breakpoints (hardware or software) to intercept any instructions within the given range, that may result in the target leaving the range.

  • In most cases, this results in improved stepping performance. There's at least one known case where this can have a negative effect on stepping performance. See http://bloom.oscillate.io/docs/limitations#stepping-performance for more.

  • This functionality can be enabled/disabled via the new rangeStepping server config param:

    server:
      name: "avr-gdb-rsp"
      ipAddress: "127.0.0.1"
      port: 1442
      rangeStepping: true # <-- Setting this param to true will enable range stepping.
  • This functionality is enabled by default (rangeStepping defaults to true).

Other changes

  • Changed implementation of preserveEeprom function to make use of the target's EESAVE fuse bit, which is faster than the backup-erase-restore approach.
  • The Insight component can be removed at build time, via the EXCLUDE_INSIGHT parameter. See the root README.md for more.
  • Added key press event handlers to some Insight windows.
  • Added change list in snapshot diff window.
  • Fractional second added to logs.
  • Renamed debugLoggingEnabled parameter to debugLogging. The old name is still accepted, for now.

Bug fixes

  • The size of the main Insight window was not being properly restored on startup.
  • Missing includes resulting in failing builds with GCC 13+, reported and fixed by @jpf91
  • Breakpoints set by GDB were not being restored after a programming session. This was only noticeable when GDB was configured to keep breakpoints inserted.

Bloom v0.12.3

18 Jul 21:59
Compare
Choose a tag to compare

Bug fix release


  • Bloom was failing to manage the DWEN fuse bit on some development boards (Xplained Mini, possibly others). See Debugging debugWire targets with Bloom for more.
  • Intersecting memory regions were not being detected properly.
  • Premature enabling of the hex viewer in the memory inspection pane, after a programming session, was resulting in seg faults.
  • Difference count in the snapshot diff window was including excluded bytes.
  • Fixed version number comparison bug.

Bloom v0.12.2

18 May 19:35
Compare
Choose a tag to compare

Bug fix release


  • Corrected seg fault which was occurring on some Arch-based distros. Was caused by the distributed libstdc++ shared object (which was incompatible with libGLX_mesa.so). I've removed the distributed libstdc++ from the Arch package, as the package manager can satisfy the dependency.

Bloom v0.12.1

12 May 18:22
Compare
Choose a tag to compare

Bug fix release


  • Fixed "Unknown family name" error for new AVR EA targets.

Bloom v0.12.0

08 May 15:42
Compare
Choose a tag to compare

Feature release


EEPROM access via GDB

  • Support for EEPROM access via GDB - all GDB memory access commands can now be used with EEPROM. The 0x00810000 offset must be applied to EEPROM addresses.
  • Support for loading ELFs with EEPROM sections.
  • New monitor eeprom fill command, to fill EEPROM with a given value.

Support for new AVR-EA targets

Insight hex viewer performance improvements (in preparation for memory snapshot viewer and diffs)

  • Refactored the HexViewer to limit the number of QGraphicsItem objects - significantly reducing RAM usage and improving performance when inspecting large memories.
  • Stress tested with memories up to 5MB (meaning over 5 million byte items) - more than enough for current use cases.
  • Additional work done in preparation for nested group items (for object annotations - something that will be looked at later on).

Memory snapshots via Insight

  • A snapshot of the entire contents of RAM, EEPROM or FLASH can now be captured and stored in the project directory.
  • Snapshots can be viewed, individually.
  • Snapshots can be compared to others, or to the current memory.
  • Snapshots can be restored (RAM and EEPROM only).

Flash memory inspection via Insight

  • Flash memory can now be inspected via Insight
  • Snapshots can be taken and be compared against.
  • Worth keeping in mind: Given the sizes of flash memory on some AVR targets, the hex viewer can consume a considerable amount of RAM.

Other improvements

  • The Insight window now uses ~60% less RAM, and is much more responsive.
  • Focused memory regions can now span multiple lines.
  • Replaced stack highlighting with stack grouping in RAM inspection pane - stack memory is now displayed as a separate group, with additional annotations, to clearly distinguish it from the rest of the target's RAM.
  • Background tasks window
  • Task progress bar on memory inspection pane
  • Added some new "Copy Selection" actions to hex viewer
  • Added preserveEeprom AVR8 target config boolean parameter, to control the backup-then-restore function employed for JTAG and UPDI targets. Setting this to false will improve upload times for those who don't care about losing EEPROM data when uploading program changes.
  • Added OCDEN fuse bit management for JTAG-enabled targets. Controlled via the new manageOcdenFuseBit AVR8 target config boolean parameter. See https://bloom.oscillate.io/docs/configuration
  • Improved error messages
  • For hybrid debug tools (MPLAB Snap and PICkit 4), Bloom will now check if the device is in AVR mode and report back to the user if the device was found on the system, but not in AVR mode.

Bug fixes

  • Memory inspection panes were remaining disabled when switching between them.
  • From CLion version 2023.1, Bloom was failing to detect CLion managing its process, resulting in the known shutdown bug.
  • Interrupts from GDB were not being properly handled, resulting in some being ignored.

Bloom v0.11.1

24 Sep 18:09
Compare
Choose a tag to compare

Bug fix release


Fixes:

  • YAML parsing exceptions were not being properly handled
    Exceptions thrown by the yaml-cpp library, when processing the user's project configuration file (bloom.yaml), were not being handled properly. This was resulting in syntax errors in bloom.yaml causing Bloom's process to unexpectedly abort.

  • Intermittent 'illegal target state' error on AVR8 targets, after a target reset
    After resetting an AVR8 target, the EDBG debug tool would sometimes report an 'illegal target state' error in response to any command that was sent immediately after receiving the break event (triggered by the reset). It seems as if the target is not fully reset (or stopped?), even after the point of receiving the break event. This was fixed by ensuring that the target is given some time after a reset, before sending any other commands.

  • Incorrect value annotation font style in hex viewer
    Due to a bug in the AnnotationItem class, annotation item labels were not being rendered correctly. This issue was intermittent.

Bloom v0.11.0

18 Sep 17:39
Compare
Choose a tag to compare

Feature release


Project configuration

  • Project configuration files are now expected to be in YAML format.
  • The init command will now produce a YAML configuration file (bloom.yaml).
  • To minimise disruption for current users, JSON configuration is still accepted. In the absence of a bloom.yaml file, Bloom will fall back to bloom.json.
  • Renamed the updateDwenFuseBit AVR8 config param to manageDwenFuseBit. The old param is still supported but will be removed in a later release.

Insight

  • Memory inspection panes
    • Can now be detached from the main Insight window
    • Auto-refresh is disabled by default (can be enabled by right-clicking the refresh tool button)
    • Individual bytes can be selected in the hex viewer and copied to the clipboard
    • Address labels in the hex viewer can be configured to display absolute or relative addresses (via a context menu presented when right-clicking any address label). This setting is persisted through debug sessions.
    • Added endianness/first-byte indicator on value annotations of focused memory regions, in the hex viewer.
    • Stale memory indicator
  • Some minor style tweaks to the bitset widget on the register inspection window.

SVD generation via GDB monitor command

  • monitor svd - Generates SVD and outputs to a file in the project directory.
  • monitor svd --out - Generates SVD and sends the output to GDB, to display as command output. GDB front-ends (IDEs) can utilise this without requiring any user action.
  • The monitor target-info machine command has been removed.

Other

  • Upgraded Qt dependency to 6.2.4 LTS
  • Verifying AVR8 physical interface configuration
    • Before activating the AVR8 target, Bloom will now confirm the selected physical interface is supported by the selected target. Upon confirmation failure, Bloom will warn the user and provide a list of the physical interfaces supported by the selected target.
    • Bloom will not abandon the startup routine upon confirmation failure, due to the possibility of false-positives.
    • Bloom can only perform this check in environments where the specific AVR8 target name has been provided in the environment configuration. Use of the generic avr8 target name will disable Bloom's ability to perform this check.

Bug fixes

  • Widgets on the Insight window were overlapping on KDE Plasma desktops, due to the minimum window size being ignored. This was fixed by moving away from fixed minimum sizes on the memory inspection panel widget. See #48 for more.
  • Bloom was failing to program some UPDI targets due to some buffers from GDB being misaligned, along with the lack of grouped flash writes. This was affecting targets such as the Atmega4809 on the Xplained Pro evaluation board.
  • Bloom wasn't resetting the target after programming.
  • Long memory reads issued by the Insight GUI were occupying the TargetController for too long, preventing it from servicing commands from the GDB debug server, resulting in GDB timeouts (which GDB would report as packet errors). These memory reads have now been split into batches, so that the TargetController can service other commands in-between, reducing the likelihood of timeouts when servicing a GDB command.
  • Some instances of the error dialogue were displaying escaped characters.
  • When using CLion's 'Embedded GDB Server' configuration, CLion was not allowing Bloom any opportunity to shutdown safely. As a result, the connected hardware was being left in an unknown state, which sometimes resulted in startup failures upon the user starting a new debug session. For information on how this was fixed, see #53.

Bloom v0.10.0

05 Jun 21:59
Compare
Choose a tag to compare

Feature release


Support for programming

Bloom can now write to the target's program memory. GDB's load command can be used to program the target. Bloom users no longer need to rely on other software to apply code changes during their debug sessions.

Bug fixes:

  • Alignment bug that resulted in EDBG-based debug tools returning an error when attempting to access non-word-aligned addresses in flash memory.
  • A typo was resulting in invalid CMSIS command packet sizes, taking the size above the HID report size, resulting in an error when attempting to send commands with a large payload. This was affecting the EDBG driver.
  • Incorrect buffering was resulting in invalid CMSIS AVR command sizes, resulting in a similar issue as described above. As with above, this issue only affected the EDBG driver and only became apparent when sending commands with a large payload.
  • Insight was needlessly refreshing data upon the start of a debug session.

Bloom v0.9.1

15 May 11:06
Compare
Choose a tag to compare

Bug fix release


Fixes:

  • GDB generating invalid backtraces for debugWire sessions
    Bloom was incorrectly applying an offset to all paged flash memory reads. This meant that it was reading the wrong areas in memory. This was resulting in GDB generating invalid backtraces. This bug only affected debugWIre sessions. See #40

  • GDB attempting to access flash memory at invalid addresses
    Bloom was not providing GDB with a target memory map, so GDB would attempt to access flash memory at invalid addresses. Bloom now supports the qXfer:memory-map:read:: GDB command packet - meaning we now provide GDB with a memory map upon request.