v0.33.0
Additions
- Basic SEGGER RTT read/write support with an
rtt
subcommand. This subcommand streams stdio from/to the target. It works with all debug probe types, not only J-Link. (Thanks @mikisama, @ccattuto) - There is no longer a need to install libusb separately when installing pyocd. The libusb-package Python package was created so that an up to date libusb library can be automatically installed along with pyocd on all OSes.
- Log output is now colorized by default when outputting to a tty. The
--color
command line argument controls this feature. Also simplified the log output formatting so it is easier to read. - Commander: Add
-x
/--execute
argument to run commands from a file. Multiple command files can be run and mixed with-c
commands. - Commander: Add
-i
/--interactive
to stay in REPL after running commands from either a file or command line. - Commander: Introduce the
@command
decorator that can be used in user scripts to create user-defined commands, accessible from Commander and as gdbserver monitor commands. See the documentation for details.
Boards and targets
- Add Maxim MAX32660 target and MAX32660EVSYS board. (Thanks @ozersa)
- Correct RAM size of Maxim MAX32630 to 512 KiB.
- Add several NXP board IDs: FRDM-K32L3A6, TWR-KM35Z75M, MIMXRT1160-EVK, FRDM-KW38, USB-KW38, KW38-ER-RD.
- Add micro:bit v2 board IDs. (Thanks @mbrossard)
- NXP LPC55xx family: re-unlock debug access after reset. (Thanks @LeBlue)
Changes and fixes
- Cortex-M: Fix regression with writing CFBP and xPSR subregisters (CONTROL, FAULTMASK, BASEPRI, PRIMASK, and xPSR variants).
- Gdbserver: While the target is running (
continue
command in gdb), retry reading target status within a timeout after the first fault on such a check. This is intended to primarily help with firmware putting the core to sleep. Thedebug.status_fault_retry_timeout
session option controls the timeout; set it to 0 to disable this experimental feature. - Commander: Fix broken Python ("$") and system ("!") commands in certain cases.
- Commander: The shell-like lexer for commands has been replaced with a custom lexer that is simpler and more predictable. It breaks words on all non-alphanumeric characters except dash (for instance, "mem-ap" is considered one word). Single and double quoted values with backslash-escapes are supported.
- Commander: If a user script has been loaded, Python '$' commands share the user script's namespace.
- Commands: Add
flushprobe
command that ensures all outstanding transfers on the probe have been completed. - Commands: Fix
reg
output so it is properly redirected when called as a gdbserver monitor command. - Commands:
reg
andwreg' improvements.
-poption to force lookup as peripheral register.
regwill print any number of registers. Add
rrand
wr` aliases. - User scripts:
print()
calls from user scripts get routed through any output direction, for example, such that the output will appear in the gdb console when a user-defined command is called as a gdbserver monitor command. - Flash: Change default value of
keep_unwritten
session option to false. - CMSIS-DAP: Better handling of protocol versions.
- CMSIS-DAP: All USB backends have a USB packet trace logger.
- CMSIS-DAP: Add
cmsis_dap.prefer_v1
session option that forces pyocd to use the CMSIS-DAP v1 interface on a debug probe that provides both v1 and v2. (Naturally, the default is to choose v2, since it is faster.) This is intended primarily for testing. - CMSIS-DAP: Introduced timeouts for USB reads.
- CMSIS-DAP: Limit number of outstanding command packets to 30 on macOS using hidapi for CMSIS-DAP v1. This fixes a failure that occurred when certain memory transfers due to an in-built limit on the queue size in the macOS version of hidapi.
- CMSIS-DAP: Update list of known CMSIS-DAP probes; correspondingly update udev rules.
- STLink: use
JTAG_GET_BOARD_IDENTIFIERS
command to read board ID faster than extracting it from the "mbed.htm" file on the MSD volume. Requires V2J36 or V3J6 firmware versions. - STLink: Setting the SWD frequency on an STLinkV3 was completely broken, and is now fixed.
- STLink: Add
stlink.v3_prescaler
session option to control the internal HCLK prescaler on the probe, which affects the set of available SWD/JTAG and other I/O frequencies. - Probe server: Fix race causing server to terminate immediately is certain rare cases.
- Probe server: Improve connect/disconnect log messages.
- Session options: Probe-specific options in a config file takes precedence over global options.
- Session options: A warning is logged if a multiple probe-specific option sections in a config file match the active debug probe's UID.
- Session: Change the working directory to the project directory on session creation.
- Gdbserver: Cleanup and fix connection disconnect code. This changes behaviour if the gdb
disconnect
command is used so that thepersist
option is honoured (disconnect
previously would never cause the gdbserver to stop). (Thanks @claymation) - Gdbserver:
exit
monitor command that will shut down all gdbservers and quit pyocd. - Gdbserver: Handle connection aborted and reset errors more cleanly.
- Gdbserver: Better logging of RTOS discovery issues, and only one log message is output when attempting to load RTOS plugins, in addition to a message on successful load.
- CoreSight DAP: Unlock probe on error. (Thanks @claymation)
- CoreSight: Don't read CoreSight registers for non-CoreSight components. (Thanks @j4cbo)
- CoreSight: Set
CSW.DBGSWEN
for CSSoC-400 APB-AP to resolve an issue that causedDBGMCU
(and other) peripherals to be inaccessible on certain STM32 devices, and likely similar issues on other devices. - Dependencies: Switch from naturalsort to natsort. (Thanks @dvzrv)
Python API
- Introduced type annotations to a number of the most important parts of the pyocd source code.
- Add
CoreTarget
class, a superclass ofTarget
instances for CPU cores. - Ensure
set_clock()
works with float parameters for all probe drivers. - J-Link: Fix
is_reset_asserted()
method.
Testing
- A new CI board farm is up and running the functional test suite with Azure Pipelines on macOS, Linux, and Windows. All test results are publicly accessible.
- Improved command tests.
- Fixed a number of small functional test failures in CI.
automated_test.py
supports remote probes in its-b
argument.- Fix issues in the semihosting unit test and restore telnet tests.
Other
scripts/generate_flash_algo.py
: Removed the useless part of the standard flash algo blob header, leaving only the required breakpoint.
Many thanks to all the contributors who helped make this release possible! ❤️
Full Changelog: v0.32.3...v0.33.0