基于VScode使用pyOCD进行单片机调试和下载及芯片包安装
基于VScode使用pyOCD进行单片机调试和下载及芯片包安装
一、起因
由于越来越喜欢用VScode进行单片机程序的编写,使用了一个CMSIS-DAP的调试器,这个调试器没办法用stlink和jlink进行调试,所以使用了这个基于python的pyOCD进行调试。
二、什么是pyocd
pyocd 是 arm 开发的一个 python 包(python package),该软件包可以使用多种USB调试器对 arm cortex-M 微控制器进行调试、编程(烧录程序)。
说白了就是个下载的驱动软件目前支持 Daplink、ST-Link、jlink。目前从 pyocd github 上看到的,pyocd 内部默认安装70多个常用的单片机支持包,但是通过使用 CMSIS-Packs 几乎支持所有基于 comtex-m 内核的单片机。(是要能用keil、Eclipse写的单片机都可以用)
三、pyocd优点
pyocd 提供了命令行工具,使用这工具可以用来调试、烧录、擦除 MCU
pyocd 提供了python API,可是使用这些API来实现控制 MCU(读取MCU寄存器、暂停、运行、复位MCU等)
pyocd 支持 windows、linux、Mac操作系统
现在感觉,pyOCD还是很好用的。
四、安装pyocd
pyOCD官方文档链接:https://pyocd.io/docs/
1、由于pyocd是基于python开发的,所以你需要支持python环境、并将pip加入path环境中,这个过程很简单,这里就不做太多赘述,可以参考这个->点击教程
2、最新稳定版本的 pyOCD 可以通过 pip 安装,命令如下:
pip install -U pyocd
参考:https://pypi.org/project/pyocd/
五、使用pyocd
首先打开CMD、输入
pyocd --version
可以查看到安装的版本.
输入
pyocd --help
可以查看帮助信息、可以看到python提供了9条命令
commander跟cmd: 可交互的终端,
erase: 擦除命令
flash:烧录命令
reset:复位设备
gdbserver跟gdb:用于gdb调试的
json:以json格式输出信息
list:可以列出dap-link、目标IC、特定板子的信息
pack:用于管理CMSIS-Pack
server:运行debug服务
如果想知道上述命令的用法可以使用 pyocd + 上述中的一个命令 + -h/--help,如下:
这些命令各有什么用呢?什么情况下要用什么命令?这些命令怎么配合使用?
比如,使用 CMSIS-DAP 给 MCU 下载固件,一般会使用上位机 KIELL 通过 CMSIS-DAP 下载,首先 上位机 KEIL 能找到 CMSIS-DAP,然后需要选择所下载的 MCU,然后选择所要下载的固件,这 3 步都设置好后,就可以下载程序了,
根据这些,依次介绍 pyocd 的命令:
list or json:查看能够使用的调试器、支持的 MCU
pack:管理支持的 MCU
flash & erase : 对 MCU 进行编程、擦除
(1)pyocd list 命令
从 pyocd 帮助信息来看:
list List information about probes, targets, or boards.
可以知道 list 命令使用来查看 调试器、目标芯片、板子的信息,
pyocd list / pyocd list -p
列出连接到电脑上的 CMSIS-DAP 或者 ST link,当没接如任何pyocd所支持的设备时,如下:
接入了一个 CMSIS-DAP 跟 ST Link 后如下:
(1.1) pyocd list -t/--target
列出所支持的IC,可以是内置的,也可以是通过安装pack获得支持的,
上面图片展示了列出了 pyocd 内置的一部分 MCU。我的电脑中已近安装了 STM32G4 的pack,上图中,STM32G4 系列后面就显示了 pack
(1.2) pyocd list -b/--board
列出所支持的板子,如下:
(2)pyocd json 命令
json Output information as JSON.
(2.1) pyocd json -t
从帮助信息来看,是输出所有已知的 target,先试下pyocd json -t命令,如下:
输出一大堆数据,除了有pyocd 版本信息外,就是一些MCU的信息,有MCU的厂商、型号,还有该信息是内置的还是来自pack。
试下能不能输出指定 MCU 的信息:
pyocd list 跟 pyocd json 功能应该是差不多的,都是输出一些信息,如接入了电脑的调试器信息,系统所支持的单片机等,只不过输出方式不同,pyocd list 是直接输出相关信息,pyocd json 是以 json 格式输出相关信息。
(3)pyocd pack 命令
pyocd 通过两种方法支持 MCU,一个是内置的(builtin),这个数量有限,还有一个是通过 pack 来支持,需要用pyocd 操作什么 MCU,安装对应的 pack , 类似 keil5 ,新安装的 Keil5 不支持任何单片机,如果要使用新安装的keil 支持某类型号单片机,需要安装对应的软件包。
pyocd 提供了一个内置的子命令来对pack进行管理,安装、查找、删除等,来看下 pyocd pack 命令的帮助信息:
送上图来看,有5个功能选项:
-c:清楚保存在电脑上的pack信息
-u:更新pack索引
-s:显示已安装的pack
-f:查找某个IC对应的pack
-i:安装指定的pack
pyocd 使用的 pack 有个默认的存放路劲,我电脑上为:
C:\Users\用户\AppData\Local\cmsis-pack-manager\cmsis-pack-manager
pyocd pack 命令就是对该目录的文件进行管理。
(3.1)pyocd pack -U
使用方法为:
pyocd pack -u
第一次使用该命令的时候,会在pyocd存放pack文件的默认路劲下下载不同厂商不同系列 MCU 的 pack 的描述文件(pdsc文件)和 index.json、aliases.json 文件。执行过一次之后,会从网络上更新相应的文件。下图是一个执行pyocd pack -u的结果,有出现错误。
下图是执行了pyocd pack -u 后,pack 所在文件夹多了很多文件:
(3.2)pyocd pack -f
使用方法为:
pyocd pack -f partnumber
该命令会显示出对应型号 MCU 的 pack 的信息,如下图,显示了 STM32G431 所对应 pack 的信息
(3.3)pyocd pack -i
使用方法为:
pyocd pack -i partnumber
该命令安装指定型号MCU的pack,如下图:
不过,由于网络的问题,一般很难下载完成,跟keil下载pack一样,非常慢,经常下载失败,可以手动下载所需的pack,然后放到对应目录,格式统一为这样、将前面的名字删掉。
pyocd pack -s
安装有pack后,执行结果为:
pyocd flash 命令
用CMSISDAP+STM32G4 如下:
STM32G4 的测试程序是用 Cube MX 创建工程、然后用vscode打开
第一次测试,首先执行 pyocd list查看是否成功识别到设备,确认能够找到 CMSIS-DAP 后。
输出的帮助信息看不出来 pyocd flash 应该怎么用:
非常多选项,这里只关注烧录的功能,通过查阅 pyocd 的文档,了解到可以使用如下命令来给MCU烧录程序:
pyocd flash -t mcu_partnumber firmware
我的 MCU 是 stm32G431RBTx,测试固件是 HAL_06_LCD.hex,尝试使用命令 :
pyocd flash -t stm32G431RBTx HAL_06_LCD.hex来烧录程序,结果如下:
接着我们可以使用vscode配置pyocd了
用EIDE打开,在烧入配置中选择pyOCD
在芯片选择上,选择已经安装过pack包的芯片
点击下载按钮,就可以完成程序的下载
程序的DEBUG仿真
选择编辑器设置,将axf装换为elf的选项勾选
安装cortex-Debug
点击debug选择pyocd就可以实现对程序的仿真
由于pyocd使用python开发,可以使用 pyocd python api 做个上位机一键烧录,或实现云端服务器烧入。