|
|
  |
AT91RM9200 - мистика? SPI? или romboot.bin?, задачка не для слабонервных.... |
|
|
|
Jan 16 2007, 11:22
|
Частый гость
 
Группа: Новичок
Сообщений: 79
Регистрация: 1-11-06
Пользователь №: 21 868

|
Стас, а ты не пробовал прицеплять к 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 скормить. Там много интересного пишут.
|
|
|
|
|
Jan 16 2007, 16:29
|

http://uschema.com
   
Группа: Свой
Сообщений: 708
Регистрация: 16-02-06
Из: UK(Ukrainian_Kingdom) Kharkov
Пользователь №: 14 394

|
Цитата(aaarrr @ Jan 16 2007, 10:36)  Цитата(PrSt @ Jan 16 2007, 11:09)  и - УРА!!!!!! зашилось нада зхаметить чтло это случайно....!!!!!!!!! с какойто промежуточной редакцией гдето в коде....
Это хорошо. А с диагностикой я малость наврал - строку asm volatile("mov %0, r14" : "=r" (i) : ); нужно ставить перед первым printf'ом, иначе LR теряется. Всем спасибо! помогли! серьезно! надо заметить - локализовал проблемму(!как мне кажется!) завелась схема прошивкой после следующего 1 - скорость SPI инициализировани с снижением скорости в 32 раза 2 - #define AT91C_PLLA_MCK назначили как 0x3023 - сменил в 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. надеюсь передал верно мысль. вообще такое реально?
--------------------
|
|
|
|
|
Jan 17 2007, 14:16
|

http://uschema.com
   
Группа: Свой
Сообщений: 708
Регистрация: 16-02-06
Из: UK(Ukrainian_Kingdom) Kharkov
Пользователь №: 14 394

|
Цитата(PrSt @ Jan 16 2007, 15:29)  первая флэшка стоит на 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 вопрос все еще остался... просветите кто нибудь плз...
--------------------
|
|
|
|
|
Jan 18 2007, 10:10
|

http://uschema.com
   
Группа: Свой
Сообщений: 708
Регистрация: 16-02-06
Из: UK(Ukrainian_Kingdom) Kharkov
Пользователь №: 14 394

|
Цитата(PrSt @ Jan 17 2007, 13:16)  а вот на счет 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: не верно чтото, в зависимости от моей схемы?
--------------------
|
|
|
|
|
Jan 18 2007, 12:36
|
Участник

Группа: Участник
Сообщений: 47
Регистрация: 14-06-05
Пользователь №: 6 007

|
проверь в rm9200.h значения master_clock и main_clock на сooтветствие настройкам plla в bootloader + проверь в rm9200.h значение brgr_divisor делителя dbgu порта на соответствие master_clock
|
|
|
|
|
Jan 18 2007, 14:48
|

http://uschema.com
   
Группа: Свой
Сообщений: 708
Регистрация: 16-02-06
Из: UK(Ukrainian_Kingdom) Kharkov
Пользователь №: 14 394

|
Цитата(Lelick @ Jan 18 2007, 11:36)  проверь в 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 */
так что неудивительно что что прекращяется вывод... но по ходу тут прекращяется все! или ни кто так глубоко ни когда не лез?
--------------------
|
|
|
|
|
Jan 18 2007, 22:16
|
Частый гость
 
Группа: Участник
Сообщений: 116
Регистрация: 18-12-04
Из: Минск
Пользователь №: 1 550

|
если используется 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
--------------------
|
|
|
|
|
Jan 31 2007, 13:47
|

http://uschema.com
   
Группа: Свой
Сообщений: 708
Регистрация: 16-02-06
Из: UK(Ukrainian_Kingdom) Kharkov
Пользователь №: 14 394

|
Цитата(vanokuten @ Jan 18 2007, 21:16)  если используется 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 вопрос задавал уже , но ни кто не ответил досе... может все же ктото с таким сталкивался?
--------------------
|
|
|
|
|
Feb 1 2007, 11:42
|

http://uschema.com
   
Группа: Свой
Сообщений: 708
Регистрация: 16-02-06
Из: UK(Ukrainian_Kingdom) Kharkov
Пользователь №: 14 394

|
Цитата(COMA @ Feb 1 2007, 07:59)  Помочь не чем У меня все заработало с полпинка по этому руководству - http://www.heavy-online.ru/arm-linux/дык по этой же статье и делаю... ну хоть за попытку, и то всем спасибо большое! кстати, поднял это дело... - запинговалось, tftp поднял... пробую идти дальше...
--------------------
|
|
|
|
|
Feb 6 2007, 13:03
|

http://uschema.com
   
Группа: Свой
Сообщений: 708
Регистрация: 16-02-06
Из: UK(Ukrainian_Kingdom) Kharkov
Пользователь №: 14 394

|
Цитата(PrSt @ Feb 1 2007, 10:42)  пробую идти дальше... пытаюсь загрузить линуксовое ядро, то что с сайта 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" ? или речь идет о чем-то ином...?
--------------------
|
|
|
|
|
Feb 7 2007, 13:04
|
Частый гость
 
Группа: Участник
Сообщений: 116
Регистрация: 18-12-04
Из: Минск
Пользователь №: 1 550

|
Цитата(PrSt @ Feb 6 2007, 12:03)  Цитата(PrSt @ Feb 1 2007, 10:42)  пробую идти дальше...
пытаюсь загрузить линуксовое ядро, то что с сайта 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
--------------------
|
|
|
|
|
Feb 8 2007, 16:15
|

http://uschema.com
   
Группа: Свой
Сообщений: 708
Регистрация: 16-02-06
Из: UK(Ukrainian_Kingdom) Kharkov
Пользователь №: 14 394

|
Цитата(vanokuten @ Feb 7 2007, 12:04)  Цитата(PrSt @ Feb 6 2007, 12:03)  Цитата(PrSt @ Feb 1 2007, 10:42)  пробую идти дальше...
пытаюсь загрузить линуксовое ядро, то что с сайта 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 а куда в иное место или еще чтото - не знаю и проверить не знаю как... ...Вариации разные испробовал... проясните плиз, кто нибудь - что происходит или что не так? ?
--------------------
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|