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](https://github.com/pyocd/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](https://pyocd.io/docs/user_scripts.html#user-defined-commands) 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. The `debug.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` and `wreg' improvements. `-p` option to force lookup as peripheral register. `reg` will print any number of registers. Add `rr` and `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 the `persist` 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 caused `DBGMCU` (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 of `Target` 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](https://dev.azure.com/pyocd/pyocd/_build?definitionId=1&_a=summary).
- 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**: https://github.com/pyocd/pyOCD/compare/v0.32.3...v0.33.0