KEA128 Flash Erase and write problems

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

KEA128 Flash Erase and write problems

1,079 次查看
east_sun
Contributor I

Hello, I am using TRK - KEA128 board debugging Flash, debug mode can run normally, but in normal mode, the Flash will not erase and write properly, the program runs in a Flash, whether need before erasing and writing the code loaded into RAM?If so, what should I do?

标签 (1)
0 项奖励
4 回复数

645 次查看
miduo
NXP Employee
NXP Employee

Hi,

Yes,when executes Flash programming we need copy Flash programming routine from Flash to RAM then execute it from RAM. The reason is that when writing MCU Flash, program is also reading instruction from same Flash, but Flash can’t perform reading and writing parallel. So executing the flash programming routine from RAM can avoid Flash read/write conflict.

0 项奖励

645 次查看
east_sun
Contributor I

Thank you. About this point, I would like to ask, how should the copy program execute to RAM and jump to RAM?

0 项奖励

645 次查看
mjbcswitzerland
Specialist V

Hi

If you download the free uTasker open source project from GitHub you will have all code.

Here is a snippet to show you how a thumb 2 call can be created in SRAM to execute a routine (here fnFlashRotine())

static void (*fnRAM_code)(void) = 0;

        #define PROG_WORD_SIZE 30                                        // adequate space for the small program
        int i = 0;
        unsigned char *ptrThumb2 = (unsigned char *)fnFlashRoutine;
        static unsigned short usProgSpace[PROG_WORD_SIZE] = {0};         // make space for the routine in static memory (this will have an even boundary)

        ptrThumb2 =  (unsigned char *)(((CAST_POINTER_ARITHMETIC)ptrThumb2) & ~0x1); // thumb 2 address
        while (i < PROG_WORD_SIZE) {                                     // copy program to SRAM
            usProgSpace[i++] = *(unsigned short *)ptrThumb2;
            ptrThumb2 += sizeof (unsigned short);
        }
        ptrThumb2 = (unsigned char *)usProgSpace;
        ptrThumb2++;                                                     // create a thumb 2 call
        fnRAM_code = (void(*)(void))(ptrThumb2);

and then can be executed with

    fnRAM_code();         // execute the command in SRAM

Regards

Mark

644 次查看
mjbcswitzerland
Specialist V

Hi

You need to execute Flash routines from SRAM.
If you have difficulties just use the uTasker open source project (including TRK-KEA128 support) since it solves all such complications.

Regards

Mark

Kinetis: http://www.utasker.com/kinetis.html
Kinetis KEA128:
- http://www.utasker.com/kinetis/TRK-KEA128.html
- http://www.utasker.com/kinetis/FRDM-KEAZ128Q80.html

0 项奖励