OpenSDA debugging problem when relocating code to RAM on KEAZ128

取消
显示结果 
显示  仅  | 搜索替代 
您的意思是: 
已解决

OpenSDA debugging problem when relocating code to RAM on KEAZ128

跳至解决方案
2,711 次查看
walter_wang
Contributor III

Dears,

We are working on a design based on Kinetis KEAZ128. To boost the performance of poor 40MHz Cortex M0+ core, we decided to put some key C functions into RAM to avoid Flash ROM access latency.

We have studied the document below and modified our code as chaptor 4.3:

Relocating Code and Data Using the CW GCC Linke... | NXP Community
https://community.nxp.com/docs/DOC-101433

With Codewarrior 10.7, code built with no error, .map file looks also OK, but problem happened when we begin to debug the code on a FRDM-KEAZ128 board with OpenSDA, here are error messages:

INF: CMD>VC
INF: Verifying object file CRC-16 to device ranges ...
INF: block 00000000-000000BF ...
INF: Ok.
INF: block 00000400-0000B8FF ...
INF: Ok.
INF: block 0000B880-0000B897 ...
INF: CRC-16 Error in block. (File = $9AC8, Device = $0000)
ERR: Error verifying flash of device
ERR: Error occured during Flash programming.
INF: Warning 17927. Target MCU mismatch. Download performance limited. See http://www.pemicro.com/opensda/pe_tools.cfm for information on debugging external processors.
GDI: => DI_ERR_FATAL
GDI: Memory access performed successfully

We guess this should be caused by the re-locating, but have no idea how to deal with. 

Anyone can help?

1 解答
2,162 次查看
Alice_Yang
NXP TechSupport
NXP TechSupport

Hello Wang,

I haven't the FRDM-KEAZ128 board, I test your project on TRK-KEA128 board,

when use the P&E debug mode , the same error with yours.

While when I change the Opensda to J-link interface, it can work well.

So could you please update your board to J-link , refer to   Quick Start of your board.

BR

Alice

在原帖中查看解决方案

6 回复数
2,162 次查看
stanish
NXP Employee
NXP Employee

Hello,

I reproduced the issue and it's indeed a defect.

I'd recommend you to use Flash Programmer instead and then connect to the device or use J-link Firmware as suggested by Alice as a workaround:

1) create a target task that programs the elf file to the device and save it to the project directory:

pastedImage_6.png

2) adjust the debug configuration so it does not use the default download but executes the target task instead:

pastedImage_7.png

3) apply and now if you press "Debug" you should always be able to program the mcu.

Hope it helps.

Stan

2,162 次查看
walter_wang
Contributor III

Dear Stan,

We've tried your proposal and it works well. Probably we prefer OpenSDA because we have no license available for J-Link Flasher.

Thanks a lot.

Walter

0 项奖励
回复
2,162 次查看
Alice_Yang
NXP TechSupport
NXP TechSupport

Hello Wang,

Please share your project , it will be better to point the code about relocating code into RAM.

BR

Alice

0 项奖励
回复
2,162 次查看
walter_wang
Contributor III

Hi Alice,

I've created a very simple project to test the ram function but still failed, see attached. It was created by CW10.7.

Changes are made according to the article https://community.nxp.com/docs/DOC-101433

(Due to company policy I cannot send you our project, sorry for this.)

Also, I just paste codes here for easy discussion, it's very simple.

********* my code *******************************************

word Value;
void RAM_Func(word * val);

/*lint -save -e970 Disable MISRA rule (6.3) checking. */
int main(void)
/*lint -restore Enable MISRA rule (6.3) checking. */
{
/* Write your local variable definition here */

/*** Processor Expert internal initialization. DON'T REMOVE THIS CODE!!! ***/
PE_low_level_init();
/*** End of Processor Expert internal initialization. ***/

/* Write your code here */
/* For example: for(;;) { } */

Value=0;
for(;;){

RAM_Func(&Value);

}

/*** Don't write any code pass this line, or it will be deleted during code generation. ***/
/*** RTOS startup code. Macro PEX_RTOS_START is defined by the RTOS component. DON'T MODIFY THIS CODE!!! ***/
#ifdef PEX_RTOS_START
PEX_RTOS_START(); /* Startup of the selected RTOS. Macro is defined by the RTOS component. */
#endif
/*** End of RTOS startup code. ***/
/*** Processor Expert end of main routine. DON'T MODIFY THIS CODE!!! ***/
for(;;){}
/*** Processor Expert end of main routine. DON'T WRITE CODE BELOW!!! ***/
} /*** End of main routine. DO NOT MODIFY THIS TEXT!!! ***/

/* END main */

__attribute__ ((section(".ramfunc"))) void RAM_Func(word * val)   //The RAM function
{
(* val)++;
return;
}

********* Changes in linker setting file ProcessorExpert.ld *******************************************

/* Initialized data sections goes into RAM, load LMA copy after code */
.data : AT(___ROM_AT)
{
. = ALIGN(4);
_sdata = .; /* create a global symbol at data start */
*(.data) /* .data sections */
*(.data*) /* .data* sections */
*(.ramfunc)       /* My newly defined RAM function area */

. = ALIGN(4);

_edata = .; /* define a global symbol at data end */
} > m_data

Thanks.

0 项奖励
回复
2,163 次查看
Alice_Yang
NXP TechSupport
NXP TechSupport

Hello Wang,

I haven't the FRDM-KEAZ128 board, I test your project on TRK-KEA128 board,

when use the P&E debug mode , the same error with yours.

While when I change the Opensda to J-link interface, it can work well.

So could you please update your board to J-link , refer to   Quick Start of your board.

BR

Alice

2,162 次查看
walter_wang
Contributor III

Hi Alice,

The RAM function is running properly after I updated my FRDM board FW to J-link FW (downloaded from Segger) and change debug profile to JLink.

Thank you for the feedback.

0 项奖励
回复