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

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

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

 

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

 

Может у вас генератор не стартует? Попробуйте держать кнопку ресет пару секунд при включении платы.

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


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

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

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

а именно с работой с памятью...

Стоп! Причем здесь корректная работа памяти? С ней, скорее всего, все в порядке.

Data Abort возникает из-за некорректного обращения к памяти, а не по причине неисправности оной.

У AT91RM9200 есть MC Abort Status Register и MC Abort Address Register - выведите их значения printf'ом в DataAbort(), и станет ясно, где происходит глюк.

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


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

Стоп! Причем здесь корректная работа памяти? С ней, скорее всего, все в порядке.

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;

}

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

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


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

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

 

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

 

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

следовательно - ерунда какаято......

кто-нибудь что-нибудь может дельное посоветовать?

крыша едет...

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


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

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

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

 

кто-нибудь что-нибудь может дельное посоветовать?

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

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


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

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

 

Для начала следует выяснить, где именно вызывается исключение.

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

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

и что за LR_abt?

 

я так понимаю если схема правильная, то и romboot должен корректно вести себя и работать, ведь у людей же работает он....

вот тот romboot который я пытаюсь загрузить...

http://heavy-online.ru/arm-linux/files/pac...oot-evm9200.tgz

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


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

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

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

 

и что за LR_abt?

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

 

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

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


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

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

 

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

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


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

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

 

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

 

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

следовательно - ерунда какаято......

кто-нибудь что-нибудь может дельное посоветовать?

крыша едет...

 

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

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


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

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

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

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

 

оброботчик есть в файле cstartup.S

Это не обработчик, а установка стека режима Abort.

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


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

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

JTAG спаяем (WIGGLER) - а каким инструментарием "пошагово пробежаться по этому куску"?

я не делат этого никогда, не знаю как...

в инете конечно посмотрю... но может уже есть правельное отканаттое решение?

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


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

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

JTAG спаяем (WIGGLER) - а каким инструментарием "пошагово пробежаться по этому куску"?

я не делат этого никогда, не знаю как...

в инете конечно посмотрю... но может уже есть правельное отканаттое решение?

 

Если в GCC то на сайте Macraigor подробно написано как отлаживаться через вигглер.

www.macraigor.com/gnu_faq.htm

Я пишу в RVDS 2.2 и отлаживаюсь встроенным отладчиком через H-JTAG.

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


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

Посмотрел.

В функции AT91F_DataAbort() LR должен остаться целым.

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

 

Вы были правы полностью: - вспоминается ваш пост:

Стоп! Причем здесь корректная работа памяти? С ней, скорее всего, все в порядке.

Data Abort возникает из-за некорректного обращения к памяти, а не по причине неисправности оной.

с ней таки действительно все в порядке...

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

 

Подскажите пожалуста а как "можно попробовать вытащить через inline asm" ?

и узнать "<адрес инструкции, вызвавшей Abort>" ?

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


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

Подскажите пожалуста а как "можно попробовать вытащить через 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);
}

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


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

Честно говоря, как это сделать на GCC я так и не понял

пытался это делать читая - http://www.ethernut.de/en/documents/arm-inline-asm.html

и все одно не получается

я не могу понять как ввставить такое, как асм вставку...

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


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

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

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

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

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

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

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

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

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

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