Alex2172 0 28 августа, 2008 Опубликовано 28 августа, 2008 · Жалоба Есть платка: 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 шине ни чего больше не висит. Помогите пожалуйста разобраться, мозги уже кипят. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Хомяк 0 29 августа, 2008 Опубликовано 29 августа, 2008 · Жалоба Проверь инициализацию SDRAM Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alex2172 0 29 августа, 2008 Опубликовано 29 августа, 2008 · Жалоба Проверь инициализацию 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 лампочка успешно загорается. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Хомяк 0 29 августа, 2008 Опубликовано 29 августа, 2008 (изменено) · Жалоба Назначение RomBoot Первичная инициализация, а имено инициализация SDRAM, и загрузка нормального загрузчика. Поэтому и ограничение на размер первичного загрузчика - не больше 12к. А лучше тогда приложи полный листинг. Что бы посмотреть код Посмотри как сделано у Atmela. Тут эта тема поднималась - поиши Глюки и грабли обычно из-за неправильной инициализации SDRAM и частот Изменено 29 августа, 2008 пользователем Зайцев Иван Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alex2172 0 29 августа, 2008 Опубликовано 29 августа, 2008 · Жалоба Назначение 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). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alex2172 0 29 августа, 2008 Опубликовано 29 августа, 2008 · Жалоба ...Не понятно зачем он так много запрашивает байт статуса (пункт 2). Судя по осциллограмам флешка в ответ на запрос статуса возращает b10110100, что означает готовность флешки, кристал AT45DB321, защиты нет. Не понятно зачем 2000 раз переспрашивать статус, если статус говорит о готовности флешки. Может быть RM9200 на самом деле не умеет работать с флешкми типа AT45DB321, вроде на отладочных платах не ставят AT45DB321, хотя и заявлена возможность работы с AT45DB321. Также судя по осциллогамам обращение к SDRAM не происходит на этапе загрузки из DataFlash (шина данных в Hi-Z, хотя шина адреса дергается, имхо так и должно быть). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dch 0 30 августа, 2008 Опубликовано 30 августа, 2008 · Жалоба Может быть RM9200 на самом деле не умеет работать с флешкми типа AT45DB321, вроде на отладочных платах не ставят AT45DB321 http://ucrouter.ru/hardware.html#EVM9200 почему я ставлю на эти платочки, на странички download лежит прошивальщик и u-boot для платочки, в последовательной можно хранить образ RAM диска который несколько мегобайт. Ставится AT45DB321С либо AT45DB321BI либо AT45DB642 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться