|
| 1 | +--- |
| 2 | +title: "pyOCD 0.43.0 released" |
| 3 | +date: 2026-02-23 |
| 4 | +categories: |
| 5 | + - release |
| 6 | +tags: |
| 7 | + - news |
| 8 | + - release |
| 9 | + - release-patch |
| 10 | + - pyocd |
| 11 | +author: Teo Mahnic |
| 12 | +excerpt: "Introducing SEGGER RTT and SystemView support in the `run` subcommand, with flexible channel configuration." |
| 13 | +--- |
| 14 | + |
| 15 | +pyOCD v0.43.0 has been released and is available from PyPI. This version includes several improvements and bug fixes. |
| 16 | +The complete list of changes is provided below |
| 17 | + |
| 18 | +To upgrade pyOCD, just run `pip`: |
| 19 | + |
| 20 | +``` |
| 21 | +pip install --upgrade pyocd |
| 22 | +``` |
| 23 | + |
| 24 | +A major enhancement in this version is the extension of the `run` subcommand to support SEGGER's [Real-Time Transfer (RTT)](https://www.segger.com/products/debug-probes/j-link/technology/about-real-time-transfer/) |
| 25 | +and [SystemView](https://www.segger.com/products/development-tools/systemview/). RTT channels can now be configured |
| 26 | +individually through `*.cbuild-run.yml`, enabling flexible routing of target communication. Channels may operate as |
| 27 | +standard I/O bridges, forwarding target output to the console while relaying user input back to the device, or as |
| 28 | +Telnet endpoints, where a dedicated TCP server bridges a remote client directly to a selected RTT channel. |
| 29 | +For trace-oriented workflows, specific channels can be configured for SystemView capture, allowing trace data to be |
| 30 | +written to a file for post-run analysis. |
| 31 | + |
| 32 | +SystemView integration includes automatic handling of start and stop commands, streamlining trace capture without |
| 33 | +manual synchronization. The generated `*.SVDat` files can be opened directly in SEGGER’s SystemView tool, |
| 34 | +tool for inspection and analysis. |
| 35 | + |
| 36 | +Double buffering has been re-enabled for internal targets, with `STM32H7xx` devices excluded due to known issues. |
| 37 | +Internal flash algorithms have been unified around the `page_buffers` mechanism, and legacy template elements have |
| 38 | +been removed to simplify maintenance and ensure consistent behavior across targets. |
| 39 | + |
| 40 | +Improvements also include better log messages in GDB Server, when client disconnects from the server and non-blocking |
| 41 | +reading of the STDIO console. |
| 42 | + |
| 43 | +Thanks again to all the contributors who helped make this release possible! ❤️ |
| 44 | + |
| 45 | +[v0.43.0 on GitHub](https://github.com/pyocd/pyOCD/releases/tag/v0.43.0) \ |
| 46 | +[v0.43.0 on PyPI](https://pypi.org/project/pyocd/0.43.0) |
| 47 | + |
| 48 | +--- |
| 49 | + |
| 50 | +## New Features |
| 51 | +- `run` subcommand: |
| 52 | + - Add support for SEGGER's [RTT](https://www.segger.com/products/debug-probes/j-link/technology/about-real-time-transfer/) and [SystemView](https://www.segger.com/products/development-tools/systemview/) (configured via `*.cbuild-run.yml`) |
| 53 | + - Support per-channel RTT configuration with the following modes: |
| 54 | + - 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 |
| 55 | + - Telnet: A Telnet server is started on the specified port, creating a bridge between the TCP connection and the corresponding RTT channel |
| 56 | + - SystemView: Capture the trace data from the specified RTT channel and save it to a user-defined file |
| 57 | + - SystemView integration: |
| 58 | + - Support for automatic start and stop command handling |
| 59 | + - Captured trace data (`*.SVDat` file) can be directly opened using SEGGER's SystemView analysis tool |
| 60 | + |
| 61 | +## Improvements |
| 62 | +- Flash programming: |
| 63 | + - Re-enable double buffering mechanism for internal targets, except STM32H7xx (known to have issues) |
| 64 | + - Migrate all internal target support to use `page_buffers` instead of `begin_data` in flash algorithms |
| 65 | + - Remove `begin_data` from the algorithm template |
| 66 | +- GDB Server: |
| 67 | + - Improve log message when client gets disconnected from the server |
| 68 | +- Standard I/O: |
| 69 | + - Enable non-blocking read of the STDIO console |
| 70 | +- CMSIS-DAP v2: |
| 71 | + - Send ZLP instead of a dummy byte to terminate OUT transfer |
| 72 | +- CoreSight: |
| 73 | + - Always unlock ITM (do not check SLI and SLK bits in LSR register) |
| 74 | + >[Cortex-M7 (AT610) and Cortex-M7 with FPU (AT611) Software Developer Errata Notice](https://developer.arm.com/documentation/SDEN1068427/0110/?lang=en) |
| 75 | + 513195: Lock Status Indication incorrectly reads as one |
| 76 | + |
| 77 | +## Fixes |
| 78 | +- Flash programming: |
| 79 | + - Fix LPC4088 flash algorithm `page_size` |
| 80 | +- CMSIS-Packs: |
| 81 | + - Fix raised exception on `filename` property access when using extracted packs (@timll-mchp) |
| 82 | +- RTT: |
| 83 | + - Fix retrieval of available/free bytes for up/down channels |
| 84 | + - Fix `control-block` not found when the first character of the `control-block ID` was not present in the read memory (@HaoYDai) |
| 85 | + |
| 86 | +## Other |
| 87 | +- CI: add nightly workflow that builds PyInstaller artifacts from the `develop` branch |
| 88 | + |
| 89 | +## New Contributors |
| 90 | +* @MiloradCvjetkovic made their first contribution in https://github.com/pyocd/pyOCD/pull/1882 |
| 91 | +* @timll-mchp made their first contribution in https://github.com/pyocd/pyOCD/pull/1901 |
| 92 | +* @HaoYDai made their first contribution in https://github.com/pyocd/pyOCD/pull/1730 |
| 93 | + |
| 94 | +**Full Changelog**: https://github.com/pyocd/pyOCD/compare/v0.42.0...v0.43.0 |
0 commit comments