cortex-m - 如何使用 J-Link 闪存 NXP S32K148?
问题描述
我正在使用 VS Code 和 J-Link 开发 S32K148。这是 NXP S32Kxxx 系列基于 32 位 ARM Cortex M4 的 MCU 的一部分,旨在用于高可靠性汽车和工业应用。
我想使用 JFlash(使用 J-Link)来刷写芯片,但刷写似乎已被禁用。
我的研究表明我需要为 S32Kxxx 设备提供一个 LinkScript 文件,但我在任何地方都找不到这样的文件。
我的假设是否正确,需要 LinkScript 文件?如果是这样,我在哪里可以找到这个文件?
解决方案
首先,您需要确保 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 ****************************/
推荐阅读
- android - 为什么这不能作为 Kotlin 中的返回类型?
- hazelcast - 当具有特定值的条目在 Hazelcast 上可用时如何获得通知?
- django - TypeError:上下文必须是字典而不是 HttpResponseRedirect
- for-loop - 双模运算符
- pouchdb - PouchDB 如何响应 Couch DB 验证错误?
- python - tensorflow lite:将重新训练的图形模型转换为 lite 格式时出错
- javascript - 如何通过 Angular 4 中的 App 组件访问私有属性?
- php - htaccess 去除反斜杠
- swift - 多次添加 SCNNode 只显示一次
- wordpress - WP REST API 如何检查标头基本身份验证