問題
在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文件示例:
intConfigTargetSettings(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");
return0;
}
正常會提示-- 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:
intConfigTargetSettings(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");
return0;
}
可以查看對應的Debug Log和CPXNUM寄存器確認:



-
NXP
+關注
關注
61文章
1379瀏覽量
195237 -
RAM
+關注
關注
8文章
1398瀏覽量
119891 -
內存
+關注
關注
9文章
3174瀏覽量
76168 -
J-Link
+關注
關注
0文章
89瀏覽量
23271
原文標題:使用J-Link Attach NXP S32K3導致對應RAM區域被初始化成0xDEADBEEF
文章出處:【微信號:IAR愛亞系統,微信公眾號:IAR愛亞系統】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
如何實現NXP S32K3系列MCU安全調試
IAR Systems支持NXP S32K3 MCU系列下一代汽車應用
j-link的操作命ConfigTargetSettings()發出的數據有什么具體的意義嗎?
S32K344調試器與J-Link調試器連接錯誤怎么處理?
S32DS ARM調試卡在Segger J-Link上的原因?
在哪里可以獲取S32DS和S32K3軟件包下載包?
S3C44B0的初始化程序的理解
J-Link和J-Trace用戶指南免費下載
J-Link script的組成
教你輕松J-Link不能連接目標MCU的問題
基于J-Link Remote Server軟件的遠程調試方法
J-Link script的組成與使用方法
S32K3可以直連AWS云服務啦!

使用J-Link Attach NXP S32K3導致對應RAM區域被初始化成0xDEADBEEF
評論