当前位置: 首页 > article >正文

PyOCD 的基本使用

文章目录

  • 1. 基本命令
  • 2. pack 管理
  • 3. 指定芯片型号
  • 4. 擦除芯片
  • 5. 烧写芯片
  • 6. GDB Server 调试
  • 7. RTT 控制
  • 8. 常见问题
    • 8.1. 找不到 libusb 库
  • 9. 外部参考资料

1. 基本命令

  • erase:擦除 Flash;
  • load:烧写 Flash,带擦除和校验;
  • gdbserver:启动 GDB Server 服务器;
  • list:列出已连接的调试器;
  • rtt:控制 SEGGER RTT 兼容接口。

2. pack 管理

PyOCD 可以使用 .pack 文件(CMSIS-Packs),许多芯片尤其是国产芯片,只提供 .pack 文件来支持开发和调试。

PyOCD 通过 --pack 指定 .pack 文件。

3. 指定芯片型号

使用 --target 参数指定烧录芯片型号:

pyocd erase --chip --target stm32f103rc

如果需要指定国产芯片,则需要结合 --pack 参数,例如:

pyocd erase --chip --target n32l406cb --pack <"/Path/To/Nationstech.N32L40x_DFP.0.9.0.pack">

4. 擦除芯片

使用 erase 命令擦除芯片,需要指定擦除方法,如:–chip、–sector、–mass。

# 擦除整个芯片
pyocd erase --chip --target <Target Chip Name> --pack <"/Path/to/PackFile.pack">

5. 烧写芯片

使用 load 命令烧写新,需要指定烧写的起始地址和要烧写的程序。load 命令会自动擦除 Flash 并校验,可以指定擦除和校验方法。

pyocd.exe load --trust-crc --base-address <Program Start Address> <"/Path/To/Program.hex"> --target <Target Chip Name> --frequency {Examples: "1000", "2.5khz", "10m"} --erase {auto,chip,sector} --pack <"/Path/to/PackFile.pack">

6. GDB Server 调试

使用 gdbserver 命令启动 gdbserver 服务,然后可以使用 gdb 客户端进行连接调试。

pyocd gdbserver --port 50000 --telnet-port 50001 --target <Target Chip Name> --pack <"/Path/to/PackFile.pack">

7. RTT 控制

项目中如果兼容 RTT 接口,则可以通过 PyOCD 查看 RTT 输出。集成 RTT 的方法为,将 RTT 接口 文件解压后添加到项目中,代码中增加:

#include "SEGGER_RTT.h"

SEGGER_RTT_ConfigUpBuffer(0, "RTTUP0", NULL, 0,
                              SEGGER_RTT_MODE_NO_BLOCK_SKIP);
SEGGER_RTT_ConfigDownBuffer(0, "RTTDOWN", NULL, 0,
                                SEGGER_RTT_MODE_NO_BLOCK_SKIP);
SEGGER_RTT_SetTerminal(0);

进行配置,使用:

SEGGER_RTT_printf(0, "Hello\r\n");

进行打印。

该方法不但支持 JLink,还支持 CMSIS-DAP/DAPLink 等调试器。

pyocd.exe rtt --target <Target Chip Name> --pack <"/Path/to/PackFile.pack">

其他参数:

  • –help
  • –address
  • –size
  • –up-channel-id
  • –down-channel-id
  • –log-file

PyOCD v0.35.1 及 v0.36.0 的 RTT 存在一个 Bug 导致使用 RTT 是出现 “C Control block not found [main]” 错误。回退到 v0.34.3 则该问题消失,参见 Control block not found when using rtt with pyocd 0.35.0 #1553

遇到该问题可以使用 Reset the offset in finding control block #1654 或 Fix RTT Control Block Search #1669 方法临时修正。但目前这两种修复方法都不支持指定 --address 和 --size 参数,因此,即便使用了这两个 pack,但在使用 RTT 时指定了这两个参数,依然会报“C Control block not found [main]” 错误。

8. 常见问题

8.1. 找不到 libusb 库

PyOCD 配合 ST-Link、CMSIS-DAPv2 使用时,需要 libusb 库支持,若没有按照或正确配置,将提示:

STLink, CMSIS-DAPv2 and PicoProbe probes are not supported because no libusb library was found.

此时需按如下方式安装配置:

pip intall libusb

Windows 下安装完毕后将在 <Python 安装目录>/Lib/site-packages/libusb/_platform/_windows 的子文件夹下找到对应的 libusb-1.0.dll 文件,将其拷贝到 <Python 安装目录> 或 <Python 安装目录>/Scripts 下(只要被系统 PATH 包含即可)即可在系统命令行中正常使用。

9. 外部参考资料

  1. PyOCD Command reference

http://www.kler.cn/a/409553.html

相关文章:

  • Vue进阶面试题目(一)
  • 自然语言处理: RAG优化之Embedding模型选型重要依据:mteb/leaderboard榜
  • 基于SpringBoot的数据结构系统设计与实现(源码+定制+开发)
  • 数仓工具—Hive语法之窗口函数中的 case when
  • AMD(Xilinx) FPGA配置Flash大小选择
  • 3D建筑模型的 LOD 规范
  • 详解Qt QDir路径类
  • 跨平台应用开发框架(1)----Qt(组件篇)
  • C#里怎么样实现单向链表?
  • 《图像梯度与常见算子全解析:原理、用法及效果展示》
  • [OpenGL]使用OpenGL+OIT实现透明效果
  • CPU性能优化--性能分析方法
  • 网络层协议IP
  • 【计算机网络】多路转接之select
  • Next.js-样式处理
  • 数据结构 (9)顺序表与链表的综合比较
  • 深入理解二叉搜索树(BST)
  • 【组件】前端ElementUi 下拉Tree树形组件 带模糊搜索自动展开高亮功能
  • Move 合约部署踩坑笔记:如何解决 Sui 客户端发布错误Committing lock file
  • linux系统运维面试题(二)(Linux System Operations Interview Questions II)
  • 国产FPGA+DSP 双FMC 6U VPX处理板
  • 嵌入式硬件实战提升篇(二)PCB高速板设计 FPGA核心板带DDR3 PCB设计DDR全面解析
  • LeetCode Hot100 - 矩阵篇
  • Vue.js 前端路由详解:从基础概念到 Vue Router 实战
  • 植物明星大乱斗——功能拆解
  • ffmpeg.wasm 在浏览器运行ffmpeg操作视频