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

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

Стас, а ты не пробовал прицеплять к 9200 CrossWorks (он же CrossStudio)?. У меня щас версия 1.6 build 3, но только мы работаем с LPC21xx. Это IDE, основанная на gcc. Без make, собственная система сборки проекта. Субъективно ее отладчик мне понравился больше чем Insight. Интерфейс содран с MS VS 7. Она правда не совсем халявная, но есть методы лечения. В списке поддерживаемых процов есть 9200. Правда не знаю как обстоят дела с загрузчиком. У LPC с этим проще - флеша внутренняя и загрузчик cw ее писать может, через jtag прямо из среды. В числе поддерживаемых отладчиков есть вигглер.

 

Но ты в любом случае вигглер собери, хоть с cw, хоть с gdb+insight+openocd - несравненно удобнее иметь пошаговую отладку и просмотр всех регистров и переменных, чем просто консоль :).

 

К сожалению, именно по твоему загрузчику тебе ничего посоветовать не могу, с 9200 сам не работал.

 

А мапу вывести - линкеру опцию -Map mapfile скормить. Там много интересного пишут.

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


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

и - УРА!!!!!!

зашилось

нада зхаметить чтло это случайно....!!!!!!!!!

с какойто промежуточной редакцией гдето в коде....

Это хорошо. А с диагностикой я малость наврал - строку asm volatile("mov %0, r14" : "=r" (i) : ); нужно ставить перед первым printf'ом, иначе LR теряется.

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


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

и - УРА!!!!!!

зашилось

нада зхаметить чтло это случайно....!!!!!!!!!

с какойто промежуточной редакцией гдето в коде....

Это хорошо. А с диагностикой я малость наврал - строку asm volatile("mov %0, r14" : "=r" (i) : ); нужно ставить перед первым printf'ом, иначе LR теряется.

 

Всем спасибо!

помогли! серьезно!

надо заметить - локализовал проблемму(!как мне кажется!)

завелась схема прошивкой после следующего

1 - скорость SPI инициализировани с снижением скорости в 32 раза

2 -

#define AT91C_PLLA_MCK назначили как 0x302

3 - сменил в

int AT91F_DataflashInit (void)

...

// for (i = 0; i < CFG_MAX_DATAFLASH_BANKS; i++) {

for (i = 0; i < 1; i++) {

....

этот пункт отметим как FFF так как это временное решение, сами понимаете...

 

дело втом, что на флешку все сигналы кроме MISO идут через буфер (если посмотреть на схему - то можно это увидить), и стояла HC244 но она оказалась медленной, там какаято беда с тормозами фронтов, именно - по этому снижение скорости SPI помоло...

сменил ее на AC244 как рукой сняло эту проблемму...

Видимо из-за этого все и было...хотя может и не только...

за исключением еще одной.... которая отмечена ранее FFF

порвая флэшка стоит на CS0, как положенно....

у нас в схеме вторая флэшка используется на CS1

а в этом лоадере используется CS0 и CS3

вопрос:

что мне сменить в программе что бы использовать не CS3 а CS1 ?

и еще такой вопрос - как сделать что бы размер памяти 2 флэшек был виден как единая память?

тоесть у нас стоит 8M+8M а хочется сумарно видеть все 16M. надеюсь передал верно мысль.

вообще такое реально?

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


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

первая флэшка стоит на CS0, как положенно....

у нас в схеме вторая флэшка используется на CS1

а в этом лоадере используется CS0 и CS3

вопрос:

что мне сменить в программе что бы использовать не CS3 а CS1 ?

и еще такой вопрос - как сделать что бы размер памяти 2 флэшек был виден как единая память?

тоесть у нас стоит 8M+8M а хочется сумарно видеть все 16M. надеюсь передал верно мысль.

вообще такое реально?

Судя по всему CS0 и CS1 заработали если верить сообщению на терминале

Nb pages: 008192

Page Size: 001056

Size=08650752 bytes

Logical address: 0xC0000000

DataFlash:AT45DB642

Nb pages: 008192

Page Size: 001056

Size=08650752 bytes

Logical address: 0xD0000000

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

1: Download Dataflash [addr]

2: Read Dataflash [addr]

3: Start U-BOOT

4: Clear bootloader section in Dataflash

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

Enter:

 

а вот на счет 8M+8M вопрос все еще остался... просветите кто нибудь плз...

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


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

а вот на счет 8M+8M вопрос все еще остался... просветите кто нибудь плз...

 

Также вопрос к СОМА, aaarrr и к другим опытным ребятам...

...плюс ко всему не работает U-Boot.

вот в этой статье(http://heavy-online.ru/arm-linux/) сказано

" Если все нормально - то после ресета - u-boot будет грузиться автоматически (если ничего не нажимать) "

 

ВОПРОС! - а если не нормально?

 

объясняю проблемку:

прошит - romboot.bin

его исход ник в вложении

 

если не нажимать интер то после вклоючения

AT91F_LowLevelInit(): Debug channel initialized

press any key to enter bootloader

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

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

и тут висит....

 

если с нажатием после включения

AT91F_LowLevelInit(): Debug channel initialized

press any key to enter bootloader

 

ATMEL LOADER VER 1.01 Jan 17 2007 09:45:22

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

DataFlash:AT45DB642

Nb pages: 008192

Page Size: 001056

Size=08650752 bytes

Logical address: 0xC0000000

DataFlash:AT45DB642

Nb pages: 008192

Page Size: 001056

Size=08650752 bytes

Logical address: 0xD0000000

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

1: Download Dataflash [addr]

2: Read Dataflash [addr]

3: Start U-BOOT

4: Clear bootloader section in Dataflash

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

Enter:

 

собрал U-Boot

 

запись U-Boot`a

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

Enter: 1 c0008000

Download Dataflash [0xc0008000]

CCCCCCCCCCCC

Modification of Arm Vector 6 :841a0bc

 

Write 95744 bytes in DataFlash [0xc0008000]

Hit a Key!aflash: OK

 

снимаю питание

при включении надеюсь увидеть U-Boot а вижу следующее

AT91F_LowLevelInit(): Debug channel initialized

press any key to enter bootloader

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

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

это означает что U-Boot мягко говоря - не стартанул вообще...

зотя если проверить пунктом 2 по адрессу 20008000, из romboot, то вижу что таки в flash находится бействительно U-Boot.bin

 

что за проблемма?

может в файле include/configs/RM9200.h: не верно чтото, в зависимости от моей схемы?

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


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

проверь в rm9200.h значения master_clock и main_clock на сooтветствие настройкам plla в bootloader + проверь в rm9200.h значение brgr_divisor делителя dbgu порта на соответствие master_clock

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


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

проверь в rm9200.h значения master_clock и main_clock на сooтветствие настройкам plla в bootloader + проверь в rm9200.h значение brgr_divisor делителя dbgu порта на соответствие master_clock

вроде все одинаково

 

я тут вот на что натолкнулся, похоже что U-boot не умеет вообще грузиться с последовательно flash а только с параллельной... если верить содержимому файла

/usr/local/arm9/src/u-boot-1.1.6/board/at91rm9200dk/flash.c

 

а с другой стороны в

/usr/local/arm9/src/u-boot-1.1.6/board/at91rm9200dk/at45.c

инициализация SPI и т д (такие жу куски кода как и в изходнике от romboot)

 

и вот теперь вопрос - с какой он флешки всеже грузится? и где это можно указать?

 

+ ко всему еще вот на что наткнулся

 

на терминале наблюдаю следующее

AT91F_LowLevelInit(): Debug channel initialized

press any key to enter bootloader

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

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

AT91F_ResetRegisters

если смотреть на исходный код от romboot, то видим следующее...

 

void AT91F_StartUboot(unsigned int dummy, void *pvoid)

{

printf("Load U-BOOT from dataflash[%x] to SDRAM[%x]\n\r", AT91C_UBOOT_DATAFLASH_ADDR, AT91C_UBOOT_ADDR);

read_dataflash(AT91C_UBOOT_DATAFLASH_ADDR, AT91C_UBOOT_SIZE, (char *)(AT91C_UBOOT_ADDR));

printf("Set PLLA to 180Mhz and Master clock to 45Mhz and start U-BOOT\n\r");

//* Reset registers

AT91F_ResetRegisters();

printf("Jump(AT91C_UBOOT_ADDR)\n\r");

Jump(AT91C_UBOOT_ADDR);

printf("Jump(AT91C_UBOOT_ADDR) - DONE \n\r");

while(1);

}

 

 

//*--------------------------------------------------------------------------------------

//* Function Name : AT91F_ResetRegisters

//* Object : Restore the initial state to registers

//* Input Parameters :

//* Output Parameters :

//*--------------------------------------------------------------------------------------

static void AT91F_ResetRegisters(void)

{

volatile int i = 0;

 

printf("AT91F_ResetRegisters\n\r");

 

//* set the PIOs in input

*AT91C_PIOA_ODR = 0xFFFFFFFF; /* Disables all the output pins */

*AT91C_PIOA_PER = 0xFFFFFFFF; /* Enables the PIO to control all the pins */

 

printf("1 \n\r");

AT91F_AIC_DisableIt (AT91C_BASE_AIC, AT91C_ID_SYS);

 

printf("2 \n\r");

/* close all peripheral clocks */

AT91C_BASE_PMC->PMC_PCDR = 0xFFFFFFFC;

 

printf("3 \n\r");

//* Disable core interrupts and set supervisor mode

__asm__ ("msr CPSR_c, #0xDF"); //* ARM_MODE_SYS(0x1F) | I_BIT(0x80) | F_BIT(0x40)

 

printf("4 \n\r");

//* Clear all the interrupts

*AT91C_AIC_ICCR = 0xffffffff;

 

/* read the AIC_IVR and AIC_FVR */

i = *AT91C_AIC_IVR;

i = *AT91C_AIC_FVR;

 

printf("5 \n\r");

/* write the end of interrupt control register */

*AT91C_AIC_EOICR = 0;

 

AT91F_SetPLL();

printf("AT91F_ResetRegisters - DONE \n\r");

}

 

 

и вопросик теперь что тут предпологается ?

делается ведь тупое

//* set the PIOs in input

*AT91C_PIOA_ODR = 0xFFFFFFFF; /* Disables all the output pins */

*AT91C_PIOA_PER = 0xFFFFFFFF; /* Enables the PIO to control all the pins */

так что неудивительно что что прекращяется вывод...

но по ходу тут прекращяется все!

 

или ни кто так глубоко ни когда не лез?

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


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

если используется romboot.bin и uboot загрузка из dataflash то должен быть define

#define CONFIG_SKIP_LOWLEVEL_INIT

иначе uboot будет виснуть

 

Embedded Linux Engineer

Promwad Company

 

 

 

>а с другой стороны в

>/usr/local/arm9/src/u-boot-1.1.6/board/at91rm9200dk/at45.c

>инициализация SPI и т д (такие жу куски кода как и в изходнике от romboot)

>

>и вот теперь вопрос - с какой он флешки всеже грузится? и где это можно указать?

 

romboot.bin грузит из dataflash u-boot в SDRAM и передает управление uboot

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


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

если используется romboot.bin и uboot загрузка из dataflash то должен быть define

#define CONFIG_SKIP_LOWLEVEL_INIT

иначе uboot будет виснуть

в томто и дело - версия u-boot-1.1.6 и u-boot-1.2.0 виснет...

версию u-boot-1.1.1 чуть пропатчил, вставил драйвер lxt-972, но с этимдрайвером оно только посылает в сеть ARP, а пинговать не получается...

такое впечатление что не верно инициализировалась... или еще чтото...

по этой теме - я тут http://electronix.ru/forum/index.php?showtopic=26464 вопрос задавал уже , но ни кто не ответил досе...

 

может все же ктото с таким сталкивался?

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


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

Помочь не чем :(

 

У меня все заработало с полпинка по этому руководству -

http://www.heavy-online.ru/arm-linux/

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


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

Помочь не чем :(

 

У меня все заработало с полпинка по этому руководству -

http://www.heavy-online.ru/arm-linux/

дык по этой же статье и делаю...

 

ну хоть за попытку, и то всем спасибо большое!

 

кстати, поднял это дело...

- запинговалось, tftp поднял...

пробую идти дальше...

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


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

пробую идти дальше...

 

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

и вот наткнулся на следующее не совсем понятное поведение...

 

AT91RM9200 > bootm

## Booting image at 20800000 ...

Image Name:

Image Type: ARM Linux Kernel Image (gzip compressed)

Data Size: 1124113 Bytes = 1.1 MB

Load Address: 20008000

Entry Point: 20008000

Verifying Checksum ... OK

Uncompressing Kernel Image ... OK

 

Starting kernel ...

 

и стоит тут (затрял), что это может быть за ерунда?

 

иду дальше, пересобрал ядро

пробую стартануть и вот что получаю

Starting kernel ...

 

Error: unrecognized/unsupported machine ID (r1 = 0x000000fb).

 

Available machine support:

 

ID (hex) NAME

00000106 uCrouter EVM9200

 

Please check your kernel config and/or bootloader

 

корень вопроса...

у меня в U-Boot - CFG_PROMPT объявлен как "AT91RM9200_board# "

кокое в ядре нада правильно имя указать?

"AT91RM9200_board# " ?

или

"AT91RM9200_board" ?

 

или речь идет о чем-то ином...?

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


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

пробую идти дальше...

 

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

и вот наткнулся на следующее не совсем понятное поведение...

 

AT91RM9200 > bootm

## Booting image at 20800000 ...

Image Name:

Image Type: ARM Linux Kernel Image (gzip compressed)

Data Size: 1124113 Bytes = 1.1 MB

Load Address: 20008000

Entry Point: 20008000

Verifying Checksum ... OK

Uncompressing Kernel Image ... OK

 

Starting kernel ...

 

и стоит тут (затрял), что это может быть за ерунда?

 

иду дальше, пересобрал ядро

пробую стартануть и вот что получаю

Starting kernel ...

 

Error: unrecognized/unsupported machine ID (r1 = 0x000000fb).

 

Available machine support:

 

ID (hex) NAME

00000106 uCrouter EVM9200

 

Please check your kernel config and/or bootloader

 

корень вопроса...

у меня в U-Boot - CFG_PROMPT объявлен как "AT91RM9200_board# "

кокое в ядре нада правильно имя указать?

"AT91RM9200_board# " ?

или

"AT91RM9200_board" ?

 

или речь идет о чем-то ином...?

 

 

Речь идет об ином а именно об соответствии machine ID между uboot и linux kernel

см

linux-source/arch/arm/tools/mach-types

 

а также

 

u-boot-source/include/asm-arm/mach-types.h

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


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

пробую идти дальше...

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

и вот наткнулся на следующее не совсем понятное поведение...

AT91RM9200 > bootm

## Booting image at 20800000 ...

Image Name:

Image Type: ARM Linux Kernel Image (gzip compressed)

Data Size: 1124113 Bytes = 1.1 MB

Load Address: 20008000

Entry Point: 20008000

Verifying Checksum ... OK

Uncompressing Kernel Image ... OK

 

Starting kernel ...

 

и стоит тут (затрял), что это может быть за ерунда?

Речь идет об ином а именно об соответствии machine ID между uboot и linux kernel

см

linux-source/arch/arm/tools/mach-types

а также

u-boot-source/include/asm-arm/mach-types.h

не получается дальше чем Starting kernel ...

Ну неужели ни у кого не было такой проблеммы?

уже пол ядра перерыл - не могу найти в чем проблемма....

 

ядро 2.6.16 с патчами на AT91RM9200 кроме DS1307, но он щяс ни не нужен....

пробовал также собранное ядро с сайта heavy-online, такое же самое поведение...

или ядро не стартует(что маловероятно)

или оно данные выводит не на DBGU а куда в иное место

или еще чтото - не знаю и проверить не знаю как...

...Вариации разные испробовал...

 

проясните плиз, кто нибудь - что происходит или что не так?

?

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


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

С каким bootargs запускаемся ?

Поставь пару printk чтобы посмотреть где останавливается

 

Судя по тому что ты таки исправил ошибку machine ID кернел у тебя таки грузится

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


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

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

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

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

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

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

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

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

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

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