返回列表 发新帖我要提问本帖赏金: 50.00元(功能说明)

[APM32F4] 【技术分享】APM32F411的pyOCD命令行操作

[复制链接]
6301|6
 楼主| kai迪皮 发表于 2023-10-10 11:34 | 显示全部楼层 |阅读模式
本帖最后由 kai迪皮 于 2023-10-10 13:47 编辑

#申请原创# @21小跑堂
1 背景

我拿到了极海家的APM32F411 TINY板卡,其上面自带一个仿真器(基于CMISI-DAP),在一些场合中在我们使用IDE(KEIL MKD/IAR)的时候非常方便。

image-20231010095533943.png

这个是由于IDE自带了CMSIS-DAP的驱动才这样子方便的。

个人在一些应用中习惯了使用J-link与其工具链:J-Link Commander,命令行工具。在命令行中对目标芯片进行编程、读取芯片内容或者程序控制等操作。

比如下图,我使用J-Link Commander连接APM32F407芯片。

image-20231010095142287.png

所以我就想着有没有CMSIS-DAP能够使用的命令行工具,能够平替J-Link Commander?(PS:CMSIS-DAP不是已经平替Jlink了吗,(#^.^#))。

2 OpenOCD?pyOCD?

对于CMSIS-DAP的命令行工具我这边想到的有OpenOCD?pyOCD?这两个工具。这两个工具各有特点,其中OpenOCD:

1. 面试较早,使用的人较多。
2. 各家芯片不一样,若需使用,需检查OpenOCD是否支持。
3. 开源的项目,芯片支持更新情况需要有人支持。

对于Pyocd:

1. 基于Python,需要安装Python环境,程序的响应速度上有一定影响。
2. 由ARM组织主导,现阶段只支持Cortex-M内核。
3. 支持CMSIS-Pack框架,这点意味着,只要我们的芯片支持Keil MDK开发环境,就基本可以使用pyOCD。

作为一个开发者,我个人保持的看法是工具的简单使用,我不想过多的去考虑芯片的支持情况。那我基于这点我选择了pyOCD(PS:我懒得考虑为了使用一个芯片,然后得为工具去适配芯片。→_→主要是我懒)

那这里也贴一下他们的官网:

OpenOCD:https://openocd.org/

pyOCD:https://pyocd.io/

3 pyOCD的安装

既然选择了pyOCD,我们就看看如何安装pyOCD。(PS:网上有很多教程,当然我这里不是为了水)我这里精简一下步骤就是(仅是在Windows10下):

1. 安装Python环境。

   这里我们可以直接去Python官网下载,Windows下的安装包:https://www.python.org/ftp/python/3.12.0/python-3.12.0-amd64.exe(PS:pyOCD需要支持3.x的Python支持,留意下载的安装包版本)。下载完毕后点击安装即可,注意勾选:Add python.exe to PATH

image-20231010102100501.png

2. 验证Python环境是否安装成功。

   使用“Win + R”调出命令行,输入“Python”。会显示当前Python的版本号。

image-20231010102416338.png

3. 安装pyOCD。

   我这里推荐使用pip安装,在C盘根目录下,按住“shift”然后点击鼠标右键,在右键菜单中选择“在此处打开Powershell窗口(S)”。然后在命令行窗口输入:python -mpip install -U pyocd

    image-20231010103932142.png

   它可能会在最后提示你更新 pip,你直接在后面再输入一个命令:python.exe -m pip install --upgrade pip

4. 验证pyOCD是否安装成功。

   在刚刚的命令行窗口,我们可以输入“pyocd -V”,查看当前的pyOCD的版本号。

image-20231010104309779.png

至此我们的pyOCD环境搭建完成。

4 pyOCD的命令行使用

网上一般是使用pyOCD对目标芯片进行程序下载等操作。我这里想用的是它的命令行对APM32F411进行程序的控制,或者内存的读取。

我们要完成以上功能,一般要完成的步骤有:

1. 连接目标芯片。
2. 读取指令,读取目标芯片。
3. 控制指令,控制目标芯片。

那步骤也是比较清晰的,我们理论存在,则开始进行。首先我们启动命令行(在任意目录下,按住“shift”然后点击鼠标右键,在右键菜单中选择“在此处打开Powershell窗口(S)”。)

4.1 连接APM32F411

连接目标芯片并使用命令行控制APM32F411,我们用的指令是:“pyocd commander --pack C:\Keil_v5\Packs\.Download\Geehy.APM32F4xx_DFP.1.0.4.pack -t apm32f411ve”。其中“C:\Keil_v5\Packs\.Download\Geehy.APM32F4xx_DFP.1.0.4.pack”是我的APM32F411的Pack包路径,因为我安装Keil MDK的环境,所以就直接使用Keil 根目录下面的了。

PS:可能有些人在这一步会出错,可能是pack的目录太深,或者包含中文字符导致的。

然后会让我们选择相应的仿真器,我这里的是“0”号仿真器“Geehy CMSIS-DAP WinUSB”,输入“0”,再回车,会显示连接状态。

image-20231010105115580.png

4.2 读取芯片内容

pyOCD读取芯片目标内容的指令是:rw。即读取一个word。

输入“rw 0x08000000 0x100”即可读取APM32F411从0x08000000地方开始的0x100个word。

image-20231010105929651.png

4.3 停止芯片程序运行

pyOCD停止芯片程序运行的指令是:h。

输入“h”即可停止芯片的程序运行。

image-20231010110043518.png

(PS:我芯片里面本身有LED闪烁程序,输入该指令LDE会停止闪烁,如果你芯片里面没程序,这个指令看起来就没啥变化)

4.4 继续运行芯片程序

pyOCD继续运行芯片程序的指令是:g。

输入“g”即可继续运行芯片程序。

image-20231010110308733.png

(PS:我芯片里面本身有LED闪烁程序,输入“h”指令LDE会停止闪烁,输入“g”指令LDE会开始闪烁)

4.5 擦除指令

pyOCD擦除芯片程序的指令是:erase。

输入“erase”即可擦除芯片程序。

image-20231010110513589.png
4.6 程序下载指令

pyOCD程序下载的指令是:load。

输入“load  FILENAME [ADDR]”即可下载程序(PS:注意文件路径不要有中文,bin文件要带下载地址)。
我这里是:load D:\APM32F411_SysTick_TimeBase.hex

image-20231010111115746.png

4.7 程序读取命令

pyOCD程序读取的指令是:savemem。

输入“savemem  ADDR LEN FILENAME”即可读取并保存芯片的程序(PS:注意文件路径不要有中文,文件格式是bin文件)。
我这里是:savemem 0x08000000 0x2800 D:\APM32F411_SysTick_TimeBase_read.bin

image-20231010111633746.png

4.8 更多指令

当然,pyOCD程序支持的指令有很多,只有我们输入“help”,它就会把所有的指令显示出来。

(PS:输入“q”可以退出pyOCD的命令行操作。)

5 总结

pyOCD程序从本文看下来基本可以做到了J-Link Commander的平替,有这个需求的小伙伴也可以拿到APM32F411 TINY板后看看,不需要掰断后飞线连接到J-link了。

打赏榜单

21小跑堂 打赏了 50.00 元 2023-10-19
理由:恭喜通过原创审核!期待您更多的原创作品~

评论

@21小跑堂 :感谢支持Thanks♪(・ω・)ノ  发表于 2023-10-19 18:23
以pyOCD命令行工具平替J-Link Commander,APM32F411 TINY板卡上完成以CMSIS-DAP为依托的命令行操作。  发表于 2023-10-19 18:20
@forgot :感谢支持,欢迎一起交流  发表于 2023-10-13 20:15
赞,来学习一下!  发表于 2023-10-12 11:44
chenjun89 发表于 2023-10-16 22:40 来自手机 | 显示全部楼层
黑色板子很漂亮,pyOCD看起来很好用。
 楼主| kai迪皮 发表于 2023-10-17 14:01 | 显示全部楼层
chenjun89 发表于 2023-10-16 22:40
黑色板子很漂亮,pyOCD看起来很好用。

pyOCD 还是可以的,虽然比不上收钱的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

43

主题

292

帖子

11

粉丝
快速回复 在线客服 返回列表 返回顶部