View all posts

pyOCD 0.43.0 released

Feb 23, 2026
Teo Mahnic

pyOCD v0.43.0 has been released and is available from PyPI. This version includes several improvements and bug fixes. The complete list of changes is provided below

To upgrade pyOCD, just run pip:

pip install --upgrade pyocd

A major enhancement in this version is the extension of the run subcommand to support SEGGER’s Real-Time Transfer (RTT) and SystemView. RTT channels can now be configured individually through *.cbuild-run.yml, enabling flexible routing of target communication. Channels may operate as standard I/O bridges, forwarding target output to the console while relaying user input back to the device, or as Telnet endpoints, where a dedicated TCP server bridges a remote client directly to a selected RTT channel. For trace-oriented workflows, specific channels can be configured for SystemView capture, allowing trace data to be written to a file for post-run analysis.

SystemView integration includes automatic handling of start and stop commands, streamlining trace capture without manual synchronization. The generated *.SVDat files can be opened directly in SEGGER’s SystemView tool, tool for inspection and analysis.

Double buffering has been re-enabled for internal targets, with STM32H7xx devices excluded due to known issues. Internal flash algorithms have been unified around the page_buffers mechanism, and legacy template elements have been removed to simplify maintenance and ensure consistent behavior across targets.

Improvements also include better log messages in GDB Server, when client disconnects from the server and non-blocking reading of the STDIO console.

Thanks again to all the contributors who helped make this release possible! ❤️

v0.43.0 on GitHub
v0.43.0 on PyPI


New Features

  • run subcommand:
    • Add support for SEGGER’s RTT and SystemView (configured via *.cbuild-run.yml)
    • Support per-channel RTT configuration with the following modes:
      • Standard I/O: All data received from the target on this channel will be printed to the sdtout, and all user input from the stdin will be sent to the target
      • Telnet: A Telnet server is started on the specified port, creating a bridge between the TCP connection and the corresponding RTT channel
      • SystemView: Capture the trace data from the specified RTT channel and save it to a user-defined file
    • SystemView integration:
      • Support for automatic start and stop command handling
      • Captured trace data (*.SVDat file) can be directly opened using SEGGER’s SystemView analysis tool

Improvements

  • Flash programming:
    • Re-enable double buffering mechanism for internal targets, except STM32H7xx (known to have issues)
    • Migrate all internal target support to use page_buffers instead of begin_data in flash algorithms
    • Remove begin_data from the algorithm template
  • GDB Server:
    • Improve log message when client gets disconnected from the server
  • Standard I/O:
    • Enable non-blocking read of the STDIO console
  • CMSIS-DAP v2:
    • Send ZLP instead of a dummy byte to terminate OUT transfer
  • CoreSight:

Fixes

  • Flash programming:
    • Fix LPC4088 flash algorithm page_size
  • CMSIS-Packs:
    • Fix raised exception on filename property access when using extracted packs (@timll-mchp)
  • RTT:
    • Fix retrieval of available/free bytes for up/down channels
    • Fix control-block not found when the first character of the control-block ID was not present in the read memory (@HaoYDai)

Other

  • CI: add nightly workflow that builds PyInstaller artifacts from the develop branch

New Contributors

  • @MiloradCvjetkovic made their first contribution in https://github.com/pyocd/pyOCD/pull/1882
  • @timll-mchp made their first contribution in https://github.com/pyocd/pyOCD/pull/1901
  • @HaoYDai made their first contribution in https://github.com/pyocd/pyOCD/pull/1730

Full Changelog: https://github.com/pyocd/pyOCD/compare/v0.42.0…v0.43.0