3、J-Flash命令行基础:JFlash.exe的常用参数、烧录Hex文件、烧录Bin文件
说实话,很多工程师用J-Flash只会点鼠标。打开软件,选芯片,加载文件,点烧录……一套操作下来,少说也要十几秒。但你要是产线批量烧录,或者集成到自动化脚本里,这效率就完全跟不上了。
我个人习惯,能用命令行解决的,绝不开GUI。JFlash.exe其实是个很强大的命令行工具,只是很多人没仔细研究过它的参数。今天我们就把它掰开揉碎了讲清楚。
3.1 JFlash.exe的核心参数
先看看JFlash.exe支持哪些关键参数。我整理了一张表,平时写脚本时直接对照着查就行。
| 参数 | 说明 | 示例 |
|---|---|---|
-openprj |
打开已有的J-Flash项目文件(.jflash) | -openprj:C:\project.jflash |
-open |
加载烧录文件(Hex/Bin/Srec等) | -open:C:\firmware.hex |
-auto |
自动执行烧录(连接→擦除→编程→校验→运行) | -auto |
-exit |
烧录完成后自动退出J-Flash | -exit |
-startapp |
烧录后启动应用程序(复位并运行) | -startapp |
-connect |
仅连接目标芯片,不执行烧录 | -connect |
-erase |
仅擦除芯片 | -erase |
-jflash |
指定JFlash.exe的路径(用于脚本中) | -jflash:"C:\SEGGER\JLink_V794\JFlash.exe" |
3.2 烧录Hex文件
Hex文件是嵌入式开发中最常见的烧录格式。它包含了地址信息和校验码,J-Flash解析起来很稳定。
最基本的烧录命令长这样:
JFlash.exe -openprj:my_project.jflash -open:firmware.hex -auto -exit -startapp
这条命令干了什么事?我拆解给你看:
- -openprj:my_project.jflash —— 加载项目配置(芯片型号、Flash算法、接口速度等)
- -open:firmware.hex —— 加载Hex固件文件
- -auto —— 自动执行:连接→擦除→编程→校验
- -exit —— 烧完就关,不弹窗
- -startapp —— 烧完后让芯片直接跑起来
实际项目经验:有一次我在产线调试,发现烧录到一半总是报错。查了半天,原来是Hex文件路径里有中文空格。JFlash.exe对路径中的空格很敏感,建议用双引号包起来,或者干脆路径里别用中文和空格。
如果你只想烧录,不自动运行,去掉 -startapp 就行:
JFlash.exe -openprj:my_project.jflash -open:firmware.hex -auto -exit
3.3 烧录Bin文件
Bin文件和Hex文件最大的区别是什么?Bin文件没有地址信息。它就是一串纯粹的二进制数据,你必须告诉J-Flash把它放到哪个起始地址。
所以烧录Bin文件时,-open参数后面要跟上地址:
JFlash.exe -openprj:my_project.jflash -open:firmware.bin,0x08000000 -auto -exit -startapp
注意看 -open:firmware.bin,0x08000000 这里的逗号和地址。0x08000000是STM32系列常见的Flash起始地址。不同芯片不一样,你得查数据手册。
如果你不确定芯片的Flash起始地址,可以在J-Flash GUI里打开项目,在"Target Device"设置里能看到。或者直接看芯片手册的Memory Map章节。
3.4 参数组合与执行流程
这些参数不是孤立的,它们组合起来形成了一条完整的烧录流水线。我画了张图,帮你理清执行顺序:
你看,整个流程是串行的。任何一个环节失败,J-Flash都会返回非零的退出码。这在脚本里特别好判断——检查退出码就知道烧录成没成功。
3.5 实战:一条命令搞定产线烧录
假设你有一批STM32F407的板子要烧录,项目文件已经配好了。你的批处理脚本可以写成这样:
@echo off
set JFLASH_PATH="C:\SEGGER\JLink_V794\JFlash.exe"
set PROJECT="D:\production\stm32f407_prod.jflash"
set HEX_FILE="D:\production\firmware_v2.1.hex"
echo 开始烧录...
%JFLASH_PATH% -openprj:%PROJECT% -open:%HEX_FILE% -auto -exit -startapp
if %errorlevel% equ 0 (
echo 烧录成功!
) else (
echo 烧录失败,错误码:%errorlevel%
pause
)
JFlash.exe 就行,不用每次写全路径。我一般会在部署脚本里自动配好环境变量,省得产线工人还要手动配置。
3.6 常见问题与排查
命令行烧录看着简单,但实际用起来总会遇到些小毛病。我列几个常见的:
- 提示"Could not connect to target" —— 检查SWD线有没有接好,目标芯片有没有供电。有时候是J-Link驱动版本太老,更新一下就好。
- 烧录到一半卡死 —— 大概率是Flash算法不对。重新在GUI里选对芯片型号,保存项目文件再试。
- 退出码不是0但没报错信息 —— 加上
-log参数输出日志,比如-log:burn_log.txt,然后看日志里具体哪一步失败了。 - Bin文件烧进去跑不起来 —— 地址给错了。确认一下芯片的Flash起始地址,STM32一般是0x08000000,NXP的LPC系列可能是0x00000000。
-auto 而不加 -openprj。没有项目文件,J-Flash不知道你的芯片型号和Flash算法,会使用默认配置。默认配置很可能不对,烧进去就是砖。我见过有人这么干,结果烧了100片,废了80片。
嗯,命令行这块其实不难,关键是参数要记牢,路径要写对。多试几次,你就能闭着眼写烧录脚本了。