See the wiki news page for all recent news.
pyOCD is an open source Python package for programming and debugging Arm Cortex-M microcontrollers using multiple supported types of USB 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 enable low-level target control. A common use for the Python API is to run and control CI tests.
Upwards of 70 popular MCUs are supported built-in. In addition, through the use of CMSIS-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.
list: Show connected devices.
The API and tools provide these features:
† Version 0.29 is the last version to support Python 2.
PyOCD is functionally reliable and fully useable.
The Python API is considered partially unstable as we are restructuring and cleaning it up prior to releasing version 1.0.
The pyOCD documentation is located in the docs directory.
In addition to user guides, you can generate reference documentation using Doxygen with the supplied config file.
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/pyOCD.git@develop
You can also install directly from the source by cloning the git repository and running:
python3 setup.py 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.
For notes about installing and using on non-x86 systems such as Raspberry Pi, see the relevant documentation.
pyusb and its backend library libusb are dependencies on all supported operating systems. pyusb is a regular Python package and will be installed along with pyOCD. However, libusb is a binary shared library that does not get installed automatically via pip dependency management.
How to install libusb depends on your OS:
brew install libusb
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.
After you install pyOCD via pip or setup.py, you will be able to execute the following in order to start a GDB server powered by pyOCD:
You can get additional help by running
pyocd gdbserver --help.
Example command line GDB session showing how to connect to a running
pyocd gdbserver and load
$ arm-none-eabi-gdb application.elf <gdb> target remote localhost:3333 <gdb> load <gdb> monitor reset
pyocd gdbserver subcommand is also usable as a drop in place replacement for OpenOCD in
existing setups. The primary difference is the set of gdb monitor commands.
The recommended toolchain for embedded Arm Cortex-M development is GNU Arm Embedded, provided by Arm. GDB is included with this toolchain.
To view peripheral register values either the built-in Eclipse Embedded CDT register view can be used, or
the Embedded System Register Viewer plugin can be installed. The latter can be installed from inside
http://embsysregview.sourceforge.net/update as a software update server URL
under the "Help -> Install New Software..." menu item.
Join the pyOCD community! We welcome contributions in any area. Please see the contribution guidelines for detailed requirements. In order to foster a healthy and safe environment, we expect contributors and all members of the community to follow the code of conduct.
To report bugs, please create an issue in the GitHub project.
Please see the Developers' Guide for instructions on how to set up a development environment for pyOCD.
New pull requests should be created against the
PyOCD is licensed with the permissive Apache 2.0 license. See the LICENSE file for the full text of the license.
Copyright © 2006-2021 PyOCD Authors