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了。
---------------------
作者:kai迪皮
链接:https://bbs.21ic.com/icview-3332210-1-1.html
来源:21ic.com
此文章已获得原创/原创奖标签,著作权归21ic所有,任何人未经允许禁止转载。