Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: boot LPC2478 STK from external flash
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
andybeg
была сабжевая отладочная платка, на её основе делаем свою, возникает вопрос возможно ли будет грузить uclinux с внешних банок памяти? c тех что сидят на чипселектах CS0 CS1 CS2 CS3, есть ли каконьть ман по подобному, понимаю это надо с u-boot повозиться
Совсем старый Бабай
А почему нельзя?
Ведь сначала у вас грузиться U-Boot. А он может грузить откуда удобно, только пропишите в нем это и все
andybeg
Цитата(Совсем старый Бабай @ May 25 2010, 15:59) *
А почему нельзя?
Ведь сначала у вас грузиться U-Boot. А он может грузить откуда удобно, только пропишите в нем это и все

вот я тоже так подумал, осталось понять где в u-boot-е прописывается адрес загрузки и как собствено говоря втиснуть линукс в ту память, есть опыт подобного? копание сырца убута пока ни к чему не привела sad.gif
Совсем старый Бабай
Надо смотреть исходники загрузчика
Посмотрю отпишусь
andybeg
мысли вслух ... в файле cmd_boot.c олимексовского сырца бутлодера имеем функцию int do_go которая похоже какраз отправляет программу на выполнение, адрес отсылки 0xA0008000, при том что SDRAM_BASE_ADDR 0xA0000000
, ещё это всё завязано на MEM_MAP, копаем дальше
andybeg
вручную по ману, загружая обрз с флешки научился стартовать линукс
lpc-2478-stk# usb start
lpc-2478-stk# fatload usb 0 0xa0800000 romfs_5.img
lpc-2478-stk# fatload usb 0 0xa0008000 vmlinux.bin
lpc-2478-stk# go a0008000
а вот как залить его во внешние банки памяти(CS0 CS1 CS2 CS3) ...
и ещё - почему то у меня при компиляции образ vmlinux.bin получается порядка 2.5 Гб, что то мне подскзывает что это аномльно и не влезет в чип sad.gif
Совсем старый Бабай
Для начала неплохо бы убедиться что в загрузчике прописана поддержка NAND, NOR, ММС. Сделать это мона так? если ничего не путаю

flinfo

Зактем грузите в SDRAM образ ядра а затем записываете его , то же самое проделывете с rootfs
да еще в зависимости от того откуда будете грузиться NOR или NAND - следует изменить bootargs
Для NOR:
Код

bootargs=root=/dev/mtdblock3 console=ttyS0, 115200N8
saveenv

Для NAND:
Код
bootargs=root=/dev/mtdblock1 console=ttyS0, 115200N8
saveenv

Гручить ядро и ФС лучше через TFTP
Код

tftpboot <load address> <boot filename>
   load address - можно для примера 0хА1500000
   boot filename - тут понятно, ядро или ФС

Сохрать образ из RAM во флеш
Код
nand erase
tftpboot a1500000 uClinux.bin
nand write $(fileaddr) 0 0x00300000
tftpboot a1800000 romfs.img
nand write  $(fileaddr) 0x00300000 $(filesize)
andybeg
спасибо, информативно
грузится планируется из NOR , пр загрузку образов через tftp была мысль, но в конечной железяке не планировалось присутствие ethernet ибо нет необходимости, но таки думаю уже, что контакты для заливки образов возможно стоит оставить.
команда flinfo выдала следующее честно говоря мало для меня понятное

lpc-2478-stk # flinfo

Bank # 1: Philips: Size: 500 KB in 27 Sectors
Sector Start Addresses:
00000000 RO 00001000 RO 00002000 RO 00003000 RO 00004000 RO
00005000 RO 00006000 RO 00007000 RO 00008000 RO 00010000 RO
00018000 RO 00020000 RO 00028000 RO 00030000 E 00038000 E
00040000 E 00048000 E 00050000 E 00058000 E 00060000 E
00068000 E 00070000 E 00078000 E 00079000 E 0007A000 E
0007B000 E 0007C000 RO E
можно ли из этого сделать вывод иниацилизирована или нет NOR ... есть подозрение что ничего об этом не скзано, вероятно надо прописать этот момент в u-boot, вопрос как sad.gif
Совсем старый Бабай
А почему не FLASH?
Насколько я помню, когда работал с данной платой поддержка NOR была несколько корявой, хотя могу и ошибаться -давно это былоНажмите для просмотра прикрепленного файлаНажмите для просмотра прикрепленного файла
andybeg
Цитата
А почему не FLASH?

есть подозрение что флеша не хватит для линуха и софта на нём
Цитата
Насколько я помню, когда работал с данной платой поддержка NOR была несколько корявой, хотя могу и ошибаться -давно это было

можно небольшое пояснение сделать по поводу 3х прикреплённый файлов, в частности почему 3 smile.gif
Совсем старый Бабай
Три файла патчи для u-boot.
Почему три? Потому что столько их на сайте изготовителя платы.
Вообще для ядра и ФС достаточно 8мегабайт.
Так что NAND хватит с головой. Или приведите свои расчеты, а не подозрения
andybeg
Цитата
Три файла патчи для u-boot.

сейчас попробую

Цитата
Вообще для ядра и ФС достаточно 8мегабайт.
Так что NAND хватит с головой. Или приведите свои расчеты, а не подозрения

честно говоря решение по архитектуре устройства и количестве памяти принималось без меня и подзреваю разработчик платы хотел чтобы какраз нанда хватило с головой, когда устройство будет готово и напичкано полностью, будет понятно сколько рельно памяти надо было smile.gif
andybeg
может чего не так сделал, команд у убута появилось визуально больше, но нора походе так и нет, или я чего не понял

Код
U-Boot 1.3.2 (May 27 2010 - 11:31:22)

CPU:   LPC2478 (ARM7tdmi-s from NXP)
       running at 57.6 MHz (12 MHz crystal)
DRAM:  64 MB
Flash: 500 kB

Код
lpc-2478-stk # flinfo

Bank # 1: Philips:   Size: 500 KB in 27 Sectors
  Sector Start Addresses:
    00000000 RO   00001000 RO   00002000 RO   00003000 RO   00004000 RO
    00005000 RO   00006000 RO   00007000 RO   00008000 RO   00010000 RO
    00018000 RO   00020000 RO   00028000      00030000    E 00038000    E
    00040000    E 00048000    E 00050000    E 00058000    E 00060000    E
    00068000    E 00070000    E 00078000    E 00079000    E 0007A000    E
    0007B000    E 0007C000 RO E
Совсем старый Бабай
Отвечу завтра
andybeg
почитал Тревора Мартина и по нему получается что надо инициализировать регистры банков памяти BCFG и EMC уже сам походу разберётся по какому адресу писать данные когда идёт обращение на адреса 0x80000000 ...
andybeg
в lowlevel_init.c была найдена закомментированная функция, но её раскоментирование и вставка в инициалзацию схемы не решило проблемы sad.gif запись в NOR не производится

Код
/******************************************************************************

** Function name:        ConfigureEMC

**

** Descriptions:        Configure EMC for external SDRAM, NAND and NOR FLASH

** parameters:            None

** Returned value:    None

**

******************************************************************************/

void

ConfigureEMC(void)

{

    volatile unsigned int i, dummy = dummy;



//  SCS     &= ~0x00000002;

//  SCS     |= 0x00000002;

  EMC_CTRL = 0x00000001;

    PCONP   |= 0x00000800;        /* Turn on EMC PCLK */

  PINSEL4  = 0x50000000;

#ifdef USE_32_BIT_DATABUS

  PINSEL5  = 0x55010115;

  PINSEL7  = 0x55555555;

#else

  PINSEL5  = 0x05050555;

#endif

  PINSEL6  = 0x55555555;

  PINSEL8  = 0x55555555;

  PINSEL9  = 0x50555555;



  //all registers...

#ifdef USE_32_BIT_DATABUS

  EMC_DYN_RP     = 1;   //>20ns = 2 clk

  EMC_DYN_RAS    = 3;   //>45ns = 3 clk

  EMC_DYN_SREX   = 5;   //>80-100ns = 6 clk

  EMC_DYN_APR    = 1;   //

  EMC_DYN_DAL    = 5;   //2 clk

  EMC_DYN_WR     = 1;   //2 clk

  EMC_DYN_RC     = 5;   //>65ns = 4 clk

  EMC_DYN_RFC    = 5;   //>80-100ns = 6 clk

  EMC_DYN_XSR    = 5;   //>80-100ns = 6 clk

  EMC_DYN_RRD    = 1;   //>15ns = 1-2 clk

  EMC_DYN_MRD    = 1;   //2 clk

  EMC_DYN_RD_CFG = 1;   //or 1,2,3

    

  //

  EMC_DYN_RASCAS0 = 0x00000202;



  //

  EMC_DYN_CFG0 = 0x00005480;

#else

  EMC_DYN_RP     = 2;   //>20ns = 2 clk

  EMC_DYN_RAS    = 3;   //>45ns = 3 clk

  EMC_DYN_SREX   = 7;   //>80-100ns = 6 clk

  EMC_DYN_APR    = 2;   //

  EMC_DYN_DAL    = 5;   //2 clk

  EMC_DYN_WR     = 1;   //2 clk

  EMC_DYN_RC     = 5;   //>65ns = 4 clk

  EMC_DYN_RFC    = 5;   //>80-100ns = 6 clk

  EMC_DYN_XSR    = 7;   //>80-100ns = 6 clk

  EMC_DYN_RRD    = 1;   //>15ns = 1-2 clk

  EMC_DYN_MRD    = 2;   //2 clk

  EMC_DYN_RD_CFG = 1;   //or 1,2,3

    

  //

  EMC_DYN_RASCAS0 = 0x00000303;

    

  //

  EMC_DYN_CFG0 = 0x00000680;

#endif

    

  //wait 100mS

  delayMs(100);



  //Send command: NOP

  EMC_DYN_CTRL = 0x00000183;

    

  //wait 200mS

  delayMs(200);

    

  //Send command: PRECHARGE-ALL, shortest possible refresh period

  EMC_DYN_CTRL = 0x00000103;

  EMC_DYN_RFSH = 0x00000002;

    

  //wait 128 ABH clock cycles

  for(i=0; i<0x40; i++)

    asm volatile(" nop");

    

  //Set correct refresh period

  EMC_DYN_RFSH = 28;

    

  //Send command: MODE

  EMC_DYN_CTRL = 0x00000083;

    

  //Set mode register in SDRAM

#ifdef USE_32_BIT_DATABUS

  dummy = *((volatile unsigned int*)(SDRAM_BASE_ADDR | (0x22 << 11)));

#else

  dummy = *((volatile unsigned int*)(SDRAM_BASE_ADDR | (0x33 << 12)));

#endif



  //Send command: NORMAL

  EMC_DYN_CTRL = 0x00000000;



  //Enable buffer

  EMC_DYN_CFG0 |= 0x00080000;



  //initial system delay

  delayMs(1);



  EMC_STA_WAITWEN0  = 0x2;

  EMC_STA_WAITOEN0  = 0x2;

  EMC_STA_WAITRD0   = 0x1f;

  EMC_STA_WAITPAGE0 = 0x1f;

  EMC_STA_WAITWR0   = 0x1f;

  EMC_STA_WAITTURN0 = 0xf;

  EMC_STA_CFG0      = 0x00000081;



  EMC_STA_WAITWEN1  = 0x2;

  EMC_STA_WAITOEN1  = 0x2;

  EMC_STA_WAITRD1   = 0x8;

  EMC_STA_WAITPAGE1 = 0x1f;

  EMC_STA_WAITWR1   = 0x8;

  EMC_STA_WAITTURN1 = 0xf;

  EMC_STA_CFG1      = 0x00000080;



}


Код
lpc-2478-stk # fatload usb 0 0x80800000 romfs_5.img
reading romfs_5.img
........................................................

581632 bytes read
lpc-2478-stk # md 0x80800000
80800000: ffffffff ffffffff ffffffff ffffffff    ................
80800010: ffffffff ffffffff ffffffff ffffffff    ................
80800020: ffffffff ffffffff ffffffff ffffffff    ................
80800030: ffffffff ffffffff ffffffff ffffffff    ................
80800040: ffffffff ffffffff ffffffff ffffffff    ................
80800050: ffffffff ffffffff ffffffff ffffffff    ................
80800060: ffffffff ffffffff ffffffff ffffffff    ................
80800070: ffffffff ffffffff ffffffff ffffffff    ................
80800080: ffffffff ffffffff ffffffff ffffffff    ................
80800090: ffffffff ffffffff ffffffff ffffffff    ................
808000a0: ffffffff ffffffff ffffffff ffffffff    ................
808000b0: ffffffff ffffffff ffffffff ffffffff    ................
808000c0: ffffffff ffffffff ffffffff ffffffff    ................
808000d0: ffffffff ffffffff ffffffff ffffffff    ................
808000e0: ffffffff ffffffff ffffffff ffffffff    ................
808000f0: ffffffff ffffffff ffffffff ffffffff    ................
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.