Python based tool and API for debugging, programming, and exploring Arm Cortex microcontrollers.


Debugging with gdb via command line or IDE. Supported by VSCode Cortex-Debug plugin and Eclipse Embedded CDT.

Flash programming

Program firmware and data images into internal or external flash. Of course, images can also be loaded into RAM.

Python API

Complete control of the target device with a straightforward API, highly suitable for CI, bespoke test and debug tools, security research, and more.

Semihosting and SWV

Full semihosting implementation with console and file I/O. SWV basic printf output, stream raw SWO data over TCP/IP, build an SWO event processing data flow graph in Python.


Access the full set of Arm Cortex-M devices supported by CMSIS Device Family Packs. Packs can managed by pyOCD and installed by part number, or downloads packs yourself.

Built-in devices

Support for more than 70 common Arm Cortex-M devices is built-in.

Community and support


Aside from the project repositories being hosted on GitHub, this is where we track issues and feature requests, and host questions and discussions. For new contributors looking for something to tackle, the issues are a great place to look.


We have a public Slack workspace for live discussion and collaborative support of pyOCD and the other projects under the pyOCD umbrella. This is the place to go to get help, discuss ideas, and share tips with other users. Join with this link.

Mailing list

In addition to other communications channels, we have a Google groups mailing list for organisation announcements and news.