NXP MCU 技术论坛
直播中

王军

8年用户 1858经验值
私信 关注
[问答]

如何在K8x外部QSPI闪存中放置常量数据?

我有一个 K8x,需要将大量常量数据放在外部 (QSPI XiP) 闪存上。我正在使用外部链接描述文件。

以下是相关摘录:
k81_memory.ld


MEMORY
{
  PROGRAM_FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x040000
  EXT_PGM_FLASH (rx) : ORIGIN = 0x04020000, LENGTH = 0x100000
  /*  0x04020000-0x0405FFFF is XiP alias for 0x68020000-0x6805FFFF  */
  SRAM_LOWER   (rwx) : ORIGIN = 0x1fff0000, LENGTH = 0x010000
  SRAM_UPPER   (rwx) : ORIGIN = 0x20000000, LENGTH = 0x030000
  /* First 128K infineon has 4K erase, use for Configs */
  TERM_SETtiNGS (rx) : ORIGIN = 0x68000000, LENGTH = 0x018000 /* 96K */
  MODULE_CONFIG (rx) : ORIGIN = 0x68018000, LENGTH = 0x008000 /* 32K */
  XIP_RESERVED  (rx) : ORIGIN = 0x68020000, LENGTH = 0x100000 /*  1M */
  OTA_UPDATE    (rx) : ORIGIN = 0x68120000, LENGTH = 0x100000 /*  1M */
}


k81.ld


INCLUDE "k81_memory.ld"
STACK_SIZE  = 0x1000;
ENTRY(ResetISR)
SECTIONS
{
  /* EXTERNAL QSPI XiP FLASH */
  .text_Flash2 : ALIGN(4)
  {
    FILL(0xff)
    *(.text_Flash2*)
    *(.text_EXT_PGM_FLASH*)
    *(.text.$Flash2*)
    *(.text.$EXT_PGM_FLASH*)
  } > EXT_PGM_FLASH
   
  .data_Flash2 : ALIGN(4)
  {
    FILL(0xff)
    *(.rodata_Flash2*)
    *(.rodata_EXT_PGM_FLASH*)
    *(.rodata.$Flash2*)
    *(.rodata.$EXT_PGM_FLASH*)
  }> EXT_PGM_FLASH


如果我将代码放在外部闪存中,例如


void __attribute__((section (".text_Flash2"))) delay_ms(uint16_t ms)
{
    volatile uint32_t i = 0U;
    for (i = 0U; i < (10000U*ms); ++i)
    {
        __asm("NOP"); /* delay */
    }
}

...并构建:

...然后函数正确放置在外部闪光灯上。
但是,如果我改为将 const 数据放在外部闪存中


const TsBigBitMap __attribute__((section (".data_Flash2"))) Logo_bmp =
{
  3,     // BitMapType
  512,   // width_pixels
  384,   // height_pixels
  192,   // width_bytes
  73728, // byte_count
  {
// Line 0
0xFF, 0xFF, 0xF0, 0x0A, ... 0xFF, 0xFF 0xFF, 0xFF,
  }
};

..并构建:

...那么它似乎没有放在外部闪光灯中。

我没看到什么?

更多回帖

发帖
×
20
完善资料,
赚取积分