How to set data flash memory in link file

キャンセル
次の結果を表示 
表示  限定  | 次の代わりに検索 
もしかして: 

How to set data flash memory in link file

3,914件の閲覧回数
xuelang_ee
Contributor I

Hi, I am developing a software with MPC5744, and I meet a problem. I want partition flash space, and I use 57xx_flash.ld(a link file's name) to set data section. Data can write to flash block when system initialization except Data flash memory. I want set a cal_data section in Data flash memory, and data write into those block when the ship download the software, but I failed.

 57xx_flash.ld 

/* Entry Point */
ENTRY(_start)

/* define heap and stack size */
__HEAP_SIZE = 0 ;
__STACK_SIZE = 4096 ;

SRAM_SIZE = 384K;
/* Define SRAM Base Address */
SRAM_BASE_ADDR = 0x40000000;

/* Define CPU0 Local Data SRAM Allocation */
LOCALDMEM_SIZE = 64K;
/* Define CPU0 Local Data SRAM Base Address */
LOCALDMEM_BASE_ADDR = 0x50800000;

MEMORY
{

flash_rchw : org = 0x00FA0000, len = 0x4
cpu0_reset_vec : org = 0x00FA0004, len = 0x4

m_text_test : org = 0x00810000, len = 1K

m_text : org = 0x01000000, len = 64K
m_data : org = 0x40000000, len = 384K

local_dmem : org = 0x50800000, len = 64K
}


SECTIONS
{
.cal_test : ALIGN(512)
{
KEEP(*(.cal_test))
} > m_text_test

.rchw :
{
KEEP(*(.rchw))
} > flash_rchw

.cpu0_reset_vector :
{
KEEP(*(.cpu0_reset_vector))
} > cpu0_reset_vec

.startup : ALIGN(0x400)
{
__start = . ;
*(.startup)
} > m_text


.core_exceptions_table : ALIGN(4096)
{
__IVPR_VALUE = . ;
KEEP(*(.core_exceptions_table))
} > m_text

.intc_vector_table : ALIGN(4096)
{
KEEP(*(.intc_vector_table))
} > m_text

.text :
{
*(.text.startup)
*(.text)
*(.text.*)
KEEP (*(.init))
KEEP (*(.fini))
. = ALIGN(16);
} > m_text

.ctors :
{
__CTOR_LIST__ = .;
/* gcc uses crtbegin.o to find the start of
the constructors, so we make sure it is
first. Because this is a wildcard, it
doesn't matter if the user does not
actually link against crtbegin.o; the
linker won't look for a file to match a
wildcard. The wildcard also means that it
doesn't matter which directory crtbegin.o
is in. */
KEEP (*crtbegin.o(.ctors))
KEEP (*crtbegin?.o(.ctors))
/* We don't want to include the .ctor section from
from the crtend.o file until after the sorted ctors.
The .ctor section from the crtend file contains the
end of ctors marker and it must be last */
KEEP (*(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors))
KEEP (*(SORT(.ctors.*)))
KEEP (*(.ctors))
__CTOR_END__ = .;
} > m_text

.dtors :
{
__DTOR_LIST__ = .;
KEEP (*crtbegin.o(.dtors))
KEEP (*crtbegin?.o(.dtors))
KEEP (*(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors))
KEEP (*(SORT(.dtors.*)))
KEEP (*(.dtors))
__DTOR_END__ = .;
} > m_text

.preinit_array :
{
PROVIDE_HIDDEN (__preinit_array_start = .);
KEEP (*(.preinit_array*))
PROVIDE_HIDDEN (__preinit_array_end = .);
} > m_text

.init_array :
{
PROVIDE_HIDDEN (__init_array_start = .);
KEEP (*(SORT(.init_array.*)))
KEEP (*(.init_array*))
PROVIDE_HIDDEN (__init_array_end = .);
} > m_text

.fini_array :
{
PROVIDE_HIDDEN (__fini_array_start = .);
KEEP (*(SORT(.fini_array.*)))
KEEP (*(.fini_array*))
PROVIDE_HIDDEN (__fini_array_end = .);
} > m_text

.rodata :
{
*(.rodata)
*(.rodata.*)
} > m_text

.eh_frame_hdr : { *(.eh_frame_hdr) } > m_text
.eh_frame : { KEEP (*(.eh_frame)) } > m_text

.data :
{
*(.data)
*(.data.*)
} > m_data AT>m_text

.sdata2 :
{
*(.sdata2)
*(.sdata2.*)
} > m_data AT>m_text

.sbss2 (NOLOAD) :
{
/* _SDA2_BASE_ = .; */
*(.sbss2)
*(.sbss2.*)
} > m_data

.sdata :
{
*(.sdata)
*(.sdata.*)
} > m_data AT>m_text

.bss (NOLOAD) :
{
__BSS_START = .;
*(.sbss)
*(.sbss.*)
*(.bss)
*(.bss.*)
*(COMMON)
__BSS_END = .;
} > m_data

.stack (NOLOAD) : ALIGN(16)
{
__HEAP = . ;
PROVIDE (_end = . );
PROVIDE (end = . );
. += __HEAP_SIZE ;
__HEAP_END = . ;
_stack_end = . ;
. += __STACK_SIZE ;
_stack_addr = . ;
__SP_INIT = . ;
. += 4;
} > local_dmem

/*-------- LABELS USED IN CODE -------------------------------*/

/* Labels for Copying Initialised Data from Flash to RAM */
__DATA_SRAM_ADDR = ADDR(.data);
__SDATA_SRAM_ADDR = ADDR(.sdata);

__DATA_SIZE = SIZEOF(.data);
__SDATA_SIZE = SIZEOF(.sdata);

__DATA_ROM_ADDR = LOADADDR(.data);
__SDATA_ROM_ADDR = LOADADDR(.sdata);

/* Labels Used for Initialising SRAM ECC */
__SRAM_SIZE = SRAM_SIZE;
__SRAM_BASE_ADDR = SRAM_BASE_ADDR;

__LOCAL_DMEM_SIZE = LOCALDMEM_SIZE;
__LOCAL_DMEM_BASE_ADDR = LOCALDMEM_BASE_ADDR;

__BSS_SIZE = __BSS_END - __BSS_START;
}

I set a section in C file

__attribute__ ((section(".cal_test")))
const uint8_t data_p[8] = {0x1A,0x2B,0x3C,0x4D,0x5E,0x6F,0x70};

ラベル(1)
タグ(1)
0 件の賞賛
5 返答(返信)

2,494件の閲覧回数
jiri_kral
NXP Employee
NXP Employee

Hi, 

here is document about DFLASH programming: 
https://community.nxp.com/docs/DOC-334155 

Jiri

0 件の賞賛

2,494件の閲覧回数
xuelang_ee
Contributor I

I met another problem, I set the link file as the document you offerd to me, but I can not program data flash still.

some errors appeared. Enclosure is my code and Algorithm file, can you help me, thank you !

Best wishes to you

Jun Wang

0 件の賞賛

2,492件の閲覧回数
jiri_kral
NXP Employee
NXP Employee

Hi, 

you probably forget add custom flashing algorithm - as mentioned in the doc:

pastedImage_2.png

Here is my result: 
pastedImage_1.png

Modified project is in attachment. 

0 件の賞賛

2,492件の閲覧回数
xuelang_ee
Contributor I

Hi,

I can programe dflash according to the way you told me. Last time I chose a wrong flashing algorithm, thank you!

Best wishes to you

WangJun

02/06/18

0 件の賞賛

2,492件の閲覧回数
xuelang_ee
Contributor I

Thanky you very much! The information you provide is very helpful to me!

Best wishes to you

WangJun

0 件の賞賛