【问题标题】:How can I flash the NXP S32K148 using J-Link?如何使用 J-Link 闪存 NXP S32K148?
【发布时间】:2021-03-28 19:09:43
【问题描述】:

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

我想用JFlash(带J-Link)刷芯片,但是刷机好像被禁用了。

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

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

【问题讨论】:

标签: cortex-m nxp-microcontroller segger-jlink


【解决方案1】:

首先,您需要确保 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 script file

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

所以,您的研究是正确的:为了附加到设备,您必须使用 J-Link 脚本,可以下载 here from 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 ****************************/

【讨论】:

  • 感谢@Cody Gray,我意识到我的问题是一个非常非常愚蠢的问题。我不能用 JFlash 刷芯片,因为我选择了默认项目设置,而默认项目使用 Cortex-M0 作为设备,所以 JFlash 不能刷 S32K (Cortex-M4)。
猜你喜欢
  • 2022-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-20
  • 2022-06-13
  • 2017-01-25
  • 2017-01-29
  • 1970-01-01
相关资源
最近更新 更多