【DigiKey & NXP】 NXP FRDM-K66F 救砖记(一)

前言

前面我们已经通过两个实验简单了解了使用 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