发新帖本帖赏金 50.00元(功能说明)我要提问
返回列表
打印
[APM32F4]

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

[复制链接]
1718|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
kai迪皮|  楼主 | 2023-10-10 11:34 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 kai迪皮 于 2023-10-10 13:47 编辑

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

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



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

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

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



所以我就想着有没有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



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

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



3. 安装pyOCD。

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

   

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

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

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



至此我们的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”,再回车,会显示连接状态。



4.2 读取芯片内容

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

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



4.3 停止芯片程序运行

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

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



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

4.4 继续运行芯片程序

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

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



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

4.5 擦除指令

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

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


4.6 程序下载指令

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

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



4.7 程序读取命令

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

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



4.8 更多指令

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

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

5 总结

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

使用特权

评论回复

打赏榜单

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

评论
kai迪皮 2023-10-19 18:23 回复TA
@21小跑堂 :感谢支持Thanks♪(・ω・)ノ 
21小跑堂 2023-10-19 18:20 回复TA
以pyOCD命令行工具平替J-Link Commander,APM32F411 TINY板卡上完成以CMSIS-DAP为依托的命令行操作。 
kai迪皮 2023-10-13 20:15 回复TA
@forgot :感谢支持,欢迎一起交流 
forgot 2023-10-12 11:44 回复TA
赞,来学习一下! 
沙发
chenjun89| | 2023-10-16 22:40 | 只看该作者
黑色板子很漂亮,pyOCD看起来很好用。

使用特权

评论回复
板凳
kai迪皮|  楼主 | 2023-10-17 14:01 | 只看该作者
chenjun89 发表于 2023-10-16 22:40
黑色板子很漂亮,pyOCD看起来很好用。

pyOCD 还是可以的,虽然比不上收钱的

使用特权

评论回复
发新帖 本帖赏金 50.00元(功能说明)我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

26

主题

196

帖子

11

粉丝