Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Алгоритм работы флешь лоадера
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > ARM, 32bit
Alexashka
Здравствуйте.
Ситуация такая. Есть плата с процессором AT91SAM9G45, на плате имеется DDRAM и nand флешь. Загружаю в nand флешь проект bootstrap, потом свое приложение (загружаю через JTAG, среда IAR 6.30). Задача бутстрапа - скопировать мое приложение из флеши в DDRAM. Сразу первый вопрос который возникает- почему мое приложение не перезатирает бутстрап? Возможно флешь лоадер както определяет что это бутстрап и не затирает его? Смотрел файлы проекта флешь лоадера - функции Main нету, resetHandler не нашел, как и откуда оно стартует и по какому алгоритму работает так и не понял.

Проект бутстрапа тоже странно себя ведет -запускаю его в отладчике -пишет флешь не идентифицирована, проверял на ногах микрухи -сигналы есть (ALE,CLE,CS) но выдает она одни FF. Ежели закрыть отладчик и перестартануть проц, то все нормально работает -флешка определяется и пытается грузить приложение.

Но все бы ничего, да выходит какаято ерунда с моим приложением. Когда я его запускаю из-под отладчика в DDR памяти -то оно работает отлично. А если выхожу из отладки и перезапускаю проц, то приложение (при этом оно загружается бутстрапом) виснет спустя какоето время -т.е несколько трейс-логов от него успевают прийти -проходит инициализация периферии, выполняются некоторые действия с SD-картой и потом -тишина. При этом вижу что прерывания продолжают обрабатываться. Это возможно если проц вылетел в аборт?
Как бы выяснить что произошло с программой? Я обычно отлаживаюсь через JTAG, а тут работает только СОМ-порт, поэтому даже не знаю куда ткнуться. Как вы обычно поступаете в такой ситуации? Можно ли както заставить работать отладчик в этой загруженно бутстрапом программе?

И еще, когда в IARe (на флешь уже записан бутстрап) запускаю отладку в DDRAM c загрузкой приложения во флешь (стоит галка "использовать флешь лоадер") то вижу что DDRAM пустая -т.е ни бутстрап, ни IARовский CSPY ничего не загрузили в DDRAM, однако переход на начало DDRAM происходит, но прога ессно вылетает в аборт почти сразу. Если галку не ставлю, то начинается отладка в DDRAM и все нормально работает.
Мое предположение такое: ИАР заливает в СРАМ флешь лоадер который запускается, грузит во флешь приложение и делает переход на адрес DDRAM, которая оказывается пустая, т.к бутстрап в нее ничего не залил, т.к он не был запущен (ресета не было и ROM-овский загрузчик не был активирован). Тоже самое видимо происходит и при попытке запустить отладку бутстрапного проекта -он грузится во флешь и делает переход на адрес СРАМ, которая опять же оказывается пустая, так как ROM-овский загрузчик не был вызван (опять же, не было ресета). Я правильно мыслю?
Получается установка галки "испльзовать флешь лоадер" в ИАРе отменяет загрузку приложения в ОЗУ ? blink.gif
Alexashka
Цитата(Alexashka @ Aug 25 2012, 23:47) *
Проект бутстрапа тоже странно себя ведет -запускаю его в отладчике -пишет флешь не идентифицирована, проверял на ногах микрухи -сигналы есть (ALE,CLE,CS) но выдает она одни FF. Ежели закрыть отладчик и перестартануть проц, то все нормально работает -флешка определяется и пытается грузить приложение.

Но все бы ничего, да выходит какаято ерунда с моим приложением. Когда я его запускаю из-под отладчика в DDR памяти -то оно работает отлично. А если выхожу из отладки и перезапускаю проц, то приложение (при этом оно загружается бутстрапом) виснет спустя какоето время -т.е несколько трейс-логов от него успевают прийти -проходит инициализация периферии, выполняются некоторые действия с SD-картой и потом -тишина. При этом вижу что прерывания продолжают обрабатываться. Это возможно если проц вылетел в аборт?

Мое предположение такое: ИАР заливает в СРАМ флешь лоадер который запускается, грузит во флешь приложение и делает переход на адрес DDRAM, которая оказывается пустая, т.к бутстрап в нее ничего не залил, т.к он не был запущен (ресета не было и ROM-овский загрузчик не был активирован). Тоже самое видимо происходит и при попытке запустить отладку бутстрапного проекта -он грузится во флешь и делает переход на адрес СРАМ, которая опять же оказывается пустая, так как ROM-овский загрузчик не был вызван (опять же, не было ресета). Я правильно мыслю?
Получается установка галки "испльзовать флешь лоадер" в ИАРе отменяет загрузку приложения в ОЗУ ? blink.gif


Разобрался! Вообщем отвечаю сам себе (а может кому-то пригодится). Последние 2 предположения мои оказались верными. Это собственно натолкнуло на мысль, почему не работает проект бутстрапа если запускать под отладчиком. Да, при старте отладчика с установкой галки "заливать во флешь" в ОЗУ ничего не льется, но там ведь были коды, я их видел! И программа не улетала в аборт, а нормально проходило от начала и до конца rolleyes.gif
Вообщем что я сделал: полностью стер флешь-память программ, залил с помощью ИАР в нее проект бутстрапа - и при первом запуске прога благополучно вылетела в аборт сразу же! А при повторном запуске отладки -вроде как работает, но както криво sm.gif
Короче что происходит: при рестарте проца (перед вторым запуском отладчика) РОМ-загрузчик копирует бутстрап в ОЗУ, после чего я запускаю отладчик и вижу остатки этого кода. При чем код по всей видимости остается незатронутым, а вот данные оказываются испорченными, поэтому прога и работает непойми как.

Со своим приложением тоже разобрался. Две секции, которые я объявил в файле линкера icf, флешь лоадер посчитал ненужными и не стал заливать, посему в программе образовалась брешь в несколько сот байтов, на которой она дойдя благополучно зависала. Вообщем я смог убедить флешь лоадер грузить-таки мои секции и теперь все замечательно работает sm.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2024 Invision Power Services, Inc.