Перейти к содержанию
    

AT91RM9200 - мистика? SPI? или romboot.bin?

авторизуй меня в Icq

Огромное спасибо откликнувшимся на зов о помощи, и особенно уважаемому - Lelick.

с его советами и помощью таки нашел проблемные места и... - запустил!

проблемма крылась в глубинах u-boot и в инициализации тактовой частоты... (везде по чуточку)

пришлось правда с нуля пересобрать u-boot-1.1.1с патчами иналожить свои патчи на езернет lxt972

вот наблюдаю заветное...

[42949372.960000] Linux version 2.6.19 (root@server) (gcc version 3.4.6)

....

[42949375.590000] loop: loaded (max 8 devices)

[42949375.600000] LXT970: Registered new driver

[42949375.610000] LXT971: Registered new driver

[42949375.620000] at91_ether: probe of at91_ether failed with error -1

[42949375.640000] physmap platform flash device: 00200000 at 10000000

[42949375.650000] physmap-flash physmap-flash.0: map_probe failed

[42949375.660000] udc: at91_udc version 3 May 2006

[42949375.670000] mice: PS/2 mouse device common for all mice

[42949375.680000] at91_rtc at91_rtc: rtc intf: sysfs

[42949375.680000] at91_rtc at91_rtc: rtc intf: proc

[42949375.690000] at91_rtc at91_rtc: rtc intf: dev (254:0)

[42949375.690000] at91_rtc at91_rtc: rtc core: registered at91_rtc as rtc0

[42949375.700000] AT91 Real Time Clock driver.

[42949375.710000] i2c /dev entries driver

[42949375.720000] at91_i2c at91_i2c: AT91 i2c bus driver.

[42949375.730000] TCP cubic registered

[42949375.730000] NET: Registered protocol family 1

[42949375.740000] NET: Registered protocol family 17

[42949375.750000] at91_rtc at91_rtc: setting the system clock to 1998-01-01 00:0

1:43 (883612903)

[42949375.770000] No filesystem could mount root, tried: ext2 cramfs

[42949375.770000] Kernel panic - not syncing: VFS: Unable to mount root fs on un

known-block(1,0)

Unable to mount root fs on unknown-block(1,0) - но, это уже второй шаг, создание ФС.

я рад...

 

 

но...

только вот теперь друга проблема, из серии "назад в будущее"....

на моем собранном romboot и моем u-boot-1.1.1 - ядро не стартует, а на loader(от lelick) - стартует

я так понимаю что проблема вновь с инициялизацией скоростей, и видимо опять скоростей работы контроллера(а может и еще чегото иного...)

Подскажите пожалуйста, где в romboot может прятаться это проблемное место?

 

сейчас у меня вот какие значения в romboot

*----------------------------------------*

1: Download Dataflash [addr]

2: Read Dataflash [addr]

3: Start U-BOOT

4: Clear bootloader section in Dataflash

5: __TEST__

*----------------------------------------*

Enter: 5

AT91C_BASE_PMC = FFFFFC00; AT91C_BASE_CKGR = FFFFFC20;

AT91C_PLLA_VALUE = 20273E04; AT91C_PLLA_MCK = 302;

 

может в какойто мере влияет тип памяти или его инициализация?

используется 2 штуки - samsung k4s561632e-tc75, схемное включение - 32-бита...

 

по умолчанию в romboot стояло

void AT91F_InitSdram()

{

....

pRegister = (int *)0xFFFFFF98;

// *pRegister = 0x2188c155;

....

}

пробовал ставить вроде как знячения для моей памяти

*pRegister = 0x2a99C259;

 

без результатно...

 

еще раз благодарство для - Lelick, реально помог...

.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

а можно поделиться loader(от lelick)

 

у меня аналогичная проблема с romboot --- те же грабли, те же симптомы :(

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

B)-->

(This is j.b @ Feb 21 2007, 17:30) <{POST_SNAPBACK}>
а можно поделиться loader(от lelick)

у меня аналогичная проблема с romboot --- те же грабли, те же симптомы :(

 

сказал бы - что радует что не у одного меня такая беда - но радоваться не чему :) ))

я уже думал что это только у меня такая ерунда творится с romboot

 

lelick - только лоадер готовый дал(в общем то и на том ему спасибо), исходник он не дает...

 

кстати делал тест памяти - он полностью проходит

case '5':

printf("...test...\r\n");

 

unsigned int volatile *pSDRAM;

unsigned int wCount;

unsigned int wRead, wWrite;

 

// printf ("CPU %d MHz\n",GetCPUFrequencyMhz() );

// printf ("PCK %d MHz\n",GetPCKFrequencyMhz() );

 

while (1)

{

printf("-T WR- 0x00000000\n");

// pSDRAM = (unsigned int *) BASE_EBI_CS1_ADDRESS;

pSDRAM = (unsigned int *) 0x20000000;

// for ( wCount = 0, wWrite=0x0; wCount < 0x800000; wCount ++ )

for ( wCount = 0, wWrite=0xff; wCount < 0x4000008; wCount ++ )

{

*pSDRAM = wWrite;

wRead = *pSDRAM;

if (wWrite != wRead )

printf ("[0x%08X] = 0x%08X ( 0x%08X,0x%08X)\n",wCount,wRead^wWrite,wRead,wWrite );

pSDRAM++;

}

}

command = 0;

break;

 

тоесть проблема не в памяти по идее а все таки гдето в клоках....

только вот где - не пойму...

аж бошка лопается уже...

и помочь ни кто не может...

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

у меня с romboot тоже были проблемы AT45DB321 не шилась, u-boot не стартовал.... после общения с Дмитрием Черкашиным, за что ему отдельно спасибо, он написал тестовый загрузчик с которым у меня все сразу заработало... см. http://www.ucrouter.ru/download.html тут и исходники есть

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

B)--><div class='quotetop'>(This is j.b @ Feb 21 2007, 17:30) <{POST_SNAPBACK}></div><div class='quotemain'><!--quotec--> а можно поделиться loader(от lelick)

у меня аналогичная проблема с romboot --- те же грабли, те же симптомы :(

 

сказал бы - что радует что не у одного меня такая беда - но радоваться не чему :) ))

я уже думал что это только у меня такая ерунда творится с romboot

 

lelick - только лоадер готовый дал(в общем то и на том ему спасибо), исходник он не дает...

 

кстати делал тест памяти - он полностью проходит

case '5':

printf("...test...\r\n");

 

unsigned int volatile *pSDRAM;

unsigned int wCount;

unsigned int wRead, wWrite;

 

// printf ("CPU %d MHz\n",GetCPUFrequencyMhz() );

// printf ("PCK %d MHz\n",GetPCKFrequencyMhz() );

 

while (1)

{

printf("-T WR- 0x00000000\n");

// pSDRAM = (unsigned int *) BASE_EBI_CS1_ADDRESS;

pSDRAM = (unsigned int *) 0x20000000;

// for ( wCount = 0, wWrite=0x0; wCount < 0x800000; wCount ++ )

for ( wCount = 0, wWrite=0xff; wCount < 0x4000008; wCount ++ )

{

*pSDRAM = wWrite;

wRead = *pSDRAM;

if (wWrite != wRead )

printf ("[0x%08X] = 0x%08X ( 0x%08X,0x%08X)\n",wCount,wRead^wWrite,wRead,wWrite );

pSDRAM++;

}

}

command = 0;

break;

 

тоесть проблема не в памяти по идее а все таки гдето в клоках....

только вот где - не пойму...

аж бошка лопается уже...

и помочь ни кто не может...

 

Думаю, проблема именно в памяти, верней в ее инициализации, я у себя Romboot запустил только после того, как помянял настройки СДРАМ под конкретные микрухи, что у меня впаяны. COMA выложил свой загрузчик, так вот - он у меня даже не пытается чего-то делать, а я не верю, что уважаемый COMA выложил заведомо нерабочие вещи, просто проблема в том, что у всех у нас запаяны разные СДРАМ и ДатаФлешь, вот и получается, что советы одного не подходят другому.

 

У меня ОЗУ-хи k4s641632h-tc75, флешь - at45db321c

romboot

P.S. флешку я также протестил случайными числами.

RomBoot_Rainbow.zip

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Думаю, проблема именно в памяти, верней в ее инициализации, я у себя Romboot запустил только после того, как помянял настройки СДРАМ под конкретные микрухи, что у меня впаяны. COMA выложил свой загрузчик, так вот - он у меня даже не пытается чего-то делать, а я не верю, что уважаемый COMA выложил заведомо нерабочие вещи, просто проблема в том, что у всех у нас запаяны разные СДРАМ и ДатаФлешь, вот и получается, что советы одного не подходят другому.

У меня ОЗУ-хи k4s641632h-tc75, флешь - at45db321c

romboot

P.S. флешку я также протестил случайными числами.

 

угу, вот теперь начитается у меня раздвоение мисли очередной раз...

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

я пытаюсь мыслить следующим образом, из увиденного загрузчита от lelick, а именно....

его загрузчик сконфигурен на иной тип памяти, и иной размер памяти, если я все верно помню с его слов, то у него используется 16М.

у lelick значения

регистр памяти (0xffffff90 (SDRAMC Configuration Register)) - 29912154

клоки (PMC Clock Generator PLL A Register) - 2027BE04

 

и заметьте, при этом - его лоадер у меня запустился, тоесть тип и размер памяти не должен так влиять...

а вот тактовая(настройка клоков) - вероятно больше может повлиять...

на всякий случай - у меня кварц - 18.432

данные из U-Boot-1.1.1

....

/* ARM asynchronous clock */

#define AT91C_MAIN_CLOCK 179712000 /* from 18.432 MHz crystal (18432000 / 4 * 39) */

#ifdef MASTER_CLOCK_45 /* Master clock 45Mhz */

#define AT91C_MASTER_CLOCK 44928000 /* peripheral clock (AT91C_MAIN_CLOCK / 3) */

//#else /* MASTER_CLOCK_45 */

//#ifdef MASTER_CLOCK_60

//#define AT91C_MASTER_CLOCK 59904000 /* peripheral clock (AT91C_MAIN_CLOCK / 3) */

//#else /* MASTER_CLOCK_60 */

//#error Master clock must be defined

//#endif

#endif

....

память у меня используется - K4S561632E-TC/75

и если верить даташиту - это:

16M x 16 166MHz (CL=3)

Organization Row Address Column Address

16Mx16 A0~A12 A0-A8

тоесть

колонок 9

рядов 13

это - если верить даташиту, тоесть в 0xffffff90 (SDRAMC Configuration Register) надо грузить 0x2a99C259, lelick говорит, что если 2 микрухи используется то надо 0x2a99C25A - но с таким значением не грузится

щяс у меня стоят такие значения

регистр памяти (0xffffff90 (SDRAMC Configuration Register)) - 0x2a99C259

клоки (PMC Clock Generator PLL A Register) - 2027BE04

 

а вот что получаетс я при 0x2a99C25A

Enter: press any key to enter bootloader

Load U-BOOT from dataflash[c0008000] to SDRAM[20f00000]

Set PLLA to 180Mhz and Master clock to 60Mhz and start U-BOOT

и зависает

 

кстати, не-не Вы не подумайте что я хочу сказать, что ктото специально делает неверный код, что бы его распространять...

я даже не мыслю в этом направлении...

 

я пытаюсь решить проблему, в частности свою, но оказывается такая беда не у одного меня, и как с ней бороться - "никто не знает"...

 

кстати собрал ваш RomBoot_Rainbow.zip

и что получил, тоже самое...

## Booting image at 20007fc0 ...

Image Name:

Image Type: ARM Linux Kernel Image (uncompressed)

Data Size: 2098432 Bytes = 2 MB

Load Address: 20007fc0

Entry Point: 20008000

Verifying Checksum ... OK

XIP Kernel Image ... OK

 

Starting kernel ...

 

AT91C_CKGR_PLLAR = 2026BE04

AT91C_CKGR_PLLBR = 10483E0E

AT91C_PMC_MCKR = 302

AT91C_CKGR_MCFR = 12328

AT91C_CKGR_MOR = FF01

еще..

вот что известноиз варианта лоадера от lelick, известно что кернел говорит про тактовую при старте..

вот огрызок сркина-терминала

где говорит кернел (о чем я его просил когда фиксил этот участок кода в ядре...) какую тактовую он смог определить...

[42949372.960000] Linux version 2.6.19 (root@server) (gcc version 3.4.6) #14Tue Feb 20 12:46:57 EET 2007

[42949372.960000] CPU: ARM920T [41129200] revision 0 (ARMv4T), cr=###

[42949372.960000] Clocks: PLLA overclocked, 184 MHz

[42949372.960000] Clocks: CPU 184 MHz, master 46 MHz, main 18.432 MHz

[42949372.960000] CPU0: D VIVT write-back cacheage Name:

[42949372.960000] CPU0: I cache: 16384 bytes, associativity 64, 32 byte lines, 8

 

может это и есть то что я ищю?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

щяс у меня стоят такие значения

регистр памяти (0xffffff90 (SDRAMC Configuration Register)) - 0x2a99C259

клоки (PMC Clock Generator PLL A Register) - 2027BE04

более того, нарыл в инете перепиську пиплов... http://lists.arm.linux.org.uk/pipermail/li...ber/024650.html

 

и так пробовал, как они рекомендуют

#define AT91C_PLLA_VALUE 0x2270BE40

тоже бестолку пока, тотже результат получается, не стартует ядро...

 

хотя это(0x2270BE40), в пересчете все те же 0x2027BE04...

 

вот архив с моим ромбутом... http://projects.org.ua/_files_/AT91RM9200_...19_last.tar.bz2

который не может загрузить мой кернел...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

полистал исходники romboot

 

нашел такие вот строки (dataflash.h)

 

#define AT45DB161        0x2c
#define AT45DB321        0x34
#define AT45DB642        0x3c
#define AT45DB128        0x10

 

у нас на плате стоит AT45DB011B

согласно даташиту на AT91RM9200 (стр 87) проц поддерживает эту датафлешку, но она просто не описана в рамбут, из -за этого получается проблема при программировании

 

я правильно мыслю?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

B)-->

(This is j.b @ Feb 22 2007, 15:24) <{POST_SNAPBACK}>
полистал исходники romboot

нашел такие вот строки (dataflash.h)

#define AT45DB161        0x2c
#define AT45DB321        0x34
#define AT45DB642        0x3c
#define AT45DB128        0x10

у нас на плате стоит AT45DB011B

согласно даташиту на AT91RM9200 (стр 87) проц поддерживает эту датафлешку, но она просто не описана в рамбут, из -за этого получается проблема при программировании

я правильно мыслю?

в принципе верно, если пропишеш ее код - опознает ее... только те надо ее код найти..

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

код взял из даташита. (это маскированые биты стаус-регистра)

завтра откомпиляю.. проверим :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

кстати делал тест памяти - он полностью проходит

case '5':

printf("...test...\r\n");

 

unsigned int volatile *pSDRAM;

unsigned int wCount;

unsigned int wRead, wWrite;

 

// printf ("CPU %d MHz\n",GetCPUFrequencyMhz() );

// printf ("PCK %d MHz\n",GetPCKFrequencyMhz() );

 

while (1)

{

printf("-T WR- 0x00000000\n");

// pSDRAM = (unsigned int *) BASE_EBI_CS1_ADDRESS;

pSDRAM = (unsigned int *) 0x20000000;

// for ( wCount = 0, wWrite=0x0; wCount < 0x800000; wCount ++ )

for ( wCount = 0, wWrite=0xff; wCount < 0x4000008; wCount ++ )

{

*pSDRAM = wWrite;

wRead = *pSDRAM;

if (wWrite != wRead )

printf ("[0x%08X] = 0x%08X ( 0x%08X,0x%08X)\n",wCount,wRead^wWrite,wRead,wWrite );

pSDRAM++;

}

}

command = 0;

break;

Если Вы делали именно этот тест памяти, то он обсуждался в разделе отладочной платы Rainbow. И в процессе обсуждения пришли к выводу, что это тест при включенно кэше (а он, вроде,изначально включен) всегда будет проходиться за счет того, что данные будут гоняться только между процом и кэшем. По-идее он будет работать даже при отсутствии памяти, как таковой. :) Необходимо вначале делать полное заполнение, а потом полную проверку. Я выложил свой код, правда там версия с некоторыми ошибками, но он помог мне отловить глюки с памятью.По поводу Ваших МС памяти. У меня стоят такие-же, только окончание C-TC1L, это немного другие скорости. Вечером могу выложить свою инициализацию. Как раз для кварца 18.432. У меня, опять же, работает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

DataFlash:AT45DB011
Nb pages: 000512
Page Size: 000264
Size=00135168 bytes
Logical address: 0xC0000000
*----------------------------------------*
1: Download Dataflash [addr]
2: Read Dataflash [addr]
3: Start U-BOOT
4: Clear bootloader section in Dataflash
*----------------------------------------*
Enter

:

 

зашивать ромбут (как я понял без проблем)

 

Modification of Arm Vector 6 :2112015                             
000122
Write 10240 bytes in DataFlash [0xc0000000].@.....)......                             
Hit a Key!aflash: OK

 

но при попытке залить u-boot ругается... и при сбросе платы пишет следующее:

Set PLLA to 180Mhz and Master clock to 45Mhz and start U-BOOT

 

подскажите куда копать

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

B)-->

(This is j.b @ Feb 28 2007, 09:30) <{POST_SNAPBACK}>

но при попытке залить u-boot ругается... и при сбросе платы пишет следующее:

Set PLLA to 180Mhz and Master clock to 45Mhz and start U-BOOT

подскажите куда копать

ругается? и что пишет конкретно?

дело в том, что само сообщение "Set PLLA to 180Mhz and Master clock to 45Mhz and start U-BOOT" - статическое, и оно ни какий информации не несет за собой(кроме той что написано).

если после этой надписи засыпает - в вашем случае это означает что выполнение кода дальше не идет...

возможно не верно чтото проинициализировано...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

при загрузке u-boot происходит следующее:

 

ATMEL LOADER VER 1.01 Feb 28 2007 09:08:29
*----------------------------------------*
DataFlash:AT45DB011
Nb pages: 000512
Page Size: 000264
Size=00135168 bytes
Logical address: 0xC0000000
*----------------------------------------*
1: Download Dataflash [addr]
2: Read Dataflash [addr]
3: Start U-BOOT
4: Clear bootloader section in Dataflash
*----------------------------------------*
Enter: 1 c0008000
Download Dataflash [0xc0008000]
CCCCCCCCCC
Modification of Arm Vector 6 :21120d3

Write 107520 bytes in DataFlash [0xc0008000]
Hit a Key!aflash: Failed

 

у меня возникла такая мысль -- может не хватает флешки загрузчику (флешка маленькая ведь)

загрузчик весит порядка 100 Кбайт, + ромбут 10 Кбайт

 

надо посмотреть как ромбут пишет флешку.. т.е подряд все или с дырами (разделяя ромбут и ю-бут, раскладывая их в разные страницы)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

B)-->

(This is j.b @ Mar 1 2007, 13:40) <{POST_SNAPBACK}>

при загрузке u-boot происходит следующее:

 

 

Write 107520 bytes in DataFlash [0xc0008000]

Hit a Key!aflash: Failed

 

У меня было абсолютно тоже самое, специально сделал вывод контрольных сумм из флеша и из рамы на терминал... Вобщем, оказалось, что в ромбуте СДРАМ проинициализирована не так, как нужно для моих микросхем памяти, как только поправил - сразу заработало.

Рекомендую посмотреть на пост с тестированием памяти, там, правда, тоже про инициализацию не заикаются, но пока я не сделал, чтобы прошел тест ВСЕЙ рамы случайными числами, ничего не получалось. Потом просто функцию инициализации из теста подставил в ромбут и усе.

//*----------------------------------------------------------------------------
//* \fn    AT91F_InitSDRAM
//* \brief This function performs very low level HW initialisation
//*----------------------------------------------------------------------------
void AT91F_InitSDRAM()
{
    int     i;
    volatile int     *pSDRAM = (int *)BASE_EBI_CS1_ADDRESS;

    //* Configure PIOC as peripheral (D16/D31)
    AT91F_SDRC_CfgPIO();
    
    //* Setup MEMC to support CS1=SDRAM
    AT91C_BASE_EBI->EBI_CSA |= AT91C_EBI_CS1A;
    AT91C_BASE_EBI->EBI_CFGR = (AT91C_EBI_DBPUC & 0x00) | (AT91C_EBI_EBSEN & 0x00);

    //* Init SDRAM

    //* 1. A minimum pause of 200us is provided to precede any signal toggle
/*    AT91C_BASE_SDRC->SDRC_CR = AT91C_SDRC_NC_9 | AT91C_SDRC_NR_12 | AT91C_SDRC_NB_4_BANKS | AT91C_SDRC_CAS_2
                                | 0x100 | 0x4000 | 0x8000
                                | 0x880000
                                | 0x21000000;
*/
// вот здесь нужно указать количество строк , столбцов и банков, которые присутствуют в ваших 
//микрухах    
        AT91C_BASE_SDRC->SDRC_CR = AT91C_SDRC_NC_8 | AT91C_SDRC_NR_12 | AT91C_SDRC_NB_2_BANKS | AT91C_SDRC_CAS_2
                                | 0x100 | 0x4000 | 0x8000
                                | 0x880000
                                | 0x21000000;


    //* 2. A Precharge All command is issued to the SDRAM
    AT91C_BASE_SDRC->SDRC_MR = AT91C_SDRC_MODE_PRCGALL_CMD;
    *pSDRAM = 0;

    //* 3. Eight Auto-refresh are provided
    AT91C_BASE_SDRC->SDRC_MR = AT91C_SDRC_MODE_RFSH_CMD;
    for(i=0;i<8;i++)
        *pSDRAM = 0;

    //* 4. A mode register cycle is issued to program the SDRAM parameters
    AT91C_BASE_SDRC->SDRC_MR = AT91C_SDRC_MODE_LMR_CMD;
    *(pSDRAM+0x80) = 0;

    //* 5. Write refresh rate into SDRAMC refresh timer COUNT register
    AT91C_BASE_SDRC->SDRC_TR = (AT91C_SDRC_COUNT & 0x2E0);
    *pSDRAM = 0;

    //* 6. A Normal Mode Command is provided, 3 clocks after tMRD is set
    AT91C_BASE_SDRC->SDRC_MR = AT91C_SDRC_MODE_NORMAL_CMD;
    *pSDRAM = 0;
}

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...