Installation

Ubuntu20.04

For Ubuntu20.04 the version in apt repository is 0.13.1+dfsg-1, which is too low to recognize J-Link probe

$ apt-cache show python3-pyocd
Package: python3-pyocd
Architecture: all
Version: 0.13.1+dfsg-1
Priority: optional

When you run pyocd-tool list it won't detect the jlink probe

Remove

sudo apt remove python3-pyocd

Then install from pip

pip install pyocd

This will work (it's a J-Link clone)

~$ pyocd list
# Probe/Board Unique ID Target
----------------------------------------------------
0 Segger J-Link (unknown) 123456 n/a

Ubuntu 22.04

This is instantly available but not recommended

sudo pip install pyocd
# or with a mirror
sudo pip install pyocd -i https://mirrors.ustc.edu.cn/pypi/web/simple/
# This will install pyocd (currently pyocd-0.34.2) into:
/usr/local/bin/pyocd
/usr/local/bin/pyocd-gdbserver
/usr/local/lib/python3.10/dist-packages/pyocd-0.34.2.dist-info/*
/usr/local/lib/python3.10/dist-packages/pyocd/*

This is recommended but not instantly available (you need logout & login)

pip uninstall pyocd
# This will install pyocd into:
/home/milton/.local/bin/pyocd
/home/milton/.local/bin/pyocd-gdbserver
/home/milton/.local/lib/python3.10/site-packages/pyocd-0.34.2.dist-info/*
/home/milton/.local/lib/python3.10/site-packages/pyocd/*

You don't need to add .local/bin to the PATH because .profile already takes care of it, but it won't take effect until your next login

Basic Commands

# Show helps
pyocd --help
pyocd list --help
pyocd pack --help # List information about probes
pyocd list
# List available targets
pyocd list -t # Manage CMSIS-Packs for target support, clean packs
pyocd pack -c
# List install packs
pyocd pack -s
# Update pack index
pyocd pack -u
# Show pack info according to IC type
pyocd pack -f stm32f103
# Install pack for specified IC type
pyocd pack -i stm32f103 # Reset a target device.
pyocd reset
# Run debug probe server.
pyocd server

Add New Targets

According to Target Support, pyocd list -t will list built-in targets, if you want to add new targets, you should run the following commands

# Clean packs
pyocd pack -c
# List install packs
pyocd pack -s
# Update pack index
pyocd pack -u
# Show pack info according to IC type
pyocd pack -f stm32f103
# Install pack for specified IC type
pyocd pack -i stm32f103

The above command pyocd pack -u will download all .pdsc files into $HOME/.local/share/cmsis-pack-manager/, and generate aliases.json and index.json. But this command may not succeeded -- it's very slow and full of connection errors and format errors.

If you just want specified target types, and you happen to have the pack files, you can manually add the target support by creating a configuration file.

create a file named pyocd.yaml with the following content

pack:
- ./Misc/ArteryTek.AT32F403A_407_DFP.2.1.3.pack
- [relative or absolute paths to other pack files]

Then run pyocd from the same folder, it will take this file as configuration and treat these pack files as installed,

$ pyocd list -t
Name Vendor Part Number Families Source
-----------------------------------------------------------------------------------------------------------------------
_at32f403acct7 ArteryTek -AT32F403ACCT7 AT32F40x Series, AT32F403A pack
_at32f403accu7 ArteryTek -AT32F403ACCU7 AT32F40x Series, AT32F403A pack
_at32f403acet7 ArteryTek -AT32F403ACET7 AT32F40x Series, AT32F403A pack
...
_at32f407vet7 ArteryTek -AT32F407VET7 AT32F40x Series, AT32F407 pack
_at32f407vgt7 ArteryTek -AT32F407VGT7 AT32F40x Series, AT32F407 pack
cc3220sf Texas Instruments CC3220SF builtin
cortex_m Generic CoreSightTarget builtin

You can rename this configuration file and place it to other path, and specify this configuration with --config

$ pyocd list -t --config ./Misc/pyocd_renamed.yaml
Name Vendor Part Number Families Source
-----------------------------------------------------------------------------------------------------------------------
_at32f403acct7 ArteryTek -AT32F403ACCT7 AT32F40x Series, AT32F403A pack
_at32f403accu7 ArteryTek -AT32F403ACCU7 AT32F40x Series, AT32F403A pack
_at32f403acet7 ArteryTek -AT32F403ACET7 AT32F40x Series, AT32F403A pack
_at32f403aceu7 ArteryTek -AT32F403ACEU7 AT32F40x Series, AT32F403A pack
...
_at32f407vet7 ArteryTek -AT32F407VET7 AT32F40x Series, AT32F407 pack
_at32f407vgt7 ArteryTek -AT32F407VGT7 AT32F40x Series, AT32F407 pack
cc3220sf Texas Instruments CC3220SF builtin
cortex_m Generic CoreSightTarget builtin
cy8c64_sysap Cypress cy8c64_sysap builtin

Operations

Take AT32F403ACGT7 for example.

Reset

Reset

pyocd reset -t _at32f403acgt7 --config somewhere/pyocd.yaml

Reset and halt

pyocd reset -l -t _at32f403acgt7 --config somewhere/pyocd.yaml

Erase

Erase entire chip, target is _at32f403acgt7

$ pyocd erase -t _at32f403acgt7 -c --config somewhere/pyocd.yaml
0000972 I Erasing chip... [eraser]
0003906 I Chip erase complete [eraser]

Flash(Load)

$ pyocd load -t _at32f403acgt7 ./led_toggle.hex --config somewhere/pyocd.yaml
0000957 I Loading /home/milton/somewhere/led_toggle.hex [load_cmd]
[==================================================] 100%
0001481 I Erased 4096 bytes (2 sectors), programmed 3072 bytes (3 pages), skipped 0 bytes (0 pages) at 5.77 kB/s [loader]

Enter Commander Mode

$ pyocd commander -v -v -t _at32f403acgt7 --config somewhere/pyocd.yaml

This will display the chip details

0000882 D STLink probe 0669FF525252714987194517 firmware version: V2J39M27 [stlink]
...
0000899 D flash algo: [code=0x2e0] [b1=0x2e0,0x6e0] [b2=0x6e0,0xae0] [stack=0x2ae0; 0x2000 b] (ram=0x20000000, 0x4000 b) [flash_algo]
0000901 I Target type is _at32f421c8t7 [board]
0000903 D STLink probe 0669FF525252714987194517 firmware version: V2J39M27 [stlink]
0000904 D Running task load_svd [sequencer]
...
0000940 I DP IDR = 0x2ba01477 (v1 rev2) [dap]
...
0000943 D Using accelerated memory access interface for AHB-AP#0 [ap]
0000943 I AHB-AP#0 IDR = 0x24770011 (AHB-AP var1 rev2) [ap]
0000944 D AHB-AP#0 default HPROT=3 HNONSEC=0 [ap]
0000945 D AHB-AP#0 implemented HPROT=3 HNONSEC=0 [ap]
0000945 D Running task find_components [sequencer]
0000946 D Running task init_ap.0 [sequencer]
0000949 I AHB-AP#0 Class 0x1 ROM table #0 @ 0xe00ff000 (designer=43b:Arm part=4c4) [rom_table]
0000952 I [0]<e000e000:SCS v7-M class=14 designer=43b:Arm part=000> [rom_table]
0000953 I [1]<e0001000:DWT v7-M class=14 designer=43b:Arm part=002> [rom_table]
0000954 I [2]<e0002000:FPB v7-M class=14 designer=43b:Arm part=003> [rom_table]
0000956 I [3]<e0000000:ITM v7-M class=14 designer=43b:Arm part=001> [rom_table]
0000959 I [4]<e0040000:TPIU M4 class=9 designer=43b:Arm part=9a1 devtype=11 archid=0000 devid=ca1:0:0> [rom_table]
0000960 W Invalid coresight component, cidr=0x0 [rom_table]
0000960 I [5]e0041000: cidr=0, pidr=0, component invalid> [rom_table]
0000960 D Running task create_cores [sequencer]
0000960 D Creating SCS component [discovery]
0000961 D selected core #0 [soc_target]
0000962 I CPU core #0 is Cortex-M4 r0p1 [cortex_m]
0000963 D Running task set_default_reset_type [sequencer]
0000963 D Running task create_components [sequencer]
0000963 D Creating DWT component [discovery]
0000964 I 4 hardware watchpoints [dwt]
0000967 D Creating FPB component [discovery]
0000967 I 6 hardware breakpoints, 4 literal comparators [fpb]
0000968 D fpb has been disabled [fpb]
0000972 D Creating ITM component [discovery]
0000974 D Creating TPIU component [discovery]
...
Connected to -AT32F421C8T7 [Running]: 0669FF525252714987194517

Reference

PyOCD Notes的更多相关文章

  1. ASP.NET Core 1.1.0 Release Notes

    ASP.NET Core 1.1.0 Release Notes We are pleased to announce the release of ASP.NET Core 1.1.0! Antif ...

  2. Android Weekly Notes Issue #237

    Android Weekly Issue #237 December 25th, 2016 Android Weekly Issue #237 这是本年的最后一篇issue, 感谢大家. 本期内容包括 ...

  3. Android Weekly Notes Issue #230

    Android Weekly Notes Issue #230 November 6th, 2016 Android Weekly Issue #230. Android Weekly笔记, 本期内容 ...

  4. Android Weekly Notes Issue #229

    Android Weekly Issue #229 October 30th, 2016 Android Weekly Issue #229 Android Weekly笔记, 本期内容包括: 性能库 ...

  5. Android Weekly Notes Issue #227

    Android Weekly Issue #227 October 16th, 2016 Android Weekly Issue #227. 本期内容包括: Google的Mobile Vision ...

  6. Android Weekly Notes Issue #221

    Android Weekly Issue #221 September 4th, 2016 Android Weekly Issue #221 ARTICLES & TUTORIALS And ...

  7. Android Weekly Notes Issue #219

    Android Weekly Issue #219 August 21st, 2016 Android Weekly Issue #219 ARTICLES & TUTORIALS Andro ...

  8. MAGIC XPA最新版本Magic xpa 2.4c Release Notes

    New Features, Feature Enhancements and Behavior ChangesSubforms – Behavior Change for Unsupported Ta ...

  9. Magic xpa 2.5发布 Magic xpa 2.5 Release Notes

    Magic xpa 2.5發佈 Magic xpa 2.5 Release Notes Magic xpa 2.5 Release NotesNew Features, Feature Enhance ...

  10. Git for Windows v2.11.0 Release Notes

    homepage faq contribute bugs questions Git for Windows v2.11.0 Release Notes Latest update: December ...

随机推荐

  1. Memory Bist

    SRAMC主要是对SRAM进行控制 对于SRAM的逻辑,根据地址将数据存储到SRAM中,然后根据地址将SRAM中的数据读取出来 如何测试Memory,生产工艺原因造成的问题,采用DFT或者Bist测试 ...

  2. java - 对象装载数据传递到方法中

    1. 创建 Phone 类 package class_object; public class Phone { String brand; String color; double price; v ...

  3. Razor 语法@Html.DropDownList,根据List集合或者枚举生成Select标签

    1.根据List集合生成Select标签,根据数据库数据换成SelectListItem集合 Action 方法(也可使用下方的List集合的扩展方法): 1 var selectList = DBL ...

  4. [转帖]ORACLE等待事件:enq: TX - row lock contention

    https://www.cnblogs.com/kerrycode/p/5887150.html enq: TX - row lock contention等待事件,这个是数据库里面一个比较常见的等待 ...

  5. [转帖]PD Config Learn the PD configuration file

    The PD configuration file supports more options than command-line parameters. You can find the defau ...

  6. 【转帖】eBay 流量管理之 Kubernetes 网络硬核排查案例

    https://www.infoq.cn/article/L4vyfdyvHYM5EV8d3CdD 一.引子 在 eBay 新一代基于 Kubernetes 的云平台 Tess 环境中,流量管理的实现 ...

  7. [转帖]ebpf 月报 - 2023 年 1 月

    https://segmentfault.com/a/1190000043355631 本刊物旨在为中文用户提供及时.深入.有态度的 ebpf 资讯. 如果你吃了鸡蛋觉得好吃,还想认识下蛋的母鸡,欢迎 ...

  8. [转帖]Nginx Ingress 高并发实践

    概述 Nginx Ingress Controller 基于 Nginx 实现了 Kubernetes Ingress API,Nginx 是公认的高性能网关,但如果不对其进行一些参数调优,就不能充分 ...

  9. [转帖]并发控制- sched_yield 函数

    函数说明 函数原型 #include <sched.h> int sched_yield(void); 1 2 sched_yield的作用是让出处理器,调用时会导致当前线程放弃CPU,进 ...

  10. 基于go-restful实现的PoW算力池模型

    最开始知道区块链是在17年初,当时因为项目压力不大,开始研究比特币源码.对于比特币中提到的Proof of Work,当时只是一眼带过,并没有详细查看过相关的代码.在最近的项目中,考虑到性能的要求,需 ...