4、烧录软件操作:J-Flash界面详解、目标芯片选择、烧录地址配置、烧录与校验

J-Flash 这个工具,说白了就是 Segger 家给 J-Link 配的图形化烧录软件。我最早用的时候也觉得它界面有点乱,但摸清楚几个核心面板之后,你会发现它其实挺顺手的。

核心认知:J-Flash 不是万能的。它只负责把固件通过 J-Link 写到芯片里,不负责编译、不负责调试。你拿到的 .hex 或 .bin 文件,才是它的“食材”。

4.1 J-Flash 界面:别被按钮吓到

打开 J-Flash,你会看到几个主要区域。我习惯先关掉那些不常用的浮动窗口,只保留最关键的几个。

  • 菜单栏:File、Target、Options 等。大部分操作其实用快捷键更快。
  • 工具栏:连接、烧录、校验、复位等按钮。鼠标悬停会显示功能提示。
  • 数据窗口:显示烧录地址和数据的十六进制内容。平时不用管它,但出问题时可以在这里核对。
  • 日志窗口:最下面那一栏。每次连接、烧录、校验的详细信息都会打印在这里。我建议你养成看日志的习惯。

嗯,这里要注意:日志窗口默认可能被折叠了。如果发现点了烧录没反应,先看看日志窗口有没有报错信息。

我的习惯:每次打开 J-Flash,第一件事就是按 F1 打开帮助文档。别笑,J-Flash 的帮助文档写得相当清楚,很多问题翻翻就能解决。

4.2 目标芯片选择:这一步错了,后面全白干

选芯片型号,是烧录前最重要的一步。选错了,轻则烧录失败,重则把芯片锁死。

操作路径:File → Open Project → 选择芯片厂商 → 选择芯片型号。

举个例子,如果你用的是 STM32F103C8T6,那就选 ST → STM32F1 Series → STM32F103C8。注意,C8 和 CB 的 Flash 大小不同,选错了地址范围会出问题。

我曾经在项目里遇到过一件事:同事选了 STM32F103RB,结果烧录一直报错。折腾了半天,才发现芯片其实是 STM32F103R8。你看,一个字母之差,折腾一上午。

芯片型号 Flash 大小 J-Flash 中对应的选择
STM32F103C8T6 64 KB STM32F103C8
STM32F103CBT6 128 KB STM32F103CB
STM32F103RCT6 256 KB STM32F103RC

避坑指南:我曾经见过有人用 J-Flash 给 nRF52832 烧录时选了 nRF52840 的配置。结果烧录是成功了,但芯片跑起来各种奇怪问题。因为外设地址映射不一样。所以,选型号时一定要跟芯片丝印核对清楚。

4.3 烧录地址配置:别把代码写到“别人家”

烧录地址,就是告诉 J-Flash:你的固件要放到芯片 Flash 的哪个位置。

对于大多数 MCU,默认起始地址是 0x08000000(STM32 系列)或 0x00000000(某些 ARM 核)。但如果你在做 Bootloader + App 的架构,App 的起始地址就要偏移。

配置方法:Options → Project Settings → Flash Download → 勾选“Start address”并填入地址。

举个例子,如果你的 Bootloader 占了 0x08000000 ~ 0x08003FFF(16 KB),那 App 的起始地址就是 0x08004000。同时,你的编译器(比如 Keil 或 IAR)里的链接脚本也要改成这个地址,两边必须一致。

关键点:烧录地址 ≠ 代码在 Flash 里的实际运行地址。烧录地址是“写进去的位置”,运行地址是“CPU 从哪里取指令”。对于位置无关代码(PIC),两者可以不同;但对于大多数嵌入式固件,两者是相同的。

我建议你在配置完地址后,先点一下 Target → Check,让 J-Flash 校验一下地址范围是否合法。如果地址超出了芯片的 Flash 大小,它会直接报错。

4.4 烧录与校验:一次成功的闭环

配置好芯片和地址后,烧录就很简单了。流程如下:

  1. 加载固件:File → Open Data File,选择你的 .hex 或 .bin 文件。
  2. 连接目标:Target → Connect。日志窗口会显示连接信息,比如 J-Link 固件版本、芯片 ID 等。
  3. 执行烧录:Target → Production Programming(或按 F7)。
  4. 自动校验:烧录完成后,J-Flash 默认会做一次 CRC 校验。如果校验失败,它会弹窗提示。

你想想看,如果烧录完不校验,你怎么知道写进去的数据对不对?尤其是量产的时候,偶尔会有 Flash 写入错误的情况。校验就是最后一道防线。

我的习惯:烧录完成后,我会手动点一次 Target → Verify,再读一遍 Flash 内容跟原始固件做对比。虽然 J-Flash 自动做了校验,但多一次确认总没坏处。尤其是做 Bootloader 升级时,这一步能避免变砖。

如果校验失败,别慌。先检查以下几点:

  • 芯片型号是否选对?
  • 烧录地址是否在 Flash 范围内?
  • J-Link 连接是否稳定?有时候线接触不良会导致数据错误。
  • 芯片是否被读保护(RDP)?如果是,需要先解除保护。
// 校验失败的典型日志输出
// 注意看最后的 "ERROR" 字样
Connecting to J-Link...
J-Link firmware: V10.1
Target connection: OK
Programming target...
Erasing sectors...
Programming done.
Verifying...
ERROR: Data mismatch at address 0x08000100
Expected: 0x12345678
Read:     0x00000000

看到这种日志,基本就是 Flash 没写进去。可能是芯片处于保护状态,或者地址配置错了。

4.5 核心流程:一张图看懂

下面这张图,是我自己总结的 J-Flash 烧录流程。每次带新人时,我都会先让他们看这张图。

J-Flash 烧录核心流程 J-Flash 烧录核心流程 启动 J-Flash 选择芯片型号 配置烧录地址 加载固件 连接目标 烧录 + 校验 ⚠️ 常见错误 • 芯片型号选错 • 烧录地址越界 • J-Link 连接不稳定 ✅ 校验通过后 • 断开 J-Link • 复位目标板 • 观察运行状态

这张图把整个流程串起来了。你按这个顺序走,基本不会出大问题。如果中间某一步报错,就回到上一步检查配置。

好了,J-Flash 的操作就这些。记住:选对芯片、配好地址、烧录完一定要校验。这三步做到位,烧录这件事就稳了。