forever failure
Dec 18 2005, 11:51
Имеется дивайс с сабжевым контроллером и флэшкой AM29LV29160DB и требуется это всё
запрограммировать, т. е. залить во флэш прогу.
Пробую заливать во время отладки в MULTI 2000 v 3.6.1 через OCD Wiggler,
в результате чего получаю:
Connected to target `Generic-ARM ARM 7tm with Macraigor OCD Connection (ocdserv) for ARM'.
Initializing `C:\GHS\arm361\ocdserv -cpu arm7t -port LPT1 -checks -fix -setup D:\Trash\Projects\ARM\src\ocdserv_standard.dbs -little'.
Target cpu: ARM
Downloading program text and data. Please Wait...
ocdserv: A remote target memory check failed in the .text program segment.
ocdserv: This is usually caused by failure to set the board up properly, but can
ocdserv: also be caused by a bad link map or by a program that is bigger than
ocdserv: available board memory. Make sure the board setup procedure completed
ocdserv: without errors, as this is the most common cause of this problem.
Download failed, error during write 0x2008000 - 0x2008fff
debug server: download of "D:\Trash\Projects\ARM\hello" failed
Couldn't load program.
По осциллографу видно, что сигналы на JTAGе есть, но на шине данных и шине адреса самого
контроллера - молчок. Сразу после включения видно, что контроллер обращается к флэшке
и перебирает адреса, после команды "connect" этот пербор останавливается, но запись на флэшку почему-то не идёт.
Где могут быть грабли? (конешно есть ненулевая вероятность, что как-то контороллер сдох,
однако хотелось бы попробовать сперва все возможные средства отладки и диагностики).
aaarrr
Dec 18 2005, 18:06
У AT91R40008 после ресета, и до ремапа по адресу 0x2008000 памяти быть не может, а внутреннее
ОЗУ расположено по адресу 0x00300000. Так что отладчик вполне справедливо советует проверить
карту памяти...
forever failure
Jan 17 2006, 17:12
Это помогло. Т. е. установка адреса памяти в memory.ld в значение 0x00300000 позволяет
скомпилить образ, который заливается и отлаживается. Но, тут опять проблема: не получается
сделать ремап, чтобы получить доступ к внешним устройствам. После ремапа отладчик перескакивает
в пампасы, где приложение уже не отлаживается.
В проекте был cstartup.s, в котором делается ремап, пока его не выкинул из проекта, ничо ладом не удавалось посмотреть.
Как во время отладки делать ремап ?
aaarrr
Jan 17 2006, 18:27
А зачем во время отладки? Wiggler нужен только для заливки загрузчика в РАМ, а дальше
отпускаем процессор в свободный полет.
forever failure
Jan 18 2006, 16:10
А как получить доступ к внешним дивайсам во время отладки ? Для этого нужен ремап, или я не правильно понимаю ? При обращении к адресу, допустим 0x08000000 или 0x04000000 отлачик опять же выкидывает
приложение в какие-то дебри, вместо того, что бы прочитать какое-то значение. Чо может быть не так в этом случае?
aaarrr
Jan 18 2006, 18:01
Цитата
При обращении к адресу, допустим 0x08000000 или 0x04000000 отлачик опять же выкидывает
приложение в какие-то дебри, вместо того, что бы прочитать какое-то значение.
Выбрасывает, наверное, не в "какие-то дебри", а в Data Abort. Для обращения к отличным
от нулевого CS'ам нужно сделать remap и правильно указать адреса и размеры областей
памяти. А вот как заставить multi понимать remap - отдельная тема...
forever failure
Jan 19 2006, 04:14
Вот я и спрашиваю про эту тему. Как ? Пока курю доку, какая есть, самостоятельно, но пока безуспешно.
Есть какие нить ещё ссылки про то как можно MULTI заставить понимать ремап ?
С флэшом тоже пока что не получилось, но сперва хотелось бы разделаться с ремапом.
Расскажите по подробней о девайсе. Я подозреваю, что уже имел с ним дело.
К какому внешнему устройству вы бы хотели обратиться?
Используете ли вы при запуске ocdserv инициаллизационный скрипт (target setup script наз-ся в меню сonnection editor)?
Дело в том, что перед тем как начать отлаживать прогшрамму из ОЗУ, необходимо проинициализировать шину для нее. Аналогичная ситуация и с другими устройствами на шине.
Для этого пишите target setup script:
Его примерный вид таков
-----------------------------------------------
halt
#Иниц-ия EBI_CSR0 CS0 - Флешка
memwrite long 0xffe00000 0x01002425
# EBI_CSR3 внешнее ОЗУ
memwrite long 0xffe0000C 0x060032a5 //ext RAM 16bit 2ws 1TDF 4Mbyte
...
# REMAP Done
memwrite long 0xffe00020 0x00000001
#write protect off
memwrite long 0xfff0000c 0x00000001
run
sleep 1
halt
delay fast
-----------------------------------------------
Подключается этот скрипт с помощью connection editor
или просто в строку параметров для ocdserver добавляется параметр
-s путь_к_файлу_скрипта или
-setup путь_к_файлу_скрипта
в зависимости от версии MULTI
forever failure
Jan 19 2006, 15:24
Инициализационный скрипт - это, похоже, то что и требовалось. Сейчас отлаживается после ремапа,
но по прежнему при обращении по адресу внешнего устройства выкидывает в data abort prefetch
(т. е. адрес вектора обработчика - 0x10). На всякий случай даю тренировочный код,
может кто подскажет где ошибка или что неправильно инициализируется.
/* hello.c */
#include "parts/r40008/r40008.h"
#include "periph/special_function/sf.h"
static void init (void);
static void main_loop (void);
int main (void)
{
init ();
main_loop ();
return 0;
}
static void init (void)
{
int i;
for (i = 1;i < 8;i++)
EBI_BASE->EBI_CSR[i] = EBI_DBW_16 | EBI_NWS_1 | EBI_PAGES_1M | EBI_TDF_0 | EBI_CSEN;
EBI_BASE->EBI_MCR = EBI_ALE_1M | EBI_DRP_STANDARD;
}
static void main_loop (void)
{
register short int t;
const signed short int volatile * addr = (const signed short int volatile *) (0x08000000);
const signed short int volatile * const b = addr, * const e = addr + 15;
for (;;)
{
t = *addr++; /* <- здесь возникает эксепшн */
if (addr > e) addr = b;
if (t == 0x5a5a5a5a) break;
}
for (;;);
}
ЗЫ. Дивайс - одноплатный универсальный компьютер TEC32 произодства Тритона. На борту сетевуха,
часы, компакт флэш, CAN, флэшка программная 1 м и шина расширения PC-104.
aaarrr
Jan 19 2006, 17:56
Во все регистры EBI_CSRx прописан 0 в качестве базового адреса (поле BA регистра).
forever failure
Jan 19 2006, 18:37
Цитата(aaarrr @ Jan 19 2006, 22:56)

Во все регистры EBI_CSRx прописан 0 в качестве базового адреса (поле BA регистра).
Ага. Спасибо, товарищ !
Вообще уже начинает появлятся ощущение смутного понимания смысла всех действий,
куда какой бит поставить, чтоб заработало. Но, опять же смутно чувствую, что это ещё не последний мой вопрос по этой теме. А доку всё таки внимательнее надо курить.
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.