MCU_SEGGER-JLINK批处理脚本烧录工具-JFlash
关于JLINK升级烧录
使用ARM内核的MCU或者SOC都可以通过JLINK的工具来进行烧录,JLINK提供了命令行和图形界面烧录的方式,一般调用jlink的jflash.exe(图形)和jlink.exe(命令行)。无论我们使用哪一种操作方式,如果从头操作烧录将会是极其麻烦,每烧录一块都需要重头设置,所以才会想引用批处理来处理,这次我们就来说一下如何调用jflash来实现批处理量产脚本。
脚本指令
// jlink自动烧录脚本
@echo off
set n=1
:loop
JFlash.exe -openSTM32.jflash -connect -openXXX.bin -erasechip -programverify -startapplication -jflashloglog.log -exit
set a=
@echo off %find "Target programmed and verified successfully" jlink.log%
if %errorlevel% equ 0 (
set /a n=%n%+1
set /p a=succeed:%n%
) else (
find "ERROR" jlink.log
set /p a = failed!!
)
if "%a%"=="" goto loop
指令解释
@echo off: 这一行指令信息不打印
set n=1: 定义变量n,记录烧录成功的次数
:loop goto loop:goto语句,和C语言同样的作用,goto 跳转到loop后往后执行。
J-Flahs指令解释和查找
JFlash.exe 的指令我们可以再help中选择j-flash user guide或者直接按F1查看帮助文档。
打开帮助文档,我们可以查看jflash支持哪些指令(这里信息很关键)如下:
找到文件的Command line options中可以找到支持的指令。
-openSTM32.jflash :打开jflash文件
-connect :连接目标
-openXXX.bin :打开需要烧录的文件,如果是hex\s19
-erasechip :擦除芯片
-programverify :编译和确认
-startapplication :启动程序
-jflashloglog.log :将烧录的log保存在log.log文件中。(文件名和后缀随便取)
-exit:退出烧录
PS:保存log这个是比较有用的,我也是查了好久才从帮助文档发现的。
指令解释
set a= 设置一个打印信息的变量
@echo off %find “Target programmed and verified successfully” jlink.log%:通过find命令检索Target programmed and verified successfully判断烧录是否成功,加上@echo off 是不希望将检索信息打印在终端
if %errorlevel% equ 0 (
set /a n=%n%+1
set /p a=succeed:%n%
) else (
find “ERROR” jlink.log
set /p a = failed!!
)
检索结果保存在errorlevel,如果存在检索内容,则为0,否则再进行检索“ERROR”内容,这次就需要将检索内容打印出来,然后提示失败。
上面我们用到了set /a和set /p,set /a 就相当于数字计算,而set /p是终端输出打印,需要等待键盘输入。具体解释可以看下百度: link.
所以我们就利用set /p的特性,在终端提示后等待键盘键入(保存在a中),进行判断是否为回车if “%a%”=="" goto loop。等键入回车以后,通过goto又重回loop运行。
总结
主要的难点就是运行J-Flash的命令,需要通过帮助文档去查找。保存烧录过程中的log信息,在通过find命令检查对应内容来判断烧录结果,最后goto回loop点开始继续循环运行。