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

Не загружаются программы из DataFlash в RM9200

Есть платка: 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 шине ни чего больше не висит.

 

Помогите пожалуйста разобраться, мозги уже кипят.

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


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

Проверь инициализацию 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 лампочка успешно загорается.

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


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

Назначение RomBoot Первичная инициализация, а имено инициализация SDRAM, и загрузка нормального загрузчика. Поэтому и ограничение на размер первичного загрузчика - не больше 12к.

А лучше тогда приложи полный листинг.

Что бы посмотреть код

Посмотри как сделано у Atmela.

Тут эта тема поднималась - поиши

Глюки и грабли обычно из-за неправильной инициализации SDRAM и частот

Изменено пользователем Зайцев Иван

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


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

Назначение 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).

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


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

...Не понятно зачем он так много запрашивает байт статуса (пункт 2).

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

 

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

 

Также судя по осциллогамам обращение к SDRAM не происходит на этапе загрузки из DataFlash (шина данных в Hi-Z, хотя шина адреса дергается, имхо так и должно быть).

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


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

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

http://ucrouter.ru/hardware.html#EVM9200

почему я ставлю на эти платочки, на странички download лежит прошивальщик и u-boot для платочки, в последовательной можно хранить образ RAM диска который несколько мегобайт. Ставится AT45DB321С либо AT45DB321BI либо AT45DB642

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


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

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

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

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

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

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

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

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

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

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