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

 
 
 
Reply to this topicStart new topic
> Не загружаются программы из DataFlash в RM9200, помогите пожалуйста
Alex2172
сообщение Aug 28 2008, 14:25
Сообщение #1


Местный
***

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



Есть платка: AT91RM9200 + AT45DB321

Проблема в том что, если в DataFlash лежит образ программы меньше 2.5-4 кБайт, то она успешно загружаентся из DataFlash. Если образ программы >4..5 кБайт (например RomBoot = 11кБайт), то программа загружается из DataFlash, но ей не передается управление (это видно потому что после загрузки программы из DataFlash все равно крутится внутрянняя программа из ROM и выдает СССС..., т.е. DBGU приглашает загрузить программу через XMODEM)

Например если в DataFlash сохранен RomBoot:
Осциллограф показывает что грузятся все 11 кБайт, т.е. 0x14 вектор (размер прорграммы и конфигурация DataFlash) считался правильно, но управление ромбуту не передалось.

Читая данные DataFlash (с помощью того же RomBoot например, но загруженного через XMODEM) - видно, что образ RomBoot'а в DataFlash - не поврежден (тупо сравнивал считанные из DataFlash данные и то что содержится в RomBoot.bin).


Если в DataFlash сохранить микропрограмку, которая просто зажигает лампочку и уходит в бесконечный цикл - такая програмка загружается из DataFlash. Но! Если к этой програмке в конец приписать 5-10 кБайт NOP-ов, то она загружается из DataFlash, но ей НЕ передается управление!!!!


Менял DataFlash было AT45DB321C, поставил AT45DB321B - не помогло.
На SPI шине ни чего больше не висит.

Помогите пожалуйста разобраться, мозги уже кипят.
Go to the top of the page
 
+Quote Post
Зайцев Иван
сообщение Aug 29 2008, 03:33
Сообщение #2


Частый гость
**

Группа: Участник
Сообщений: 92
Регистрация: 23-07-08
Из: Екатеринбург
Пользователь №: 39 153



Проверь инициализацию SDRAM
Go to the top of the page
 
+Quote Post
Alex2172
сообщение Aug 29 2008, 05:26
Сообщение #3


Местный
***

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



Цитата(Зайцев Иван @ Aug 29 2008, 07:33) *
Проверь инициализацию SDRAM


Не понял логики. Может упустил чего.
При старте процессора если BMS=1, пограмма в ROM пытается загрузить данные из DataFlash во внутреннюю SRAM. SDRAM не принимает в этом участие.

Происходит следующее (насколько я понимаю процесс):
1. После ресета программа из ROM (внутренний загрузчик) пытается несколько раз прочитать байт статуса DataFlash (этот процесс занимает примерно 10-30 мс).
2. После того как байт статуса успешно прочитан, начинается чтение последовательности байт из DataFlash, считываются первые 8 векторов, проверяется их валидность, интерпретируется размер образа и геометрия флэшки; если все в норме, то продолжает считывать весь образ из DataFlash в SRAM. Этот процесс длится примерно 0,75мкс*КолвоБайт.
3. После чтение происходит ремап и передача прыжок на нулевой адрес, должно начаться выполнение программы закачанной в SRAM.

Но этого не происходит если размер образа >2.5-4 кБайт, управление передается в DBGU (в терминал передается CCCC....).


Да, SDRAM используется при записи образа в DataFlash ромбутом, но ведь я успешно читаю образ из флэшки, образ не поврежден.
Если бы образ был поврежден, то либо первые 8 векторов были бы считаны не правильно (что не позволило бы загрузить данные из DataFlash), либо при передаче управления битой программе процессор вошел бы в клинч.

Я ведь упростил по макисмуму програмку.

B InitReset ; reset
undefvec
B InitReset ; Undefined Instruction
swivec
B InitReset ; Software Interrupt
pabtvec
B InitReset ; Prefetch Abort
dabtvec
B InitReset ; Data Abort
rsvdvec
B InitReset ; reserved
irqvec
B InitReset
fiqvec
B InitReset ; FIQ
InitReset

; зажигаем лампочку
mov r0,#0x80
mov r1,#0
STR r0,[r1,#-0xa00]
STR r0,[r1,#-0x9f0]
STR r0,[r1,#-0x9cc]
dloop
B dloop ; бесконечный цикл

B InitReset
B InitReset
B InitReset
B InitReset
B InitReset
B InitReset
B InitReset
B InitReset
B InitReset
B InitReset
B InitReset
...


Если дописать "B InitReset" в конец программы так, чтобы было более 2.5-4кБайт, то образ считывается полностью из флэшки, но лампочка не загорается, а управление передается DBGU, а не считанной в SRAM программе.
Если образ оставить <2.5кБ, то после загрузки из флэшки в SRAM лампочка успешно загорается.
Go to the top of the page
 
+Quote Post
Зайцев Иван
сообщение Aug 29 2008, 05:51
Сообщение #4


Частый гость
**

Группа: Участник
Сообщений: 92
Регистрация: 23-07-08
Из: Екатеринбург
Пользователь №: 39 153



Назначение RomBoot Первичная инициализация, а имено инициализация SDRAM, и загрузка нормального загрузчика. Поэтому и ограничение на размер первичного загрузчика - не больше 12к.
А лучше тогда приложи полный листинг.
Что бы посмотреть код
Посмотри как сделано у Atmela.
Тут эта тема поднималась - поиши
Глюки и грабли обычно из-за неправильной инициализации SDRAM и частот

Сообщение отредактировал Зайцев Иван - Aug 29 2008, 05:54
Go to the top of the page
 
+Quote Post
Alex2172
сообщение Aug 29 2008, 07:18
Сообщение #5


Местный
***

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



Цитата(Зайцев Иван @ Aug 29 2008, 09:51) *
Назначение RomBoot Первичная инициализация, а имено инициализация SDRAM, и загрузка нормального загрузчика. Поэтому и ограничение на размер первичного загрузчика - не больше 12к.
А лучше тогда приложи полный листинг.
Что бы посмотреть код
Посмотри как сделано у Atmela.
Тут эта тема поднималась - поиши
Глюки и грабли обычно из-за неправильной инициализации SDRAM и частот


Забудем на время про RomBoot.
Исходные данные: Есть AT91RM9200+AT45DB321, во флешке уже прошит образ микропрограмки (ассемблерный код приводил выше), которая просто зажигает светодиод.

Все. Ни чего больше не нужно для того чтобы загрузить из DataFlash в SRAM - ни SDRAM, ни RomBoot.

Про ограничение в 12 кБ я прекрасно помню. Странно то, что программка размером в 4 кБ уже не запускается (она нормально загружается из DataFlash, это видно по осцилографу, но ей не передается управление, а управление передается в DBGU). При этом точно такая же програмка, но без хвоста из "B InitReset" (размером например <2 кБайт) прекарсно загружается. Хвост может состоять из NOP-ов, это не важно. Важно то что если размер образа превышает 2,5-4 кБайт, то образ считывается но ему не передается управление. А если меньше 2.5 кБайт, то ему нормально передается управление.

Четкой границы (когда программа перестает загружаться) найти не удалось. При размере образа примерно 4 кБайт, получилась такая ситуевина, что программа то нормально запускается, то не запускается. Это видимо связано с тем что время считывания из Флэшки варируется незначительно (это видно по осциллографу). Т.е. во время загрузки из флэшки в SRAM происходит какое то событие (прерывание или таймаут таймера), после которого алгоритм загрузчика (тот что зашит в ROM) решает не передавать управление программе считанной в SRAM а перейти в DBGU.

Я очень прошу, посмотрите кто может - ткните осциллографом на чип-селект DataFlash на готовой отладочной плате: интересует сколько времени выполняется загрузка из флэшки, и сколько из этого времени тратится на определение готовности флэшки (когда сразу после старта проц. периодически запрашивает байт статуса). У меня это время занимает 10-30 мс, может быть это слишком много.
Спасибо


На шине SPI я вижу следующую картинку:
1. После ресета через 100 мс проц. кидает клоки на 40 байтовых интервалов (видимо чтение первых 8 векторов)
2. В течение 20 мс с периодом 10 мкс проц кидает клоки на 2 байтовых интервала (видимо запрос байта статуса)
3. В течение 0,75мкс*РазмерОбраза проц кидает клоки для чтения образа из DataFlash

...Не понятно зачем он так много запрашивает байт статуса (пункт 2).
Go to the top of the page
 
+Quote Post
Alex2172
сообщение Aug 29 2008, 11:12
Сообщение #6


Местный
***

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



Цитата(Alex2172 @ Aug 29 2008, 11:18) *
...Не понятно зачем он так много запрашивает байт статуса (пункт 2).

Судя по осциллограмам флешка в ответ на запрос статуса возращает b10110100, что означает готовность флешки, кристал AT45DB321, защиты нет. Не понятно зачем 2000 раз переспрашивать статус, если статус говорит о готовности флешки.

Может быть RM9200 на самом деле не умеет работать с флешкми типа AT45DB321, вроде на отладочных платах не ставят AT45DB321, хотя и заявлена возможность работы с AT45DB321.

Также судя по осциллогамам обращение к SDRAM не происходит на этапе загрузки из DataFlash (шина данных в Hi-Z, хотя шина адреса дергается, имхо так и должно быть).
Go to the top of the page
 
+Quote Post
dch
сообщение Aug 30 2008, 14:28
Сообщение #7


Профессионал
*****

Группа: Участник
Сообщений: 1 179
Регистрация: 15-09-04
Из: 141070 г. Королев МО, улица Горького 39-121
Пользователь №: 661



Цитата(Alex2172 @ Aug 29 2008, 15:12) *
Может быть RM9200 на самом деле не умеет работать с флешкми типа AT45DB321, вроде на отладочных платах не ставят AT45DB321

http://ucrouter.ru/hardware.html#EVM9200
почему я ставлю на эти платочки, на странички download лежит прошивальщик и u-boot для платочки, в последовательной можно хранить образ RAM диска который несколько мегобайт. Ставится AT45DB321С либо AT45DB321BI либо AT45DB642
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


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


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