使用J-Link Attach NXP S32K3导致对应RAM区域被初始化成0xDEADBEEF

在IAR Embedded Workbench for Arm中使用J-Link Attach NXP S32K3的时候,会提示对应RAM区域被初始化成0xDEADBEEF,导致对应RAM区域的数据被"篡改":

原因分析

NXP S32K3的ITCM/RAM有ECC机制,而程序下载到Flash是通过运行在ITCM/RAM中Flashloader完成的,在将Flashloader搬运到ITCM/RAM之前,需要对相关ITCM/RAM内存区域按照ECC的位宽(NXP S32K3对应的是64bit)先进行写操作(上电复位之后ITCM/RAM必须先按照ECC位宽进行写操作,否则会产生ECC错误):

J-Link有相关的说明:即NXP S32K3 ITCM区域(0x20000000- 0x20008000)和SRAM区域(0x20400000- 0x20404000)在连接的时候默认会被初始化成默认值(0xDEADBEEF)。如果Attach操作不想初始化对应的区域,需要使用attach相关命令exec ForceAttachTarget=1:

解决办法

需要在工程目录setting文件夹中添加对应的JLinkScript文件(对应JLinkScript文件名字需要跟目录下面自动生成的.jlink文件名字一致),然后在ConfigTargetSetting函数里面添加对应的Attach命令JLINK_ExecCommand("ForceAttachTarget = 1")。

同时NXP S32K3包含很多AP,需要指定对应的AP配置信息,从而让J-Link可以正确找到对应的CPU。对应的AP配置信息可以查看正常下载调试时候的Debug Log,下面以NXP S32K324为例:

下面是NXP S32K324用于Attach操作的JLinkScript文件示例:

复制代码
int ConfigTargetSettings(void) {  
//  
// Access Port map specification  
// Core type  
JLINK_CORESIGHT_AddAP(0, CORESIGHT_CUSTOM_AP);  
JLINK_CORESIGHT_AddAP(1, CORESIGHT_APB_AP);  
JLINK_CORESIGHT_AddAP(2, CORESIGHT_CUSTOM_AP);  
JLINK_CORESIGHT_AddAP(3, CORESIGHT_AHB_AP);  
JLINK_CORESIGHT_AddAP(4, CORESIGHT_AHB_AP);  
JLINK_CORESIGHT_AddAP(5, CORESIGHT_AHB_AP);  
JLINK_CORESIGHT_AddAP(6, CORESIGHT_CUSTOM_AP);  
JLINK_CORESIGHT_AddAP(7, CORESIGHT_CUSTOM_AP);  
JLINK_CPU                       = CORTEX_M7;
   
JLINK_ExecCommand("ForceAttachTarget = 1");  
return 0;
}

正常会提示-- Attach mode active. Skipping halting core & work RAM init (https://kb.segger.com/NXP_S32K3xx#ECC_RAM).

注意事项

ForceAttachTarget命令在J-Link驱动V8.10g开始支持:

使用ForceAttachTarget命令之后,正常下载调试的时候也不会初始化对应的ITCM/RAM区域,这样对应ITCM/RAM区域在上电复位之后没有初始化直接操作会产生ECC错误,从而导致Flashloader出错:

所以ForceAttachTarget命令只能用于Attach,不能用于正常下载调试!

上面的JLinkScript文件示例默认会选择第一个CPU,如果想选择其它的CPU,需要配置CORESIGHT_IndexAHBAPToUse变量选择对应的AP(CPU)。

比如CORESIGHT_IndexAHBAPToUse = 5; 选择NXP S32K324第二个CPU:

复制代码
int ConfigTargetSettings(void) {  
//  
// Access Port map specification  
// Core type  
JLINK_CORESIGHT_AddAP(0, CORESIGHT_CUSTOM_AP);  
JLINK_CORESIGHT_AddAP(1, CORESIGHT_APB_AP);  
JLINK_CORESIGHT_AddAP(2, CORESIGHT_CUSTOM_AP);  
JLINK_CORESIGHT_AddAP(3, CORESIGHT_AHB_AP);  
JLINK_CORESIGHT_AddAP(4, CORESIGHT_AHB_AP);  
JLINK_CORESIGHT_AddAP(5, CORESIGHT_AHB_AP);  
JLINK_CORESIGHT_AddAP(6, CORESIGHT_CUSTOM_AP);  
JLINK_CORESIGHT_AddAP(7, CORESIGHT_CUSTOM_AP);  
JLINK_CPU                       = CORTEX_M7;  
CORESIGHT_IndexAHBAPToUse = 5;
   
JLINK_ExecCommand("ForceAttachTarget = 1");  
return 0;
}

可以查看对应的Debug Log和CPXNUM寄存器确认:

相关推荐
2601_952196366 小时前
计算机科学与技术专业应届生投商业分析岗,需要哪些额外能力?
数据库·oracle
皮皮学姐分享-ppx6 小时前
地级市、省级人才政策强度测算(2000-2025)
大数据·数据库·人工智能·百度·高考
晚安日记wanna6 小时前
大厂禁 JOIN 的真正原因,拆到第四层才清楚
数据库·后端·面试
java1234_小锋7 小时前
Redis 宣布正式接入 AI
数据库·人工智能·redis
这个DBA有点耶7 小时前
数据融合平台的下一代形态:数据库内核自己就能融合,为什么还要ETL?
数据库·架构·aigc
数据库小学妹7 小时前
MySQL大表怎么优化?2亿行表的分区归档与冷热分离实战
数据库·mysql·分库分表·分区表·数据库运维·冷热分离
91刘仁德7 小时前
RAG实战 - 向量数据库(Milvus)
数据库·milvus
资深技术分享员7 小时前
Geejing WebBuilder 日志、在线用户、系统监控,出问题时的三个第一现场
java·运维·数据库
我是小白呀8 小时前
n8n 实战:把 AcmeFlow 的 READY 事件接到 CRM 通知
数据库·人工智能·workflow
蓝速科技8 小时前
仓储盘点移动终端选型与蓝速科技 K10 实战方案
运维·数据库·人工智能·科技·材质