前言
前面我们已经通过两个实验简单了解了使用 PlatformIO IDE 对 FRDM-K66F 进行编程的过程。正当我准备通过 ESP32-C3-DevKitM-1 为 FRDM-K66F 增添无线能力的时候,在上传固件时遇到了 FRDM-K66F 变砖(Bricking)的问题。
查找论坛发现这个问题在 FRDM-K66F 整个系列中比较常见,Mbed 论坛有个流程图说明了遇到此种情况的操作流程:
由于手头没有调试器,于是我想着能否通过 ST-Link 来救砖,但是当我把 ST-Link 刷 J-Link OB 后发现其仅支持 ST 的板子,不支持 NXP 的开发板。
SEGGER 把 ST-Link → J-Link OB 的固件绑定了使用条款,规定该固件只可用于 ST 的目标板 / 评估板,不允许用于非 ST 芯片或自制硬件。
之后我在网上刷到了这个贴子:How to Recover the OpenSDA V2.x Bootloader | MCU on Eclipse
上面有提到使用 FRDM 开发板对另一块 FRDM 开发板进行编程,于是我立马入手了一块 FRDM-MCAX156,但买来后才发现这个系列板载的 MCU-Link 仅能调试板载 MCU(MCAX156),无法调试外部 MCU。遂又买来一个 J-Link(用的瑞萨的 MCU),如下图:
FRDM-K66F 的引导体系简介
FRDM-K66F 的引导体系分为两部分,见下表:
| 层级 | 名称 | 运行位置 | 作用 |
|---|---|---|---|
| ① Interface Bootloader | Bootloader (BL) | 板载调试芯片(MK20DX128)内部 Flash | 负责更新下一层的“Interface Firmware” |
| ② Interface Firmware | DAPLink Interface (IF) | 同样在 MK20DX128 内部 Flash | 提供 USB Mass Storage(拖拽烧录)、CMSIS-DAP 调试、串口桥接功能 |
Interface Bootloader(Bootloader 层)
-
这个是 最底层的安全保护层。
-
由 mbed/DAPLink 官方提供,存放在板载的 MK20DX128 芯片中。
-
功能:
- 负责从 USB 或 SWD 接口更新 Interface Firmware;
- 防止误刷坏调试固件;
- 一般只需在固件升级失败或固件损坏时才使用;
- 当你插上板看到磁盘名是 BOOTLOADER 时,就是进入了这一层。
文件名示例:
0244_k20dx_bl_0x8000.bin
Interface Firmware(DAPLink 层)
-
这是 Bootloader 加载的主要工作层;
-
提供用户常用的接口功能,包括:
- USB 存储(拖拽 .bin 文件自动烧录)
- CMSIS-DAP 调试接口(供 pyOCD、Keil、MCUXpresso 调试)
- USB-Serial 串口桥接(连接目标 MCU 的 UART)
文件名示例:
0244_k20dx_frdmk66f_if_crc.bin
我的 FRDM-K66F 目前是处于无法挂载的状态,根据流程图我的 FRDM-K66F 需要先刷 Interface Bootloader,可以在电脑上挂载为 MAINTAINCE,再刷 Interface Firmware,就可以恢复上传程序了。
硬件连线
| J-Link 引脚 | FRDM-K66F K20 SWD 接口 | 功能 |
|---|---|---|
| SWDIO | Pin 2 (SWDIO) | 数据线 |
| SWCLK | Pin 4 (SWCLK) | 时钟线 |
| GND | Pin 3 / 5 / 9 (GND) | 公共地 |
| VCC | Pin 1 (VCC 3.3V) | 电平参考(非供电) |
| RESET | Pin 10(RESET) | 重启 |
具体刷机过程大家可以参考:Freedom OpenSDA Firmware Issues Reported on Windows 10 - NXP Community


