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"
我的习惯:每次写脚本前,我都会先用GUI手动烧录一次,确认项目配置没问题。然后把项目文件保存下来,命令行里直接引用它。这样能避免很多参数拼写错误。

3.2 烧录Hex文件

Hex文件是嵌入式开发中最常见的烧录格式。它包含了地址信息和校验码,J-Flash解析起来很稳定。

最基本的烧录命令长这样:

JFlash.exe -openprj:my_project.jflash -open:firmware.hex -auto -exit -startapp

这条命令干了什么事?我拆解给你看:

  1. -openprj:my_project.jflash —— 加载项目配置(芯片型号、Flash算法、接口速度等)
  2. -open:firmware.hex —— 加载Hex固件文件
  3. -auto —— 自动执行:连接→擦除→编程→校验
  4. -exit —— 烧完就关,不弹窗
  5. -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起始地址。不同芯片不一样,你得查数据手册。

我曾经踩过的坑:有一次烧录Bin文件,忘记指定地址了。结果J-Flash默认从0x00000000开始写,直接把芯片的Bootloader区域给覆盖了。板子直接变砖,最后只能通过SWD强行擦除整片Flash才救回来。所以,烧Bin文件,地址必须给对。

如果你不确定芯片的Flash起始地址,可以在J-Flash GUI里打开项目,在"Target Device"设置里能看到。或者直接看芯片手册的Memory Map章节。

3.4 参数组合与执行流程

这些参数不是孤立的,它们组合起来形成了一条完整的烧录流水线。我画了张图,帮你理清执行顺序:

JFlash.exe 命令行烧录执行流程 加载项目配置 -openprj:xxx.jflash 加载固件文件 -open:xxx.hex / .bin,addr 连接目标芯片 自动检测SWD/JTAG 擦除Flash 整片或按扇区擦除 编程(烧录) 写入固件数据 校验 + 启动应用 -auto 自动校验,-startapp 运行 💡 关键点 • -auto 包含连接→擦除→编程→校验 • -exit 让进程自动退出 • -startapp 复位并运行 ⚠️ 注意 Bin文件必须指定起始地址 Hex文件自带地址,无需指定

你看,整个流程是串行的。任何一个环节失败,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的路径加到系统环境变量里。这样脚本里直接写 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片。

嗯,命令行这块其实不难,关键是参数要记牢,路径要写对。多试几次,你就能闭着眼写烧录脚本了。