
引言
使用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没有将内部的下载工具独立地开放出来,因此,笔者不得不创建一个不包含任何源码的空工程,跳过编译部分,仅使用其中下载程序的功能。具体操作步骤如下:
1
启动Keil IDE,创建新工程,并选定设备类型为目标微控制器设备。
笔者实际在本机的`d:\_worksapce\keil\mm32f5`目录下,创建了`mm32f5.uvprojx`工程文件。

图1 在Keil IDE中创建新工程
2
在`options` -> `Output` 选项卡中,指定将要下载的可执行文件的路径。
在样例中,笔者在`mm32f5`目录下,存放了`micropython.hex`文件。点击`Select Folder for Objects...`按钮,指定为`mm32f5`目录,然后在`Name of Executable:`对应的文本框中输入了`micropython.hex`文件名。

图2 在Keil工程中指定下载文件的路径及文件名
从字面上看,这里指定的是编译输出的路径和文件名,但实际上,下载过程是同编译过程绑定的,编译过程生成的可执行文件,将被Keil自动作为下载过程的输入文件。
3
在主窗口的工具栏中,单击LOAD按钮,启动下载。

图3 在Keil工程中下载可执行文件到微控制器
通过 `Build Output`窗口可以查看到,当前已经擦除、下载并且校验成功。
4
使用Keil IDE也可以实现命令行式的下载操作。
此时,可将使用Keil IDE创建的工程视作`uv4.exe`程序的配置文件,例如,在之前创建的`mm32f5.uvprojx`文件中,编辑`OutputDirectory`和`OutputName`字段,指定将要下载程序的路径和文件名。
<?xmlversion="1.0"encoding="UTF-8"standalone="no"?>
<Projectxmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:noNamespaceSchemaLocation="project_projx.xsd">
<SchemaVersion>2.1</SchemaVersion>
<Header>###uVisionProject,(C)KeilSoftware</Header>
<Targets>
<Target>
<TargetName>Target1</TargetName>
<ToolsetNumber>0x4</ToolsetNumber>
<ToolsetName>ARM-ADS</ToolsetName>
<uAC6>1</uAC6>
<TargetOption>
<TargetCommonOption>
<Device>MM32F5277E9P</Device>
<Vendor>MindMotion</Vendor>
<PackID>MindMotion.MM32F5277E_DFP.0.0.3</PackID>
<PackURL>http://www.mindmotion.com.cn/Download/MDK_KEIL/</PackURL>
<Cpu>IRAM(0x30000000,0x1C000)IROM(0x08000000,0x40000)CPUTYPE("Cortex-M33")CLOCK(12000000)ELITTLE</Cpu>
<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.hex</OutputName>
...
然后在Windows的命令行界面,输入调用Keil下载代码的命令:
uv4.exe-f"d:\_workspace\keil\mm32f5\mm32f5.uvprojx"-j0-o"d:\_workspace\keil\mm32f5\download_log.txt"

使用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的情况相同,具体步骤如下:
1
启动Ozone软件,选择目标微控制器设备。
刚启动Ozone软件时,Ozone会自动检测到当前电脑上已经接入了DAP-Link调试器,然后提示警告“必须接受如下条款:1. 当前软件仅适用非商业用途或评估;2. SEGGER官方不会提供技术支持”。选择接受“Accpet”。

图4 启动Ozone
2
选择目标微控制器设备。
当确认目标微控制器设备后,警告提示对话框会再次弹出。仍然是接受“Accept”。

图5 在Ozone中选择目标设备
3
在“连接配置”对话框中,可以看到已经识别出来的DAP-Link了。
Ozone连接调试器的速度,在默认情况下被配置成4MHz。笔者手上的DAP-Link方案中,使用的是低速USB接口,考虑稳妥的情况,将速度改为1MHz。

图6 Ozone显示识别出的DAP-Link调试器
4
选择将要下载的可执行文件

图7 选择将要下载的可执行文件
5
开始下载。
再次弹出提示对话框。选择接受“Accept”。

再次弹出提示对话框。选择接受“Yes”。

图8 启动下载确认第二次警告
6
下载成功

图9 使用Ozone下载成功
如果对频繁弹出的警告对话框不喜,可勾选“不要重复弹出”复选框,有一定改善效果。
往期精彩
关于灵动
上海灵动微电子股份有限公司成立于 2011 年,是中国本土领先的通用 32 位 MCU 产品及解决方案供应商。公司基于 Arm Cortex-M 系列内核开发的 MM32 MCU 产品拥有 F/L/A/SPIN/W 五大系列,目前已量产 200多款型号,累计交付超 4 亿颗,每年都有近亿台配备了灵动 MM32MCU 的优秀产品交付到客户手中,在本土通用 32 位 MCU 公司中位居前列。

灵动客户涵盖智能工业、汽车电子、通信基建、医疗健康、智慧家电、物联网、个人设备、手机和电脑等应用领域。灵动是中国为数不多的同时获得了 Arm-KEIL、IAR、SEGGER 官方支持的本土 MCU 公司,并建立了独立、完整的通用 MCU 生态体系。灵动始终秉承着“诚信、承诺、创新、合作”的精神,为客户提供从硬件芯片到软件算法、从参考方案到系统设计的全方位支持。

灵动股份


长按识别二维码关注我们

MORE
官网:www.mm32mcu.com
微信公众号:灵动MM32MCU
灵动MM32MCU技术论坛:
bbs.21ic.com/iclist-696-1.html
暂无评论哦,快来评论一下吧!
