問(wèn)題
在IAR Embedded Workbench for Arm中使用J-Link Attach NXP S32K3的時(shí)候,會(huì)提示對(duì)應(yīng)RAM區(qū)域被初始化成0xDEADBEEF,導(dǎo)致對(duì)應(yīng)RAM區(qū)域的數(shù)據(jù)被“篡改”:

原因分析
NXP S32K3的ITCM/RAM有ECC機(jī)制,而程序下載到Flash是通過(guò)運(yùn)行在ITCM/RAM中Flashloader完成的,在將Flashloader搬運(yùn)到ITCM/RAM之前,需要對(duì)相關(guān)ITCM/RAM內(nèi)存區(qū)域按照ECC的位寬(NXP S32K3對(duì)應(yīng)的是64bit)先進(jìn)行寫(xiě)操作(上電復(fù)位之后ITCM/RAM必須先按照ECC位寬進(jìn)行寫(xiě)操作,否則會(huì)產(chǎn)生ECC錯(cuò)誤):


J-Link有相關(guān)的說(shuō)明:即NXP S32K3 ITCM區(qū)域(0x20000000- 0x20008000)和SRAM區(qū)域(0x20400000- 0x20404000)在連接的時(shí)候默認(rèn)會(huì)被初始化成默認(rèn)值(0xDEADBEEF)。如果Attach操作不想初始化對(duì)應(yīng)的區(qū)域,需要使用attach相關(guān)命令exec ForceAttachTarget=1:


解決辦法
需要在工程目錄setting文件夾中添加對(duì)應(yīng)的JLinkScript文件(對(duì)應(yīng)JLinkScript文件名字需要跟目錄下面自動(dòng)生成的.jlink文件名字一致),然后在ConfigTargetSetting函數(shù)里面添加對(duì)應(yīng)的Attach命令JLINK_ExecCommand("ForceAttachTarget = 1")。
同時(shí)NXP S32K3包含很多AP,需要指定對(duì)應(yīng)的AP配置信息,從而讓J-Link可以正確找到對(duì)應(yīng)的CPU。對(duì)應(yīng)的AP配置信息可以查看正常下載調(diào)試時(shí)候的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;
}
正常會(huì)提示-- Attach mode active. Skipping halting core & work RAM init (https://kb.segger.com/NXP_S32K3xx#ECC_RAM).

注意事項(xiàng)
ForceAttachTarget命令在J-Link驅(qū)動(dòng)V8.10g開(kāi)始支持:

使用ForceAttachTarget命令之后,正常下載調(diào)試的時(shí)候也不會(huì)初始化對(duì)應(yīng)的ITCM/RAM區(qū)域,這樣對(duì)應(yīng)ITCM/RAM區(qū)域在上電復(fù)位之后沒(méi)有初始化直接操作會(huì)產(chǎn)生ECC錯(cuò)誤,從而導(dǎo)致Flashloader出錯(cuò):

所以ForceAttachTarget命令只能用于Attach,不能用于正常下載調(diào)試!
上面的JLinkScript文件示例默認(rèn)會(huì)選擇第一個(gè)CPU,如果想選擇其它的CPU,需要配置CORESIGHT_IndexAHBAPToUse變量選擇對(duì)應(yīng)的AP(CPU)。

比如CORESIGHT_IndexAHBAPToUse = 5; 選擇NXP S32K324第二個(gè)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;
}
可以查看對(duì)應(yīng)的Debug Log和CPXNUM寄存器確認(rèn):



-
NXP
+關(guān)注
關(guān)注
61文章
1399瀏覽量
198214 -
RAM
+關(guān)注
關(guān)注
8文章
1399瀏覽量
120833 -
內(nèi)存
+關(guān)注
關(guān)注
9文章
3217瀏覽量
76415 -
J-Link
+關(guān)注
關(guān)注
0文章
90瀏覽量
23844
原文標(biāo)題:使用J-Link Attach NXP S32K3導(dǎo)致對(duì)應(yīng)RAM區(qū)域被初始化成0xDEADBEEF
文章出處:【微信號(hào):IAR愛(ài)亞系統(tǒng),微信公眾號(hào):IAR愛(ài)亞系統(tǒng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
如何實(shí)現(xiàn)NXP S32K3系列MCU安全調(diào)試
IAR Systems支持NXP S32K3 MCU系列下一代汽車應(yīng)用
j-link的操作命ConfigTargetSettings()發(fā)出的數(shù)據(jù)有什么具體的意義嗎?
S32K344調(diào)試器與J-Link調(diào)試器連接錯(cuò)誤怎么處理?
S32DS ARM調(diào)試卡在Segger J-Link上的原因?
在哪里可以獲取S32DS和S32K3軟件包下載包?
S3C44B0的初始化程序的理解
J-Link和J-Trace用戶指南免費(fèi)下載
J-Link script的組成
教你輕松J-Link不能連接目標(biāo)MCU的問(wèn)題
基于J-Link Remote Server軟件的遠(yuǎn)程調(diào)試方法
J-Link script的組成與使用方法
ST-Link也能當(dāng)J-Link?使用??
S32K3可以直連AWS云服務(wù)啦!
使用J-Link Attach NXP S32K3導(dǎo)致對(duì)應(yīng)RAM區(qū)域被初始化成0xDEADBEEF
評(píng)論