pyOCD 0.37.0 released
Jul 4, 2025
Teo Mahnic
Version 0.37.0 of pyOCD has just been released and is available from PyPI. It’s been several months since a feature release, and this one includes a major new addition. Some smaller changes and bug fixes have also been included in this release. The complete list is shown below.
To upgrade pyOCD, just run pip
:
pip install --upgrade pyocd
This release marks a significant milestone by introducing a built-in support for CMSIS-Toolbox Run and Debug Management,
enabling a standardized, YAML-driven workflow for specifying debug targets. By passing the new --cbuild-run
command-line option followed by the path to a *.cbuild-run.yml
file, the following is imported directly into the
active debug session:
- target selection,
- flash algorithms,
- memory layout description,
- device debug topology,
- debug sequences
Because each YAML file fully describes a single target type, explicit use of --target
is no longer required.
This implementation integrates seamlessly with Arm CMSIS Debugger
extension for VS Code, streamlining end-to-end debug setup for CMSIS-Pack based projects.
Thanks again to all the contributors who helped make this release possible! ❤️
v0.37.0 on GitHub
v0.37.0 on PyPI
Important note
With this release, Python 3.7 is no longer supported. The minimum Python version is now 3.8.0.
Improvements
- CMSIS-Toolbox Run and Debug Management integration:
- add a
--cbuild-run
option across subcommands - select target based on
cbuild-run
- debugger-clock setting from
cbuild-run
- default memory map
- primary-core and GDB server port selection based on
cbuild-run
- add a
- GDB server:
- add option for stetting soft breakpoints as hard
- add option for resetting and running the target without halting
- stricter
qC
command handling (@tlyu)
- Coresight:
- add
apid
handling - add AP CSW register SPROT bit handling
- fix offset for APv2 in discovery step
- add
- Loader: generate reset when loading to RAM
- RTOS: add hint for Zephyr’s thread info configuration
- RTT: allow no down-channels (@laurensmiers)
- Debug sequence: increase robustness
- Memory map: add
pname
based filtering - Probe: filter out Cypress KitProg3 bridge
Fixes
- Fix progress bar reprinting the same value when no progress is made
- Typing: fix typing of chip_erase from bool to str (@NilsIrl)
- pytest: use assert_not_called instead of not_called
- target: disable reads of erased sectors if Verify function is provided in the algorithm
- flash:
- disable builder double buffering by default
- write XPSR register on init on Cortex-M devices
Targets
- Add MPS2 AN521 target
- Add Ambiq Apollo3 target and NM180410 board (@joshua-nmi)
- Add RP2350 target (@konkers)
- Add nRF54L15 target (@maxd-nordic)
- Add STM32H750 target (@nattgris)
- Add HC32F115/155/334/467/472 targets (@wuze)
- Update HC32F448/45x/460/4A0(2) targets (@wuze)
- Fix sector size and RDP check on STM32H743 and H723 (@nattgris)
Other
- Docs:
- fix incorrect documentation for default GDB server port (@FredeHoey)
- document
cbuild-run
support - enhance load subcommand guidance
- CI:
- drop Python 3.7 and add 3.12 and 3.13
- update upload-artifact following deprecation
- update CodeQL workflow
- add workflow for generating standalone binaries using PyInstaller
- Session: add missing return in UserScriptFunctionProxy
- Optional use of libusb-package with fallback to pyusb (@dvzrv)