See the wiki news page for all recent news.
pyOCD is an open source Python based tool and package for programming and debugging Arm Cortex-M microcontrollers with a wide range of debug probes. It is fully cross-platform, with support for Linux, macOS, Windows, and FreeBSD.
A command line tool is provided that covers most use cases, or you can make use of the Python API to facilitate custom target control. A common use for the Python API is to run and control CI tests.
Support for more than 70 popular MCUs is built-in. In addition, through the use of CMSIS Device Family Packs, nearly every Cortex-M device on the market is supported.
pyocd command line tool gives you total control over your device with these subcommands:
gdbserver: GDB remote server allows you to debug using gdb via either the console or several GUI debugger options.
load: Program files of various formats into flash or RAM.
erase: Erase part or all of an MCU's flash memory.
pack: Manage CMSIS Device Family Packs that provide additional target device support.
commander: Interactive REPL control and inspection of the MCU.
server: Share a debug probe with a TCP/IP server.
reset: Hardware or software reset of a device.
rtt: Stream Segger RTT IO with any debug probe.
list: Show connected devices.
The API and tools provide these features:
Version 0.29 is the last version to support Python 2.
PyOCD is beta quality.
The Python API is considered stable for version 0.x, but will be changed in version 1.0.
The pyOCD documentation is available on the pyocd.io website.
In addition to user guides, you can generate reference documentation using Doxygen with the supplied config file.
The full installation guide is available in the documentation.
For notes about installing and using on non-x86 systems such as Raspberry Pi, see the relevant documentation.
The latest stable version of pyOCD may be installed via pip as follows:
$ python3 -mpip install -U pyocd
Note: depending on your system, you may need to use
python instead of
To install the latest prerelease version from the HEAD of the
develop branch, you can do
$ python3 -mpip install --pre -U git+https://github.com/pyocd/[email protected]
You can also install directly from the source by cloning the git repository and running:
$ python3 pip install .
Note that, depending on your operating system, you may run into permissions issues running these commands. You have a few options here:
sudo -Hto install pyOCD and dependencies globally. On macOS, installing with sudo should never be required, although sometimes permissions can become modified such that installing without using sudo fails.
--useroption to install local to your user account.
On Linux, particularly Ubuntu 16.04+, you must configure udev rules to allow pyOCD to access debug probes from user space. Otherwise you will need to run pyOCD as root, using sudo, which is very highly discouraged. (You should never run pyOCD as root on any OS.)
See the target support documentation for information on how to check if the MCU(s) you are using have built-in support, and how to install support for additional MCUs via CMSIS-Packs.
See the GDB setup documentation for a guide for setting up and using pyocd with gdb and IDEs.
Join the pyOCD community!
In order to foster a healthy and safe environment, we expect contributors and all members of the community to follow our Code of Conduct.
We welcome contributions in any area, even if you just create an issue. If you would like to get involved but aren't sure what to start with, just ask on Slack or GitHub discussions and we'll be happy to help you. Or you can look for an open issue. Any work on major changes should be discussed with the maintainers to make everyone is aligned.
New pull requests should be created against the
develop branch. (You have to change the "base" to
Copyright 2006-2022 PyOCD Authors