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

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


Знающий
****

Группа: Свой
Сообщений: 851
Регистрация: 28-08-04
Пользователь №: 559



Насчет модели - у меня двухслойка. Резисторы 68 Ом.

Схему посмотрю.

Может у вас генератор не стартует? Попробуйте держать кнопку ресет пару секунд при включении платы.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jan 9 2007, 12:07
Сообщение #17


Гуру
******

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



Цитата(PrSt @ Jan 9 2007, 10:48) *
Вы по ходу правы, если верить огрызку кода... этого я не заметил честно говоря... так...веселье наступает...
тогда, вопросиком плавно переходим к новому вопросику связанным с корректной работой схемы...
а именно с работой с памятью...

Стоп! Причем здесь корректная работа памяти? С ней, скорее всего, все в порядке.
Data Abort возникает из-за некорректного обращения к памяти, а не по причине неисправности оной.
У AT91RM9200 есть MC Abort Status Register и MC Abort Address Register - выведите их значения printf'ом в DataAbort(), и станет ясно, где происходит глюк.
Go to the top of the page
 
+Quote Post
PrSt
сообщение Jan 9 2007, 16:52
Сообщение #18


http://uschema.com
****

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



Цитата(aaarrr @ Jan 9 2007, 11:07) *
Стоп! Причем здесь корректная работа памяти? С ней, скорее всего, все в порядке.
Data Abort возникает из-за некорректного обращения к памяти, а не по причине неисправности оной.
У AT91RM9200 есть MC Abort Status Register и MC Abort Address Register - выведите их значения printf'ом в DataAbort(), и станет ясно, где происходит глюк.


собрать из линукса и gcc - бинарик для прошивки получилось....
щяс пробую сделать проверку по Вашему совету...

я так понимаю Вы говорите про это?
The full 32-bit wide abort address is saved in the Abort Address Status Register (MC_AASR).
Parameters of the access are saved in the Abort Status Register (MC_ASR) and include:
• the size of the request (ABTSZ field)
• the type of the access, whether it is a data read or write or a code fetch (ABTTYP field)
• whether the access is due to accessing an undefined address (UNDADD bit) or a misaligned
address (MISADD bit)
• the source of the access leading to the last abort (MST0, MST1, MST2 and MST3 bits)
• whether or not an abort occurred for each master since the last read of the register
(SVMST0, SVMST1, SVMST2 and SVMST3 bits) except if it is traced in the MST bits.

вот что я сделал
//*----------------------------------------------------------------------------
//* \fn AT91F_DataAbort
//* \brief This function reports an Abort
//*----------------------------------------------------------------------------
void AT91F_DataAbort()
{
int i;
AT91F_DBGU_Printk("-F- Data Abort detected\n\r");
AT91F_DBGU_Printk("-F- LOOP... \n\r");
// Abort Address Status Register (MC_AASR)
// Abort Status Register (MC_ASR)
//int *iii;
//iii=(int *AT91C_MC_ASR);
printf("\n --------- ASR --------->: %X \n\r", *AT91C_MC_ASR);
//iii=(int *AT91C_MC_AASR);
printf("\n --------- AASR --------->: %X \n\r", *AT91C_MC_AASR);

while (1);
}


и вот что получилось
Enter: 1 c0000000
Download Dataflash [0xc0000000]
CCCCC
Modification of Arm Vector 6 :34340015

Write 10368 bytes in DataFlash [0xc0000000]

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

--------- AASR --------->: EA000438
-F- Data Abort detected
-F- LOOP...


судя по всему за аддрес EA000438 отвечает этот кусок кода из lib_AT91RM9200.h

//*----------------------------------------------------------------------------
//* \fn AT91F_AIC_SetExceptionVector
//* \brief Configure vector handler
//*----------------------------------------------------------------------------
__inline unsigned int AT91F_AIC_SetExceptionVector (
unsigned int *pVector, // \arg pointer to the AIC registers
void (*Handler) () ) // \arg Interrupt Handler
{
unsigned int oldVector = *pVector;

if ((unsigned int) Handler == (unsigned int) AT91C_AIC_BRANCH_OPCODE)
*pVector = (unsigned int) AT91C_AIC_BRANCH_OPCODE;
else
*pVector = (((((unsigned int) Handler) - ((unsigned int) pVector) - 0x8) >> 2) & 0x00FFFFFF) | 0xEA000000;

return oldVector;
}

что это может значит?


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


http://uschema.com
****

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



Цитата(PrSt @ Jan 9 2007, 15:52) *
что это может значит?


Кстати по ходу дела CRC32 не учавствует в этом всем...

дело в том что если верить даташиту страницы 17, то по этому аддресу доступ вообще - undefined
следовательно - ерунда какаято......
кто-нибудь что-нибудь может дельное посоветовать?
крыша едет...


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


Гуру
******

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



Цитата(PrSt @ Jan 10 2007, 11:57) *
дело в том что если верить даташиту страницы 17, то по этому аддресу доступ вообще - undefined

Могу только сказать, что адрес больше похож на код команды (b +0x10e8).

Цитата(PrSt @ Jan 10 2007, 11:57) *
кто-нибудь что-нибудь может дельное посоветовать?

Для начала следует выяснить, где именно вызывается исключение. Для этого нужно прочитать значение LR_abt, только до этого нужно выяснить, не портится ли он, что в C-программе более чем вероятно.
Go to the top of the page
 
+Quote Post
PrSt
сообщение Jan 10 2007, 15:40
Сообщение #21


http://uschema.com
****

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



Цитата(aaarrr @ Jan 10 2007, 12:18) *
Могу только сказать, что адрес больше похож на код команды (b +0x10e8).

Для начала следует выяснить, где именно вызывается исключение.
Для этого нужно прочитать значение LR_abt, только до этого нужно выяснить, не портится ли он, что в C-программе более чем вероятно.

а как это выснить?
и что за LR_abt?

я так понимаю если схема правильная, то и romboot должен корректно вести себя и работать, ведь у людей же работает он....
вот тот romboot который я пытаюсь загрузить...
http://heavy-online.ru/arm-linux/files/pac...oot-evm9200.tgz


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


Гуру
******

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



Цитата(PrSt @ Jan 10 2007, 15:40) *
а как это выснить?

Посмотреть генерируемый компилятором код.

Цитата(PrSt @ Jan 10 2007, 15:40) *
и что за LR_abt?

Link Register (R14) процессора для режима Abort.

Придется написать свой обработчик Data Abort, и написать на ассемблере, по крайней мере, частично.
Go to the top of the page
 
+Quote Post
PrSt
сообщение Jan 10 2007, 17:25
Сообщение #23


http://uschema.com
****

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



Цитата(aaarrr @ Jan 10 2007, 14:49) *
Посмотреть генерируемый компилятором код.

Link Register (R14) процессора для режима Abort.

Придется написать свой обработчик Data Abort, и написать на ассемблере, по крайней мере, частично.


в асмовсвом коде я непонял где искать...
на всякий случай, в прикрепленном файле асмовкский код этого файлика, если это не испугнет ~100К размер его...

оброботчик есть в файле cstartup.S
/*- Set up Abort Mode and set Abort Mode Stack*/
msr CPSR_c, #ARM_MODE_ABORT | I_BIT | F_BIT
mov r13, r0 /* Init stack Abort*/
sub r0, r0, #ABT_STACK_SIZE
Прикрепленные файлы
Прикрепленный файл  ROMBOOT.rar ( 24.49 килобайт ) Кол-во скачиваний: 107
 


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


Местный
***

Группа: Свой
Сообщений: 205
Регистрация: 19-12-05
Из: Kiev
Пользователь №: 12 394



Цитата(PrSt @ Jan 10 2007, 10:57) *
Цитата(PrSt @ Jan 9 2007, 15:52) *

что это может значит?


Кстати по ходу дела CRC32 не учавствует в этом всем...

дело в том что если верить даташиту страницы 17, то по этому аддресу доступ вообще - undefined
следовательно - ерунда какаято......
кто-нибудь что-нибудь может дельное посоветовать?
крыша едет...


JTAGом пошагово пробежаться по этому куску, и все станет ясно. А так гадать можно очень долго.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jan 10 2007, 18:22
Сообщение #25


Гуру
******

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



Цитата(PrSt @ Jan 10 2007, 17:25) *
в асмовсвом коде я непонял где искать...
на всякий случай, в прикрепленном файле асмовкский код этого файлика, если это не испугнет ~100К размер его...

Посмотрел. В функции AT91F_DataAbort() LR должен остаться целым. Его можно попробовать вытащить через inline asm - это <адрес инструкции, вызвавшей Abort> + 0x08.

Цитата(PrSt @ Jan 10 2007, 17:25) *
оброботчик есть в файле cstartup.S

Это не обработчик, а установка стека режима Abort.
Go to the top of the page
 
+Quote Post
PrSt
сообщение Jan 10 2007, 18:32
Сообщение #26


http://uschema.com
****

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



Цитата(AlexBoy @ Jan 10 2007, 17:16) *
JTAGом пошагово пробежаться по этому куску, и все станет ясно. А так гадать можно очень долго.

JTAG спаяем (WIGGLER) - а каким инструментарием "пошагово пробежаться по этому куску"?
я не делат этого никогда, не знаю как...
в инете конечно посмотрю... но может уже есть правельное отканаттое решение?


--------------------
Go to the top of the page
 
+Quote Post
AlexBoy
сообщение Jan 10 2007, 20:09
Сообщение #27


Местный
***

Группа: Свой
Сообщений: 205
Регистрация: 19-12-05
Из: Kiev
Пользователь №: 12 394



Цитата(PrSt @ Jan 10 2007, 17:32) *
Цитата(AlexBoy @ Jan 10 2007, 17:16) *

JTAGом пошагово пробежаться по этому куску, и все станет ясно. А так гадать можно очень долго.

JTAG спаяем (WIGGLER) - а каким инструментарием "пошагово пробежаться по этому куску"?
я не делат этого никогда, не знаю как...
в инете конечно посмотрю... но может уже есть правельное отканаттое решение?


Если в GCC то на сайте Macraigor подробно написано как отлаживаться через вигглер.
www.macraigor.com/gnu_faq.htm
Я пишу в RVDS 2.2 и отлаживаюсь встроенным отладчиком через H-JTAG.
Go to the top of the page
 
+Quote Post
PrSt
сообщение Jan 11 2007, 12:09
Сообщение #28


http://uschema.com
****

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



Цитата(aaarrr @ Jan 10 2007, 17:22) *
Посмотрел.
В функции AT91F_DataAbort() LR должен остаться целым.
Его можно попробовать вытащить через inline asm - это <адрес инструкции, вызвавшей Abort> + 0x08.


Вы были правы полностью: - вспоминается ваш пост:
Стоп! Причем здесь корректная работа памяти? С ней, скорее всего, все в порядке.
Data Abort возникает из-за некорректного обращения к памяти, а не по причине неисправности оной.

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

Подскажите пожалуста а как "можно попробовать вытащить через inline asm" ?
и узнать "<адрес инструкции, вызвавшей Abort>" ?


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


Гуру
******

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



Цитата(PrSt @ Jan 11 2007, 12:09) *
Подскажите пожалуста а как "можно попробовать вытащить через inline asm" ?
и узнать "<адрес инструкции, вызвавшей Abort>" ?

Не знаю, как в GCC, нужно посмотреть документацию
Для ADS/RVDS это будет выглядеть так:
Код
void AT91F_DataAbort()
{
    int i;
    AT91F_DBGU_Printk("-F- Data Abort detected\n\r");
    AT91F_DBGU_Printk("-F- LOOP... \n\r");
    // Abort Address Status Register (MC_AASR)
    // Abort Status Register (MC_ASR)
    //int *iii;
    //iii=(int *AT91C_MC_ASR);
    printf("\n --------- ASR --------->: %X \n\r", *AT91C_MC_ASR);
    //iii=(int *AT91C_MC_AASR);
    printf("\n --------- AASR --------->: %X \n\r", *AT91C_MC_AASR);

    __asm
    {
        mov    i, R14
    }
    printf("\n --------- Address --------->: %X \n\r", (i - 0x08));

    while (1);
}
Go to the top of the page
 
+Quote Post
PrSt
сообщение Jan 12 2007, 17:38
Сообщение #30


http://uschema.com
****

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



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


--------------------
Go to the top of the page
 
+Quote Post

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

 


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


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