首页 > 解决方案 > 如何使用 J-Link 闪存 NXP S32K148?

问题描述

我正在使用 VS Code 和 J-Link 开发 S32K148。这是 NXP S32Kxxx 系列基于 32 位 ARM Cortex M4 的 MCU 的一部分,旨在用于高可靠性汽车和工业应用。

我想使用 JFlash(使用 J-Link)来刷写芯片,但刷写似乎已被禁用。

我的研究表明我需要为 S32Kxxx 设备提供一个 LinkScript 文件,但我在任何地方都找不到这样的文件。

我的假设是否正确,需要 LinkScript 文件?如果是这样,我在哪里可以找到这个文件?

标签: cortex-mnxp-microcontrollersegger-jlink

解决方案


首先,您需要确保 MCU 的复位引脚连接到 J-Link 的复位引脚。如果没有正确完成此操作,您将无法通过 J-Link 进行连接。

接下来,必须注意的是,S32Kxxx 系列的设计使其无法通过开箱即用的 J-Link 附加到调试会话。Segger wiki 包含更详细的描述:

ECC 保护的内部 RAM

该器件系列提供 ECC 保护的内部 RAM。默认情况下,J-Link 在连接时重置 MCU 并将 RAM 内容初始化为 0x00。这样做的原因如下:

  • 如果调试器中的内存窗口在调试会话期间打开并指向未初始化的 RAM 区域,则在下一步等时,将抛出不可屏蔽的 ECC 错误中断

  • J-Link 在闪存编程期间临时使用 RAM 的某些部分,访问未初始化的 RAM 区域会引发不可屏蔽的 ECC 错误中断

附加到调试会话

由于提到的原因 [上面,在“ECC 保护的内部 RAM”部分],没有开箱即用的附加是可能的。这是因为无法区分附加和连接。

要附加到设备,可以使用以下J-Link 脚本文件:

注意:
这个脚本文件只应该在附加的情况下使用,因为它会跳过设备特定的连接。

因此,您的研究是正确的:为了连接到设备,您必须使用 J-Link 脚本,该脚本可以从 Segger下载。内容转载如下:

*               (c) SEGGER Microcontroller GmbH & Co. KG             *
*                        The Embedded Experts                        *
*                           www.segger.com                           *
**********************************************************************

-------------------------- END-OF-HEADER -----------------------------

File    : NXP_Kinetis_S32_Attach.JLinkScript
Purpose : Script file to skip the device specific connect for the
          NXP Kinetis S32 devices, to make an attach possible.
Literature:
  [1]  J-Link User Guide
*/

/*********************************************************************
*
*       Constants (similar to defines)
*
**********************************************************************
*/

/*********************************************************************
*
*       Global variables
*
**********************************************************************
*/

/*********************************************************************
*
*       Local functions
*
**********************************************************************
*/

/*********************************************************************
*
*       Global functions
*
**********************************************************************
*/

/*********************************************************************
*
*       InitTarget()
*
*  Function description
*    If present, called right before performing generic connect sequence.
*    Usually used for targets which need a special connect sequence.
*    E.g.: TI devices with ICEPick TAP on them where core TAP needs to be enabled via specific ICEPick sequences first
*
*  Return value
*    >= 0:  O.K.
*     < 0:  Error
*
*  Notes
*    (1) Must not use high-level API functions like JLINK_MEM_ etc.
*    (2) For target interface JTAG, this device has to setup the JTAG chain + JTAG TAP Ids.
*/
int InitTarget(void) {
  //
  // As this script file is only used for attach purposes, no special handling is required.
  // Therefore, we override the default connect handled by the J-Link DLL for this device.
  // as it would trigger a reset.
  //
  return 0;
}

/*************************** end of file ****************************/

推荐阅读