Giter Site home page Giter Site logo

pyocd-pemicro's Introduction

pyOCD

[pyocd.io] [Docs] [Slack] [Mailing list] [CI results]

News

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.

The 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:

  • halt, step, resume control
  • read/write memory
  • read/write core registers
  • set/remove hardware and software breakpoints
  • set/remove watchpoints
  • write to flash memory
  • load binary, hex, or ELF files into flash
  • reset control
  • access CoreSight DP and APs
  • SWO and SWV
  • and more!

Configuration and customization is supported through config files, user scripts, and the Python API.

Requirements

  • Python 3.7.0 or later.†
  • macOS, Linux, Windows 7 or newer, or FreeBSD
  • A recent version of libusb. See libusb installation for details.
  • Microcontroller with an Arm Cortex-M CPU
  • Supported debug probe
    • CMSIS-DAP v1 (HID) or v2 (WinUSB), including:
      • Atmel EDBG/nEDBG
      • Atmel-ICE
      • Cypress KitProg3 or MiniProg4
      • DAPLink based debug probe, either on-board or standalone
      • Keil ULINKplus
      • NXP LPC-LinkII
      • NXP MCU-Link
      • WCH-Link (1a86:8011, 2a86:8011 and others)
    • PE Micro Cyclone and Multilink
    • Raspberry Pi Picoprobe
    • SEGGER J-Link
    • STLinkV2 or STLinkV3, either on-board or the standalone versions

† Version 0.29 is the last version to support Python 2.

Status

PyOCD is beta quality.

The Python API is considered stable for version 0.x, but will be changed in version 1.0.

Documentation

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.

Installing

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 python3.

The latest pyOCD package is available on PyPI as well as on GitHub.

To install the latest prerelease version from the HEAD of the develop branch, you can do the following:

$ 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 pip install .

Note that, depending on your operating system, you may run into permissions issues running these commands. You have a few options here:

  1. Under Linux, run with sudo -H to 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.
  2. Specify the --user option to install local to your user account.
  3. Run the command in a virtualenv local to a specific project working set.

udev rules on Linux

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.)

To help with this, example udev rules files are included with pyOCD in the udev folder. The readme in this folder has detailed instructions.

Target support

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.

Using GDB

See the GDB setup documentation for a guide for setting up and using pyocd with gdb and IDEs.

Community resources

Join the pyOCD community!

pyocd.io website
Documentation
Issues
Discussions
Wiki
Mailing list for announcements

In order to foster a healthy and safe environment, we expect contributors and all members of the community to follow our Code of Conduct.

Contributions

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.

Please see the contribution guidelines for detailed requirements. The developers' Guide has instructions on how to set up a development environment for pyOCD.

New pull requests should be created against the develop branch. (You have to change the "base" to develop.)

License

PyOCD is licensed with the permissive Apache 2.0 license. See the LICENSE file for the full text of the license. All documentation and the website are licensed with CC BY 4.0.

Copyright © 2006-2022 PyOCD Authors

pyocd-pemicro's People

Stargazers

 avatar  avatar  avatar

Watchers

 avatar  avatar

Forkers

cederom

pyocd-pemicro's Issues

Avoid pinning versions of dependencies

Hi! I'm currently trying to package this for Arch Linux (for packaging pyocd).

When looking at your package requirements, it shows that the requirement on pypemicro is pinned to 0.1.7.
This is problematic in the context of system package management where only one package version is allowed (downstream distributions will remove this strict requirement). Is there a particular reason for it to be there?

Somewhat related: It seems as if the pypemicro project is currently not very transparent about which commit in the project repository let to what release on pypi.org.

Also somewhat related: The information on the requirements in the README are outdated and probably should not be there.

AttributeError: 'PEMicroException' object has no attribute 'message'

As pypemicro package has removed the message field in the latest version 0.1.6, the current version of pyocd-pemicro can't catch specific exceptions and being now installed by default it always fails pyocd on the system without libraries @flit :

:#sudo pyocd list
0001632:CRITICAL:__main__:uncaught exception: 'PEMicroException' object has no attribute 'message'
Traceback (most recent call last):
  File "/usr/local/lib/python3.7/dist-packages/pypemicro/pemicro.py", line 403, in get_pemicro_lib
    filename = PyPemicro.get_newest_lib_filename(libs_list)
  File "/usr/local/lib/python3.7/dist-packages/pypemicro/pemicro.py", line 381, in get_newest_lib_filename
    raise PEMicroException("Unable to find any usable library in the system!")
pypemicro.pemicro.PEMicroException: Unable to find any usable library in the system!

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/local/lib/python3.7/dist-packages/pypemicro/pemicro.py", line 419, in list_ports
    lib = PyPemicro.get_pemicro_lib()
  File "/usr/local/lib/python3.7/dist-packages/pypemicro/pemicro.py", line 407, in get_pemicro_lib
    raise PEMicroException(str(exc))
pypemicro.pemicro.PEMicroException: Unable to find any usable library in the system!

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/local/lib/python3.7/dist-packages/pyocd_pemicro/pemicro_probe.py", line 82, in get_all_connected_probes
    port_list = pemicro.list_ports()
  File "/usr/local/lib/python3.7/dist-packages/pypemicro/pemicro.py", line 421, in list_ports
    raise PEMicroException(str(exc))
pypemicro.pemicro.PEMicroException: Unable to find any usable library in the system!

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/local/lib/python3.7/dist-packages/pyocd/__main__.py", line 401, in run
    self._COMMANDS[self._args.cmd](self)
  File "/usr/local/lib/python3.7/dist-packages/pyocd/__main__.py", line 461, in do_list
    ConnectHelper.list_connected_probes()
  File "/usr/local/lib/python3.7/dist-packages/pyocd/core/helpers.py", line 109, in list_connected_probes
    allProbes = ConnectHelper.get_all_connected_probes(blocking=False)
  File "/usr/local/lib/python3.7/dist-packages/pyocd/core/helpers.py", line 82, in get_all_connected_probes
    allProbes = DebugProbeAggregator.get_all_connected_probes(unique_id=unique_id)
  File "/usr/local/lib/python3.7/dist-packages/pyocd/probe/aggregator.py", line 64, in get_all_connected_probes
    probes += cls.get_all_connected_probes(unique_id, is_explicit)
  File "/usr/local/lib/python3.7/dist-packages/pyocd_pemicro/pemicro_probe.py", line 89, in get_all_connected_probes
    if cls.NO_LIBRARY_ERR in exc.message:
AttributeError: 'PEMicroException' object has no attribute 'message' 

All two instances of if cls.NO_LIBRARY_ERR not in exc.message: has to be replaced.
For example, if cls.NO_LIBRARY_ERR not in str(exc): seems to work.

Exception if PEMicro drivers are not installed

The following exceptions occur if the pyocd-pemicro plugin is installed, but not the PEMicro drivers, and you attempt to run pyocd list.

On macOS 10.15:

0000705:CRITICAL:__main__:uncaught exception: dlopen(unitacmp-64.dylib, 6): image not found
Traceback (most recent call last):
  File "/Volumes/projects/pyOCD-flit/pyocd/__main__.py", line 398, in run
    self._COMMANDS[self._args.cmd](self)
  File "/Volumes/projects/pyOCD-flit/pyocd/__main__.py", line 458, in do_list
    ConnectHelper.list_connected_probes()
  File "/Volumes/projects/pyOCD-flit/pyocd/core/helpers.py", line 109, in list_connected_probes
    allProbes = ConnectHelper.get_all_connected_probes(blocking=False)
  File "/Volumes/projects/pyOCD-flit/pyocd/core/helpers.py", line 82, in get_all_connected_probes
    allProbes = DebugProbeAggregator.get_all_connected_probes(unique_id=unique_id)
  File "/Volumes/projects/pyOCD-flit/pyocd/probe/aggregator.py", line 64, in get_all_connected_probes
    probes += cls.get_all_connected_probes(unique_id, is_explicit)
  File "/Volumes/projects/pyOCD-flit/venv/mac39/lib/python3.9/site-packages/pyocd_pemicro/pemicro_probe.py", line 78, in get_all_connected_probes
    port_list = pemicro.list_ports()
  File "/Volumes/projects/pyOCD-flit/venv/mac39/lib/python3.9/site-packages/pypemicro/pemicro.py", line 423, in list_ports
    lib = PyPemicro.get_pemicro_lib()
  File "/Volumes/projects/pyOCD-flit/venv/mac39/lib/python3.9/site-packages/pypemicro/pemicro.py", line 405, in get_pemicro_lib
    libs_list = PyPemicro.get_pemicro_lib_list(dllpath=dllpath)
  File "/Volumes/projects/pyOCD-flit/venv/mac39/lib/python3.9/site-packages/pypemicro/pemicro.py", line 162, in get_pemicro_lib_list
    library_dlls.append(PyPemicro._load_pemicro_lib_info("", lib_name))
  File "/Volumes/projects/pyOCD-flit/venv/mac39/lib/python3.9/site-packages/pypemicro/pemicro.py", line 124, in _load_pemicro_lib_info
    dll = cdll.LoadLibrary(os.path.join(dll_path, lib_name))
  File "/usr/local/Cellar/[email protected]/3.9.0_1/Frameworks/Python.framework/Versions/3.9/lib/python3.9/ctypes/__init__.py", line 452, in LoadLibrary
    return self._dlltype(name)
  File "/usr/local/Cellar/[email protected]/3.9.0_1/Frameworks/Python.framework/Versions/3.9/lib/python3.9/ctypes/__init__.py", line 374, in __init__
    self._handle = _dlopen(self._name, mode)
OSError: dlopen(unitacmp-64.dylib, 6): image not found

RaspberryPi looks similar with a slightly different error message:

0002117:CRITICAL:__main__:uncaught exception: unitacmp-64.so: cannot open shared object file: No such file or directory

FreeBSD/*BSD detection

I have encountered FreeBSD OS detection. Will provide a fix soon :-)

(venv37zephyr) pyocd list
0001563:CRITICAL:__main__:Unable to determinate running operation system (FreeBSD)
Traceback (most recent call last):
  File "/home/x/usr/local/venv37zephyr/lib/python3.7/site-packages/pypemicro/pemicro.py", line 401, in get_pemicro_lib
    libs_list = PyPemicro.get_pemicro_lib_list(dllpath=dllpath)
  File "/home/x/usr/local/venv37zephyr/lib/python3.7/site-packages/pypemicro/pemicro.py", line 142, in get_pemicro_lib_list
    lib_name = PyPemicro.get_library_name()
  File "/home/x/usr/local/venv37zephyr/lib/python3.7/site-packages/pypemicro/pemicro.py", line 99, in get_library_name
    raise PEMicroException(f"Unable to determinate running operation system ({system_name})")
pypemicro.pemicro.PEMicroException: Unable to determinate running operation system (FreeBSD)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/x/usr/local/venv37zephyr/lib/python3.7/site-packages/pypemicro/pemicro.py", line 419, in list_ports
    lib = PyPemicro.get_pemicro_lib()
  File "/home/x/usr/local/venv37zephyr/lib/python3.7/site-packages/pypemicro/pemicro.py", line 407, in get_pemicro_lib
    raise PEMicroException(str(exc))
pypemicro.pemicro.PEMicroException: Unable to determinate running operation system (FreeBSD)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/x/usr/local/venv37zephyr/lib/python3.7/site-packages/pyocd_pemicro-1.0.4-py3.7.egg/pyocd_pemicro/pemicro_probe.py", line 81, in get_all_connected_probes
    port_list = pemicro.list_ports()
  File "/home/x/usr/local/venv37zephyr/lib/python3.7/site-packages/pypemicro/pemicro.py", line 421, in list_ports
    raise PEMicroException(str(exc))
pypemicro.pemicro.PEMicroException: Unable to determinate running operation system (FreeBSD)

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/x/usr/local/venv37zephyr/lib/python3.7/site-packages/pyocd-0.30.4.dev31-py3.7.egg/pyocd/__main__.py", line 150, in run
    status = cmd.invoke()
  File "/home/x/usr/local/venv37zephyr/lib/python3.7/site-packages/pyocd-0.30.4.dev31-py3.7.egg/pyocd/subcommands/list_cmd.py", line 93, in invoke
    ConnectHelper.list_connected_probes()
  File "/home/x/usr/local/venv37zephyr/lib/python3.7/site-packages/pyocd-0.30.4.dev31-py3.7.egg/pyocd/core/helpers.py", line 109, in list_connected_probes
    allProbes = ConnectHelper.get_all_connected_probes(blocking=False)
  File "/home/x/usr/local/venv37zephyr/lib/python3.7/site-packages/pyocd-0.30.4.dev31-py3.7.egg/pyocd/core/helpers.py", line 82, in get_all_connected_probes
    allProbes = DebugProbeAggregator.get_all_connected_probes(unique_id=unique_id)
  File "/home/x/usr/local/venv37zephyr/lib/python3.7/site-packages/pyocd-0.30.4.dev31-py3.7.egg/pyocd/probe/aggregator.py", line 64, in get_all_connected_probes
    probes += cls.get_all_connected_probes(unique_id, is_explicit)
  File "/home/x/usr/local/venv37zephyr/lib/python3.7/site-packages/pyocd_pemicro-1.0.4-py3.7.egg/pyocd_pemicro/pemicro_probe.py", line 90, in get_all_connected_probes
    raise cls._convert_exception(exc) from exc
pyocd.core.exceptions.ProbeError: Unable to determinate running operation system (FreeBSD)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.