Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

Scatter Loading Description files
http://mcu-bg.com/mcu_site/viewtopic.php?f=7&t=11748
Страница 1 от 1

Автор:  scout_3pm [ Съб Сеп 21, 2013 7:52 pm ]
Заглавие:  Scatter Loading Description files

Здравейте,

Проблема ми не е сложен, но е малко дълъг за обяснение, затова Ви моля за търпение, докато четете нататък.

Имам evaluation board с LPC4357 и на SPIFI интерфейса QUAD SPI Flash.
Ако искам да пиша на вътрешният флаш на контролера - ОК.
Ако искам да пиша на външния флаш и от него да бутва - ОК.
Но ми се налага да бутне от вътрешния флаш да изпълни процедура за реинициализация на SPIFI (настройка на скоростта на шината) и да продължи от SPIFI. Това е така, защото ако пуснеш директно да зарежда от SPIFI установява скоростта на 32Мхз, а не на максимума (в моят случай 102Мхз). Официално намерих само един пример как да се установи скоростта на SPIFI и това е чрез затворена библиотека от NXP, която се Import-ва в проекта и се вика функцията за инициализация. Но това трябва да стане от вътрешната памет. Иначе на мен ми се искаше да зареди от SPIFI, да си укажа само новата скорост на шината и да продължи, но уви.

Затова се налага използването на SCT файл за линкера. Имам примерен проект с такава постановка, но нещо не се справям да пригодя SCT файла за моите нужди.

Прилагам sct файла от примерният проект. Аз замених само имената на Object файлловете, но при зареждане от KEIL MDK-ARM средата на моят проекта и стартирането му не получавам никаква реакция от микроконтролера.

Молбата ми е за малко насоки кой ред от файла какво значи - чета ръководството RealView® Compilation Tools Version 3.0 Linker and Utilities Guide, но като за начало нещата не ми се виждат много ясни.

Код:
Default SCT file
; *************************************************************
; *** Scatter-Loading Description File generated by uVision ***
; *************************************************************

LR_IROM1 0x14000000 0x00100000  {    ; load region size_region
  ER_IROM1 0x14000000 0x00100000  {  ; load address = execution address
   *.o (RESET, +First)
   *(InRoot$$Sections)
   .ANY (+RO)
  }
  RW_IRAM1 0x10080000 0x0000A000  {  ; RW data
   .ANY (+RW +ZI)
  }
  RW_IRAM2 0x10000000 0x00018000  {
    lpc43xx_gpio.o (+RO +ZI +RW)
    lpc43xx_scu.o (+RO +ZI +RW)
    lpc43xx_cgu.o (+RO +ZI +RW)
    lpc43xx_emc.o (+RO +ZI +RW)
    Hitex_Fast_Startup.o (+RO +ZI +RW)
    spifi_rom_api.o (+RO +ZI +RW)
   amic.o (+RO +ZI +RW)
   atmel.o (+RO +ZI +RW)
   chi.o (+RO +ZI +RW)
   eon.o (+RO +ZI +RW)
   esmt.o (+RO +ZI +RW)
   giga.o (+RO +ZI +RW)
   macronix.o (+RO +ZI +RW)
   numonyx.o (+RO +ZI +RW)
   spansion.o (+RO +ZI +RW)
   sst.o (+RO +ZI +RW)
   winbond.o (+RO +ZI +RW)
   .ANY (+RW +ZI)
  }
}


Както казах само съм сменил имената на Object файловете в моят вариант, но мисля се налага да преизчисля и указаните размери от памет, която да се ползва.

Благодаря за отделеното време

едит: в момента разглеждам map файла генериран за моят проект, ето информативната част:
Код:
Memory Map of the image

  Image Entry point : 0x14000115

  Load Region LR_IROM1 (Base: 0x14000000, Size: 0x000c1698, Max: 0x00100000, ABSOLUTE)

    Execution Region RW_IRAM2 (Base: 0x10000000, Size: 0x00002860, Max: 0x00018000, ABSOLUTE)

    Base Addr    Size         Type   Attr      Idx    E Section Name        Object

    0x10000000   0x00000020   Code   RO            4    .text               startup_lpc43xx.o
    0x10000020   0x0000003c   Code   RO           11    .text               system_lpc43xx.o
    0x1000005c   0x000000b8   Code   RO           57    .text               lpc43xx_gpio.o
    0x10000114   0x00000024   Code   RO           86    .text               lpc43xx_scu.o
    0x10000138   0x00000a24   Code   RO          105    .text               lpc43xx_cgu.o
    0x10000b5c   0x00000334   Code   RO          128    .text               lpc43xx_lcd.o
    0x10000e90   0x00000570   Code   RO          150    .text               is42s16400d.o
    0x10001400   0x00000378   Code   RO          169    .text               lpc43xx_timer.o
    0x10001778   0x00000380   Code   RO          200    .text               main.o
    0x10001af8   0x0000000a   Ven    RO          268    Veneer$$Code        anon$$obj.o
    0x10001b02   0x000004de   Data   RO          106    .constdata          lpc43xx_cgu.o
    0x10001fe0   0x00000020   Data   RO          202    .constdata          main.o
    0x10002000   0x00000004   Data   RW           12    .data               system_lpc43xx.o
    0x10002004   0x00000044   Data   RW          107    .data               lpc43xx_cgu.o
    0x10002048   0x00000001   Data   RW          129    .data               lpc43xx_lcd.o
    0x10002049   0x00000003   PAD
    0x1000204c   0x00000010   Data   RW          203    .data               main.o
    0x1000205c   0x00000004   PAD
    0x10002060   0x00000800   Zero   RW            1    STACK               startup_lpc43xx.o


    Execution Region RW_IRAM1 (Base: 0x10080000, Size: 0x00000000, Max: 0x0000a000, ABSOLUTE)

    **** No section assigned to this execution region ****


    Execution Region ER_IROM1 (Base: 0x14000000, Size: 0x000bf63c, Max: 0x00100000, ABSOLUTE)

    Base Addr    Size         Type   Attr      Idx    E Section Name        Object

    0x14000000   0x00000114   Data   RO            3    RESET               startup_lpc43xx.o
    0x14000114   0x00000000   Code   RO          235  * .ARM.Collect$$$$00000000  mc_w.l(entry.o)
    0x14000114   0x00000004   Code   RO          240    .ARM.Collect$$$$00000001  mc_w.l(entry2.o)
    0x14000118   0x00000004   Code   RO          243    .ARM.Collect$$$$00000004  mc_w.l(entry5.o)
    0x1400011c   0x00000000   Code   RO          245    .ARM.Collect$$$$00000008  mc_w.l(entry7b.o)
    0x1400011c   0x00000000   Code   RO          247    .ARM.Collect$$$$0000000A  mc_w.l(entry8b.o)
    0x1400011c   0x00000008   Code   RO          248    .ARM.Collect$$$$0000000B  mc_w.l(entry9a.o)
    0x14000124   0x00000000   Code   RO          250    .ARM.Collect$$$$0000000D  mc_w.l(entry10a.o)
    0x14000124   0x00000000   Code   RO          252    .ARM.Collect$$$$0000000F  mc_w.l(entry11a.o)
    0x14000124   0x00000004   Code   RO          241    .ARM.Collect$$$$00002712  mc_w.l(entry2.o)
    0x14000128   0x00000062   Code   RO          238    .text               mc_w.l(uldiv.o)
    0x1400018a   0x0000001e   Code   RO          254    .text               mc_w.l(llshl.o)
    0x140001a8   0x00000020   Code   RO          256    .text               mc_w.l(llushr.o)
    0x140001c8   0x00000024   Code   RO          258    .text               mc_w.l(init.o)
    0x140001ec   0x0000000e   Code   RO          262    i.__scatterload_copy  mc_w.l(handlers.o)
    0x140001fa   0x00000002   Code   RO          263    i.__scatterload_null  mc_w.l(handlers.o)
    0x140001fc   0x0000000e   Code   RO          264    i.__scatterload_zeroinit  mc_w.l(handlers.o)
    0x1400020a   0x0005fa00   Data   RO          185    .constdata          image1.o
    0x1405fc0a   0x0005fa00   Data   RO          192    .constdata          image2.o
    0x140bf60a   0x00000002   PAD
    0x140bf60c   0x00000030   Data   RO          260    Region$$Table       anon$$obj.o


==============================================================================

Автор:  scout_3pm [ Съб Сеп 21, 2013 10:07 pm ]
Заглавие:  Re: Scatter Loading Description files

Със следният SCT файл и изнасяйки процедурата за реинициализация в отделен c / obj файл указан да е във вътрешната памет се получи желаният ефект, но изникнаха други проблеми в установката, с който се боря в момента.

И реално ситуацията е , че boot-ва от SPIFI изпълнява програмата , стига до частта за реинициализация , която изпълнява от вътрешната флаш и после продължава от SPIFI. Така де - ако правилно съм разчел генерираният map файл :-)

Код:
; *************************************************************
; *** Scatter-Loading Description File generated by uVision ***
; *************************************************************

LR_IROM1 0x14000000 0x00100000  {    ; load region size_region
  ER_IROM1 0x14000000 0x00100000  {  ; load address = execution address
   *.o (RESET, +First)
   *(InRoot$$Sections)
   .ANY (+RO)
  }
  RW_IRAM1 0x10080000 0x0000A000  {  ; RW data
   .ANY (+RW +ZI)
  }
  RW_IRAM2 0x10000000 0x00018000  {
    lpc43xx_gpio.o (+RO +ZI +RW)
    lpc43xx_scu.o (+RO +ZI +RW)
    lpc43xx_cgu.o (+RO +ZI +RW)
   lpc43xx_lcd.o (+RO +ZI +RW)
    lpc43xx_timer.o (+RO +ZI +RW)
   spifi.o (+RO +ZI +RW)
;   main.o (+RO +ZI +RW)
;   startup_lpc43xx.o (+RO +ZI +RW)
;   system_lpc43xx.o (+RO +ZI +RW)
;   is42s16400d.o (+RO +ZI +RW)
   spifi_rom_api.o (+RO +ZI +RW)
   amic.o (+RO +ZI +RW)
   atmel.o (+RO +ZI +RW)
   chi.o (+RO +ZI +RW)
   eon.o (+RO +ZI +RW)
   esmt.o (+RO +ZI +RW)
   giga.o (+RO +ZI +RW)
   macronix.o (+RO +ZI +RW)
   numonyx.o (+RO +ZI +RW)
   spansion.o (+RO +ZI +RW)
   sst.o (+RO +ZI +RW)
   winbond.o (+RO +ZI +RW)
;   neo_details.o (+RO +ZI +RW)
   falcon_details.o (+RO +ZI +RW)
   .ANY (+RW +ZI)
  }
}

Автор:  MYXATA [ Нед Сеп 29, 2013 7:13 pm ]
Заглавие:  Re: Scatter Loading Description files

Имах подобни проблеми с лпц-тата.
Аз работя с LPC1820
оптитай SPIFI boot да е от
0х80000000
а не от
0х14000000

Страница 1 от 1 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/