Keil 编译后自动调用 UniFlash 烧录说明
2026/6/10 8:19:03 网站建设 项目流程

本文记录C:\Ti\Project\empty工程里把 Keil 下载改成 UniFlash 烧录的原因和配置方法。

1. 问题现象

Keil 点击Download时反复出现:

Cannot Load Flash Programming Algorithm! Cannot Write to RAM for Flash Algorithms ! Flash Download failed - "Cortex-M0+"

但同一个程序用 UniFlash 可以正常烧录。

这说明:

程序没坏 hex 没坏 板子没坏 线也没坏 主要问题在 Keil 自己的 Flash Download 链路

2. 为什么 Keil 会失败

Keil 下载程序时,不是直接把 hex 写进 Flash。

它的流程大概是:

1. 连接芯片 2. 把 Flash Programming Algorithm 加载到芯片 RAM 3. 在芯片 RAM 里运行这个算法 4. 由这个算法擦除 Flash、写入 Flash、校验 Flash

如果 Keil 不能把这个算法写进 RAM,就会报:

Cannot Write to RAM for Flash Algorithms !

这个工程当前在做 ADC + DMA 实验,程序运行后 DMA 会持续写 RAM。Keil 再次下载时,需要重新接管正在运行的芯片,这时就容易失败。

而 UniFlash 使用的是 TI 自己的 DebugServer 下载链路,对 MSPM0 的接管更稳定。所以最终采用:

Keil 只负责编译 UniFlash 负责烧录

3. 最终使用方式

以后不要点 Keil 的:

Download

改为点:

Build

或者:

Rebuild

因为工程已经配置成:

Keil 编译完成后,自动调用 UniFlash 烧录 hex

4. 新增的文件

4.1keil\uniflash_mspm0g3507.ccxml

这个文件告诉 UniFlash:

芯片型号:MSPM0G3507 调试器:Texas Instruments XDS110 USB Debug Probe 接口:SWD

核心内容类似:

<instancedesc="Texas Instruments XDS110 USB Debug Probe"href="connections/TIXDS110_Connection.xml"/><instancedesc="MSPM0G3507"href="devices/MSPM0G3507.xml"/>

这个文件可以从 UniFlash 自带示例里复制:

C:\Ti\uniflash_9.5.0\deskdb\content\TICloudAgent\win\scripting\examples\debugger\mspm0g3507\mspm0g3507.ccxml

然后放到工程里:

C:\Ti\Project\empty\keil\uniflash_mspm0g3507.ccxml

5. 烧录脚本

新增文件:

C:\Ti\Project\empty\keil\uniflash_download.bat

内容如下:

@echo off setlocal set "UNIFLASH=C:\Ti\uniflash_9.5.0\dslite.bat" set "CCXML=%~dp0uniflash_mspm0g3507.ccxml" set "HEX=%~dp0Objects\empty_LP_MSPM0G3507_nortos_keil.hex" set "TI_APPDATA_DIR=%~dp0_ti" set "TEMP=%TI_APPDATA_DIR%\temp" set "TMP=%TEMP%" set "LOG=%~dp0Objects\uniflash_download.log" if not exist "%UNIFLASH%" ( echo UniFlash not found: "%UNIFLASH%" exit /b 1 ) if not exist "%HEX%" ( echo HEX not found: "%HEX%" exit /b 1 ) if not exist "%TI_APPDATA_DIR%" mkdir "%TI_APPDATA_DIR%" if not exist "%TEMP%" mkdir "%TEMP%" call "%UNIFLASH%" --config="%CCXML%" -e -f -u -g "%LOG%" "%HEX%" exit /b %ERRORLEVEL%

关键命令是:

call "%UNIFLASH%" --config="%CCXML%" -e -f -u -g "%LOG%" "%HEX%"

含义:

--config 指定 ccxml 芯片/调试器配置 -e 输出详细信息 -f flash 烧录 -u 烧录后运行程序 -g 保存日志 "%HEX%" 要烧录的 hex 文件

6. Keil 工程怎么配置

修改文件:

C:\Ti\Project\empty\keil\empty_LP_MSPM0G3507_nortos_keil.uvprojx

找到:

<AfterMake>

改成:

<AfterMake><RunUserProg1>1</RunUserProg1><RunUserProg2>0</RunUserProg2><UserProg1Name>cmd.exe /C call "C:\Ti\Project\empty\keil\uniflash_download.bat"</UserProg1Name><UserProg2Name></UserProg2Name><UserProg1Dos16Mode>0</UserProg1Dos16Mode><UserProg2Dos16Mode>0</UserProg2Dos16Mode><nStopA1X>0</nStopA1X><nStopA2X>0</nStopA2X></AfterMake>

重点是:

<RunUserProg1>1</RunUserProg1>

表示启用 After Build 用户命令。

以及:

<UserProg1Name>cmd.exe /C call "C:\Ti\Project\empty\keil\uniflash_download.bat"</UserProg1Name>

表示编译完成后执行这个 bat 脚本。

7. 关闭 Keil 的 Debug 前自动下载

同一个.uvprojx里找到:

<UpdateFlashBeforeDebugging>1</UpdateFlashBeforeDebugging>

改成:

<UpdateFlashBeforeDebugging>0</UpdateFlashBeforeDebugging>

原因:

如果这里还是 1,Keil 进入 Debug 前仍然会尝试走自己的 Flash Algorithm 下载链路。 这个链路正是当前不稳定的地方。

8. 验证是否成功

点击 Keil:

Rebuild

输出里应该能看到:

After Build - User command #1: cmd.exe /C call "C:\Ti\Project\empty\keil\uniflash_download.bat"

然后看到 UniFlash 输出:

Loading Program: C:\Ti\Project\empty\keil\Objects\empty_LP_MSPM0G3507_nortos_keil.hex Finished Running... Success

看到Success就表示:

Keil 编译成功 UniFlash 烧录成功 程序已经运行

9. 以后遇到类似问题怎么判断

如果 Keil 报:

Cannot Load Flash Programming Algorithm Cannot Write to RAM for Flash Algorithms Flash Download failed

按这个顺序判断:

1. 先确认 Build 是否 0 Error 2. 确认 hex 是否生成 3. 用 UniFlash 单独烧同一个 hex 4. 如果 UniFlash 成功、Keil Download 失败,说明不是程序和板子问题,是 Keil 下载链路问题 5. 可以改成 Keil After Build 调 UniFlash

10. 注意事项

不要再点 Download

当前工程建议使用:

Build / Rebuild

不要使用:

Download

如果换了工程名

如果 Keil 输出 hex 的文件名变了,需要同步修改:

set "HEX=%~dp0Objects\empty_LP_MSPM0G3507_nortos_keil.hex"

例如工程输出名变成test.axf/test.hex,就要改成:

set "HEX=%~dp0Objects\test.hex"

如果 UniFlash 安装路径不同

当前脚本写的是:

set "UNIFLASH=C:\Ti\uniflash_9.5.0\dslite.bat"

如果你的 UniFlash 装在别的位置,需要改这里。

11. 当前工程最终状态

当前工程采用:

Keil 编译 UniFlash 烧录

相关文件:

C:\Ti\Project\empty\keil\uniflash_download.bat C:\Ti\Project\empty\keil\uniflash_mspm0g3507.ccxml C:\Ti\Project\empty\keil\empty_LP_MSPM0G3507_nortos_keil.uvprojx

推荐操作:

打开 Keil 点击 Rebuild 等待 Output 里出现 Success

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询