реклама на сайте
подробности

 
 
10 страниц V  < 1 2 3 4 5 > »   
Reply to this topicStart new topic
> AT91RM9200 - мистика? SPI? или romboot.bin?, задачка не для слабонервных....
aaarrr
сообщение Jan 12 2007, 18:06
Сообщение #31


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(PrSt @ Jan 12 2007, 17:38) *
Честно говоря, как это сделать на GCC я так и не понял
пытался это делать читая - http://www.ethernut.de/en/documents/arm-inline-asm.html
и все одно не получается
я не могу понять как ввставить такое, как асм вставку...

Должно быть что-то типа:
Код
asm volatile("mov %0, r14" : "=r" (i) : );


Только листинг надо потом проверить обязательно.
Go to the top of the page
 
+Quote Post
PrSt
сообщение Jan 12 2007, 18:44
Сообщение #32


http://uschema.com
****

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



Цитата(aaarrr @ Jan 12 2007, 17:06) *
Код
asm volatile("mov %0, r14" : "=r" (i) : );

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


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

AT91F_LowLevelInit(): Debug channel initialized
AT91F_DataflashInit
AT91F_SpiInit
PIOA->PIO_ABSR - 0
PIOA->PIO_PSR - 3FFFFF80
PMC->PMC_PCSR - 2000
SPI->SPI_SR - 100F2
SPI->SPI_MR - E0019
dfcode - 0
press any key to enter bootloader

*----------------------------------------*
1: Download Dataflash [addr]
2: Read Dataflash [addr]
3: Start U-BOOT
4: Clear bootloader section in Dataflash
5: ...test...
*----------------------------------------*
Enter: 1 c0000000
Download Dataflash [0xc0000000]
CCCCC
Modification of Arm Vector 6 :34340017

Write 11392 bytes in DataFlash [0xc0000000]
write_dataflash
AT91F_DataflashSelect novalid
-F- Data Abort detected
-F- LOOP...

--------- ASR --------->: 10201

--------- AASR --------->: EA000490

--------- Address --------->: 11C8


тоесть - 11C8 если я верно понял - это адрес из пространства - Internal Memories на еще и диапазона 0х0..0х100000 (Boot Memory)
так а что это теперь может нам сообщить?


--------------------
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jan 12 2007, 19:00
Сообщение #33


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(PrSt @ Jan 12 2007, 18:44) *
тоесть - 11C8 если я верно понял - это адрес из пространства - Internal Memories на еще и диапазона 0х0..0х100000 (Boot Memory)
так а что это теперь может нам сообщить?

Теперь смотрите map-файл линкера - к какой процедуре относится этот адрес.

В асм-листинге все в порядке с R14? Еще не грех прочитать значение кода команды по полученному адресу.
Go to the top of the page
 
+Quote Post
PrSt
сообщение Jan 12 2007, 19:12
Сообщение #34


http://uschema.com
****

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



Цитата(aaarrr @ Jan 12 2007, 18:00) *
Теперь смотрите map-файл линкера - к какой процедуре относится этот адрес.
В асм-листинге все в порядке с R14? Еще не грех прочитать значение кода команды по полученному адресу.


если я все правильно вижу - такого файла нет (map-файл линкера)
root@server:romboot-evm9200_dmb# ll
итого 435
drwxr-xr-x 6 dmb dmb 1320 2007-01-12 17:35 ./
drwxr-sr-x 5 root staff 280 2007-01-11 09:47 ../
-rw-r--r-- 1 root root 732 2007-01-12 17:35 asm_isr.o
-rw-rw-rw- 1 dmb dmb 2058 2007-01-09 11:37 asm_isr.S
-rw-rw-rw- 1 dmb dmb 23776 2007-01-12 17:15 at45.cpp
-rw-r--r-- 1 root root 4792 2007-01-12 17:35 at45.o
-rw-rw-rw- 1 dmb dmb 3711 2007-01-09 16:09 com.cpp
-rw-rw-rw- 1 dmb dmb 3252 2007-01-09 11:37 com.h
-rw-r--r-- 1 root root 2488 2007-01-12 17:35 com.o
-rwxr-xr-x 1 dmb dmb 835 2007-01-09 17:34 compile*
-rw-r--r-- 1 root root 1208 2007-01-12 17:35 cstartup_ram.o
-rw-rw-rw- 1 dmb dmb 5272 2007-01-09 11:37 cstartup_ram.S
-rw-rw-rw- 1 dmb dmb 7556 2007-01-12 17:15 dataflash.cpp
-rw-rw-rw- 1 dmb dmb 7174 2007-01-12 16:06 dataflash.h
-rw-r--r-- 1 root root 3940 2007-01-12 17:35 dataflash.o
-rw-rw-rw- 1 dmb dmb 984 2007-01-09 16:09 div0.c
-rw-r--r-- 1 root root 648 2007-01-12 17:35 div0.o
-rw-rw-rw- 1 dmb dmb 348 2007-01-09 16:10 elf32-littlearm.lds
-rw-rw-rw- 1 dmb dmb 27065 2007-01-09 11:37 embedded_services.h
-rwxr-xr-x 1 dmb dmb 192 2007-01-09 11:37 env.sh*
drwxrwxrwx 2 root root 112 2007-01-11 10:35 exchange/
drwxr-xr-x 2 dmb dmb 144 2007-01-10 10:08 include/
-rwxrw-rw- 1 root root 8429 2007-01-12 17:35 init.cpp*
-rw-r--r-- 1 root root 2944 2007-01-12 17:35 init.o
-rw-r--r-- 1 root root 508 2007-01-12 17:35 jump.o
-rw-rw-rw- 1 dmb dmb 39 2007-01-09 11:37 jump.S
-rw-rw-rw- 1 dmb dmb 15700 2007-01-12 16:10 main.cpp
-rw-rw-rw- 1 dmb dmb 1352 2007-01-09 16:10 main.h
-rw-r--r-- 1 root root 6580 2007-01-12 17:35 main.o
lrwxrwxrwx 1 root root 13 2007-01-11 10:32 Makefile -> Makefile_last
-rw-rw-rw- 1 dmb dmb 1044 2007-01-12 12:42 Makefile_last
drwxr-xr-x 2 root root 1288 2007-01-11 10:30 old/
drwxr-xr-x 3 root root 1280 2007-01-11 10:32 old2/
-rw-r--r-- 1 root root 117345 2007-01-11 13:18 ROMBOOT.asm
-rwxr-xr-x 1 root root 11308 2007-01-12 17:35 romboot.bin*
-rwxrw-rw- 1 root root 10116 2007-01-09 11:37 romboot.bin.orig*
-rw-rw-rw- 1 root root 44010 2007-01-12 17:35 romboot.lss
-rwxr-xr-x 1 root root 18007 2007-01-12 17:35 romboot.out*
-rw-rw-rw- 1 dmb dmb 5276 2007-01-09 11:37 stdio.cpp
-rw-rw-rw- 1 dmb dmb 643 2007-01-09 11:37 stdio.h
-rw-r--r-- 1 root root 3776 2007-01-12 17:35 stdio.o
-rw-r--r-- 1 root root 900 2007-01-12 17:35 _udivsi3.o
-rw-rw-rw- 1 dmb dmb 2219 2004-07-04 11:49 _udivsi3.S
-rw-r--r-- 1 root root 892 2007-01-12 17:35 _umodsi3.o
-rw-rw-rw- 1 dmb dmb 2767 2004-07-04 11:49 _umodsi3.S

значение... посмотрите пожалуста(я не знаю что там искать) в приклепленном файле асмовый код...
Прикрепленные файлы
Прикрепленный файл  ROMBOOT.rar ( 26.73 килобайт ) Кол-во скачиваний: 81
 


--------------------
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jan 12 2007, 20:49
Сообщение #35


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(PrSt @ Jan 12 2007, 19:12) *
если я все правильно вижу - такого файла нет (map-файл линкера)

Значит линкер нужно попросить - посмотрите документицию.

Цитата(PrSt @ Jan 12 2007, 19:12) *
значение... посмотрите пожалуста(я не знаю что там искать) в приклепленном файле асмовый код...

Посмотрел, могу сказать только, что LR не поврежден. Значение посмотрите тем же printf'ом: *(unsigned int*)i.
Go to the top of the page
 
+Quote Post
PrSt
сообщение Jan 15 2007, 00:31
Сообщение #36


http://uschema.com
****

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



Цитата(aaarrr @ Jan 12 2007, 19:49) *
Значит линкер нужно попросить - посмотрите документицию.

Посмотрел, могу сказать только, что LR не поврежден. Значение посмотрите тем же printf'ом: *(unsigned int*)i.

Благодарю Вас...
>"Значит линкер нужно попросить" - не совсем понятно, честно говоря что Вы имеете ввиду, а где его можно попросить?
кстати, elf32-littlearm.lds - это не линкер скрипт?

Кстати, раз проблема близка к проблеме с стеком... как можно проверить вообще стек?
как узнать что должно быть и что получаем...?
Видимо если - DataAbort - то \то очень вероятно что чтото или с памятью или с стеком...
Как выяснилось память SDRAM тут не причем...

Мне вообще не ясно что может быть за проблемма???
По следующей логике пытаюсь судить ---> Ведь, romboot этот стандартный(причем написан фирмой ATMEL если я правильно все понимаю) и у других людей этот загрузчик работает видимо корректно, почемуже не работает у нас?
Схема то отличается только подключением переферии - ETHRNET и т д


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


--------------------
Go to the top of the page
 
+Quote Post
khach
сообщение Jan 15 2007, 18:46
Сообщение #37


Гуру
******

Группа: Свой
Сообщений: 3 439
Регистрация: 29-12-04
Пользователь №: 1 741



Вы что, с дуба все упали?ИМХО. Кто и где сказал загрузчику, что датафлеш сериальная? Загрузчик понимает, что флешка (обычная, параллельная) сидит по адресу 0xC0000000 И пытается ее писать. А ее нету. ну и облом соответственно. Соответственно и SPI недергается вообще.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jan 15 2007, 18:56
Сообщение #38


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(khach @ Jan 15 2007, 18:46) *
Вы что, с дуба все упали?ИМХО. Кто и где сказал загрузчику, что датафлеш сериальная? Загрузчик понимает, что флешка (обычная, параллельная) сидит по адресу 0xC0000000 И пытается ее писать. А ее нету. ну и облом соответственно. Соответственно и SPI недергается вообще.

Разберитесь в проблеме, для начала. Данный загрузчик вообще не умеет писать "обычную" флеш.
Go to the top of the page
 
+Quote Post
Lelick
сообщение Jan 15 2007, 19:13
Сообщение #39


Участник
*

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



А вам кажется подозрительной фраза:

Modification of Arm Vector 6 :34340017

вообще-nо для AT45DB642 должно быть 0841a017 (см стр. 87 на at91rm9200 "Structure of arm vector 6")
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jan 15 2007, 19:22
Сообщение #40


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Lelick @ Jan 15 2007, 19:13) *
А вам кажется подозрительной фраза:

Modification of Arm Vector 6 :34340017

вообще-nо для AT45DB642 должно быть 0841a017 (см стр. 87 на at91rm9200 "Structure of arm vector 6")

Совершенно верно, но к проблеме отношения не имеет sad.gif
Только не обязательно 0841a017, правильнее 0841a0xx.
Go to the top of the page
 
+Quote Post
PrSt
сообщение Jan 15 2007, 22:33
Сообщение #41


http://uschema.com
****

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



Цитата(aaarrr @ Jan 15 2007, 18:22) *
Совершенно верно, но к проблеме отношения не имеет sad.gif
Только не обязательно 0841a017, правильнее 0841a0xx.


Можно Вас попросить изложить свою мысль по этому поводу?
Хотелось бы понять что же все таки происходит и куда копать...
Вы довольно метко подмечаете особенности вопроса!

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


--------------------
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jan 16 2007, 00:18
Сообщение #42


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Попробую кратко изложить свои мысли по поводу Вашей проблемы.
Итак, исключение DataAbort возникает из-за обращения инструкции, находящейся по адресу 0x11C8, к несуществующей памяти по адресу 0xEA000490. Само значение адреса говорит о том, что базовый регистр, использующийся при обращении, был загружен неправильно, и в результате вместо адреса в нем оказался фрагмент кода (b +0x10e8).

Сейчас нужно установить, к какой именно части кода относится инструкция, расположенная по адресу 0x11C8. Это можно заставить сделать линкер, но у меня, к сожалению, нет сейчас под рукой документации.
Добавьте в обработчик AT91F_DataAbort() еще одну строку:
Код
printf("\n --------- Address --------->: %X \n\r", (i - 0x08));
printf("\n --------- Opcode --------->: %X \n\r", *(volatile unsigned int*)(i - 0x08));


Возможно, это поможет обойтись без map-файла, но все же он крайне желателен.
Go to the top of the page
 
+Quote Post
PrSt
сообщение Jan 16 2007, 10:15
Сообщение #43


http://uschema.com
****

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



Цитата(aaarrr @ Jan 15 2007, 23:18) *
Попробую кратко изложить свои мысли по поводу Вашей проблемы.
Итак, исключение DataAbort возникает из-за обращения инструкции, находящейся по адресу 0x11C8, к несуществующей памяти по адресу 0xEA000490. Само значение адреса говорит о том, что базовый регистр, использующийся при обращении, был загружен неправильно, и в результате вместо адреса в нем оказался фрагмент кода (b +0x10e8).

Сейчас нужно установить, к какой именно части кода относится инструкция, расположенная по адресу 0x11C8. Это можно заставить сделать линкер, но у меня, к сожалению, нет сейчас под рукой документации.
Добавьте в обработчик AT91F_DataAbort() еще одну строку:
Код
printf("\n --------- Address --------->: %X \n\r", (i - 0x08));
printf("\n --------- Opcode --------->: %X \n\r", *(volatile unsigned int*)(i - 0x08));


Возможно, это поможет обойтись без map-файла, но все же он крайне желателен.

собственно, вот что получил в терминале...
Enter: 1 c0000000
Download Dataflash [0xc0000000]
CCCCCCCC
Modification of Arm Vector 6 :bdf80017

Write 11392 bytes in DataFlash [0xc0000000]
write_dataflash
- это я выводу для дебага пути
AT91F_DataflashSelect novalid - это я выводу для дебага пути
-F- Data Abort detected - это я выводу для дебага пути
-F- LOOP...
- это я выводу для дебага пути
--------- ASR --------->: 10201
--------- AASR --------->: EA000494
--------- Address --------->: 11C8
--------- Opcode --------->: E59F002C


--------------------
Go to the top of the page
 
+Quote Post
PrSt
сообщение Jan 16 2007, 11:09
Сообщение #44


http://uschema.com
****

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



Цитата(aaarrr @ Jan 15 2007, 18:22) *
Совершенно верно, но к проблеме отношения не имеет sad.gif
Только не обязательно 0841a017, правильнее 0841a0xx.

да кстати
вот тест
в int AT91F_DataflashInit (void) делаю маленькое изменение
// for (i = 0; i < CFG_MAX_DATAFLASH_BANKS; i++) {
for (i = 0; i < 1; i++) {


и вот что получаю
AT91F_LowLevelInit(): Debug channel initialized
AT91F_DataflashInit
AT91F_SpiInit
PIOA->PIO_ABSR - 0
PIOA->PIO_PSR - 3FFFFF80
PMC->PMC_PCSR - 2000
SPI->SPI_SR - 100F2
SPI->SPI_MR - E0019
dfcode - 3C
AT45DB642
press any key to enter bootloader

ATMEL LOADER VER 1.01 Jan 16 2007 09:56:44
*----------------------------------------*
AT91F_DataflashPrintInfo
DataFlash:AT45DB642
Nb pages: 008192
Page Size: 001056
Size=08650752 bytes
Logical address: 0xC0000000
AT91F_DataflashPrintInfo ERROR detect - 0
*----------------------------------------*
1: Download Dataflash [addr]
2: Read Dataflash [addr]
3: Start U-BOOT
4: Clear bootloader section in Dataflash
5: ...test...
*----------------------------------------*
Enter:


Enter: 1 c0000000
Download Dataflash [0xc0000000]

Modification of Arm Vector 6 :841a017

Write 11392 bytes in DataFlash [0xc0000000]
write_dataflash
AT91F_DataflashSelect
read_dataflash
AT91F_DataflashSelect
Hit a Key!CCCCCCCCCCCC
AT91F_LowLevelInit(): Debug channel initialized
AT91F_DataflashInit
AT91F_SpiInit
PIOA->PIO_ABSR - 0
PIOA->PIO_PSR - 3FFFFF80
PMC->PMC_PCSR - 2000
SPI->SPI_SR - 100F2
SPI->SPI_MR - E0019
dfcode - 3C
AT45DB642
PIOA->PIO_ABSR - 0
PIOA->PIO_PSR - 3FFFFF80
PMC->PMC_PCSR - 2000
SPI->SPI_SR - 100F2
SPI->SPI_MR - 70019
dfcode - 0
press any key to enter bootloader
Load U-BOOT from dataflash[c0008000] to SDRAM[20f00000]
read_dataflash
AT91F_DataflashSelect
Set PLLA to 180Mhz and Master clock to 45Mhz and start U-BOOT



и - УРА!!!!!!
зашилось
нада зхаметить чтло это случайно....!!!!!!!!!
с какойто промежуточной редакцией гдето в коде....

тоесть вот что я вижу


--------------------
Go to the top of the page
 
+Quote Post
nvn
сообщение Jan 16 2007, 11:09
Сообщение #45


Участник
*

Группа: Участник
Сообщений: 56
Регистрация: 8-02-05
Пользователь №: 2 486



>CCCCCCCCCCCCCCCCC
>AT91F_LowLevelInit(): Debug channel initialized
>press any key to enter bootloader
>
>ATMEL LOADER VER 1.01 May 3 2006 15:21:06
>*----------------------------------------*
>*----------------------------------------*
>1: Download Dataflash [addr]
>2: Read Dataflash [addr]
>3: Start U-BOOT
>4: Clear bootloader section in Dataflash
>*----------------------------------------*
>Enter:
>
>тут вроде все верно
как раз тут и неверно... у Вас DataFlash вообще неопределяется romboot'ом, поэтому дальше идти рано... добейтесь что бы romboot увидел вашу флэшку. Должно быть что-то вроде этого:

ATMEL LOADER VER 1.01 May 3 2006 15:21:06
*----------------------------------------*
DataFlash:AT45DB321
Nb pages: 008192
Page Size: 000528
Size=04325376 bytes
Logical address: 0xC0000000
*----------------------------------------*
1: Download Dataflash [addr]
2: Read Dataflash [addr]
3: Start U-BOOT
4: Clear bootloader section in Dataflash
*----------------------------------------*
Enter:


упс!! не заметил пока печатал, что вы уже решили эту проблему smile.gif

З.Ы.: да еще на AT45DB321 запись у romboot'а глючит

Сообщение отредактировал nvn - Jan 16 2007, 11:24
Go to the top of the page
 
+Quote Post

10 страниц V  < 1 2 3 4 5 > » 
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 7th July 2025 - 18:01
Рейтинг@Mail.ru


Страница сгенерированна за 0.01443 секунд с 7
ELECTRONIX ©2004-2016