使用DAP-Link单独下载可执行文件到MM32F5微控制器
时间:2022-11-27 00:30:00
使用DAP-Link单独下载可执行文件MM32F5微控制器
suyong_yq,2022年5月
文章目录
- 使用DAP-Link单独下载可执行文件MM32F5微控制器
-
- 引言
- 借用Keil工程
- 使用Ozone
引言
使用Keil MDK或者IAR利用图形界面的开发环境,可以在图形界面环境下编译源代码工程,并将编译生成的可执行文件下载到目标微控制器。但如果使用ARMGCC在下载目标微控制器之前,需要额外的下载工具来下载编译生成的可执行文件。
若使用SEGGER J-Link可搭配调试器SEGGER Ozone软件或者J-FLASH、J-FLASH Lite实现单独下载的功能。但J-Link调试器价格昂贵,旧版本J-LINK调试器不能支持更新的微控设备。相比之下,开源DAP-Link方案更接地气。可以适配DAP-Link命令行工具有openocd、pyocd等等,但这些工具对某些特定的微控制器设备的兼容性不是很好,不时识别设备或无法连接,开发人员需要调试以确保他们能够正常工作。同时,基于命令的操作模式对习惯在图形界面环境中调试的开发者也不是很友好。不过,若是需要搭建持续集成和自动化测试系统,这些基于命令行的工具仍是不可或缺的。
对于只关注微控制器端的软件开发者来说,他们希望以最简单的方式解决单独下载可执行文件的问题。本文将下载MicroPython灵活的固件文件MM32F5微控制器为例,总结了几种简单易用的方法,专门针对使用DAP-Link通过常用的图形界面工具,调试器可以单独下载可执行文件。
PS:针对MM32F5微控制器必须使用本文描述的原因在于一些主观因素:
- 笔者手头的J-Link v8不再支持STAR-MC1(Arm Cortex-M33)内核
- 笔者使用pyocd DAP-Link经过一段时间的调试,组合仍然无法连接MM32F5微控制器
- 使用DAP-Link在Keil中可以调试MM32F5微控制器
例如,使用这些工具可以识别常用的可执行文件类型bin、hex、axf、elf、s19.用户可以根据需要尝试。
借用Keil工程
Keil IDE与编译过程相比,实现下载功能的部分也应该是一个独立的小工具,作者可以使用它Keil下载程序的关键。Keil内部下载工具没有独立打开。因此,作者必须创建一个不包含任何源代码的空项目,跳过编译部分,只使用下载程序的功能。具体操作步骤如下:
- 启动Keil IDE,创建新项目,选择设备类型作为目标微控制器设备。
作者实际上在这台机器上d:\_worksapce\keil\mm32f5
创建在目录下mm32f5.uvprojx
工程文件。
- 在
options
->Output
选项卡中,指定将要下载的可执行文件的路径。
作者在样例中mm32f5
存储在目录下micropython.hex
文件。点击Select Folder for Objects...
按钮,指定为mm32f5
然后是目录Name of Executable:
输入相应的文本框micropython.hex
文件名。
从字面上看,这里指定了编译输出的路径和文件名,但实际上,下载过程与编译过程绑定,编译过程生成的可执行文件将被绑定Keil自动作为下载过程的输入文件。
- 在主窗工具栏中,单击LOAD按钮,启动下载。
通过 Build Output
从窗口可以看出,已经成功擦除、下载和验证。
- 使用Keil IDE命令行式的下载操作也可以实现。
此时,可使用Keil IDE视为创建工程uv4.exe
例如,之前创建的程序配置文件mm32f5.uvprojx
编辑文件OutputDirectory
和OutputName
指定要下载程序的路径和文件名。
<Project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="project_projx.xsd"> <SchemaVersion>2.1SchemaVersion> <Header>### uVision Project, (C) Keil SoftwareHeader> <Targets> <Target> <TargetName>Target 1TargetName>
<ToolsetNumber>0x4ToolsetNumber>
<ToolsetName>ARM-ADSToolsetName>
<uAC6>1uAC6>
<TargetOption>
<TargetCommonOption>
<Device>MM32F5277E9PDevice>
<Vendor>MindMotionVendor>
<PackID>MindMotion.MM32F5277E_DFP.0.0.3PackID>
<PackURL>http://www.mindmotion.com.cn/Download/MDK_KEIL/PackURL>
<Cpu>IRAM(0x30000000,0x1C000) IROM(0x08000000,0x40000) CPUTYPE("Cortex-M33") CLOCK(12000000) ELITTLECpu>
<FlashUtilSpec>FlashUtilSpec>
<StartupFile>StartupFile>
<FlashDriverDll>UL2V8M(-S0 -C0 -P0 -FD30000000 -FC1000 -FN1 -FF0MM32F5270_256 -FS08000000 -FL040000 -FP0($$Device:MM32F5277E9P$Flash\MM32F5270_256.FLM))FlashDriverDll>
...
<OutputDirectory>.\OutputDirectory>
<OutputName>micropython.hexOutputName>
...
然后在Windows的命令行界面,输入调用Keil下载代码的命令:
uv4.exe -f "d:\_workspace\keil\mm32f5\mm32f5.uvprojx" -j0 -o "d:\_workspace\keil\mm32f5\download_log.txt"
使用命令行方式有一点不方便,命令行在后台调用Keil执行下载过程没有任何用户交互。命令行触发执行uv4.exe
程序不是阻塞式的,所以无法通过程序是否返回判定下载过程已结束。虽然在命令中指定输出log到指定文件中,但Keil并不是在下载结束后才创建输出文件,而是逐条写入输出文件。如果用户在下载过程中打开这个log输出文件,将会看到已经执行的部分操作。因此,也不能通过是否创建log输出文件判定已将下载成功。必须检查log输出文件的内容,待其中包含下载成功并通过验证的记录后,才能最终判定下载情况。
使用Ozone
常用J-Link调试器的开发者对Ozone都不陌生。Ozone和J-Link都是SEGGER公司设计发布的面向调试和下载应用的工具,Ozone是一套具有图形界面的上位机工具,可以适配J-Link调试器,独立下载可执行文件到目标微控制器并进行调试。但实际上,Ozone除了适配自家发售的J-Link调试器外,还提供了对开源CMSIS-DAP(DAP-Link)的支持,即使用Ozone通过DAP-Link连接到目标微控制器,也能够实现独立下载而执行文件并调试的功能。不过,Ozone支持DAP-Link毕竟只是额外的福利,几乎每个步骤都会弹窗提示,“这只是个试用功能,未经过充分测试”。
使用Ozone适配DAP-Link的操作同使用J-Link的情况相同,具体步骤如下:
- 启动Ozone软件,选择目标微控制器设备。
刚启动Ozone软件时,Ozone会自动检测到当前电脑上已经接入了DAP-Link调试器,然后提示警告“必须接受如下条款:1. 当前软件仅适用非商业用途或评估;2. SEGGER官方不会提供技术支持”。选择接受“Accpet”。
- 选择目标微控制器设备。
当确认目标微控制器设备后,警告提示对话框会再次弹出。仍然是接受“Accept”。
- 在“连接配置”对话框中,可以看到已经识别出来的DAP-Link了。
Ozone连接调试器的速度,在默认情况下被配置成4MHz。笔者手上的DAP-Link方案中,使用的是低速USB接口,考虑稳妥的情况,将速度改为1MHz。
- 选择将要下载的可执行文件
- 开始下载。
再次弹出提示对话框。选择接受“Accept”。
再次弹出提示对话框。选择接受“Yes”。
- 下载成功
如果对频繁弹出的警告对话框不喜,可勾选“不要重复弹出”复选框,有一定改善效果。