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

Проблемма с bootloaderom в ATMega1280

Зашил бутлоадер в атмегу. По RS-232 передал прогу, она нормально прошилась (читал програматором AVReal), после чего несмотря на установленный фьюз BOOTRST=0 контроллер запускается с 0-го адреса :(

Изменено пользователем SergeyA100

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


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

Зашил бутлоадер в атмегу. По RS-232 передал прогу, она нормально прошилась (читал програматором AVReal), после чего несмотря на установленный фьюз BOOTRST=0 контроллер запускается с 0-го адреса :(

Что значит запускается с 0-го адреса?

Вы под отладчиком смотрели с какого адреса он запускается?

Вполне возможно что в бутлоадере стоит джамп на 0-й адрес.

Посмотрите логику работы бутлоадера.

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


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

Компилирую бутлоадер. Прошиваю его АВРиалом. Прошло. Работает. Читаю из меги в файл. Сохраняю.

При старте лоадера конфигурирую порты F и К как выходы, зажигаю все диоды подключенные к меге.

При ресете стартует с бутлоадера. Вроде все ОК. После чего по RS-232 заливаю тестовую прогу. Суть ее в том что бы

зажечь тоько диоды на порту К. После чего по ресету переход идет на тестовую прогу, по сбросу питания то же. Читаю

из меги в файл. Сравниваю - отличий в секции бутлоадера нет. По адресу 1F800 ( размер загрузчика 1 кСлово)

команда перехода на начало бутлоадера.

 

BOOTSZ = 2;

BOOTRST = 0

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


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

В чем заключается проблема?

Без кода бутлоадера мне тяжело понять логику его работы.

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


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

Проект в IARе, после того как лоадер успешно прошил атмегу, после сброса запускуается не лоадер а прошитая программа

 

bootloader.rar

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


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

Проект в IARе, после того как лоадер успешно прошил атмегу, после сброса запускуается не лоадер а прошитая программа

Посмотрел код лоадера.

Действительно лоадер должен висеть на строке:

Numb_Byte = read_mesage();            // ждем приема посылки

если только вы в это время не отсылаете ему команду:

      }else if (Buffer[1] == 0xFF ){        // если пришла команда конец файла
                 break;                    // вылетаем из цикла

 

Я бы посмотрел на то, не пересылаете ли вы что-либо лоадеру уже после загрузки приложения и на то что переменная Buffer не инициализирована, в ней может содержаться мусор.

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


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

Погонял в AVRStudio - если шъеш первую страницу - то адрес в команде перехода по вектору прерывания bootrst меняется на 0000 - почему - не понимаю я ту область памяти вообще не трогаю

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


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

Погонял в AVRStudio - если шъеш первую страницу - то адрес в команде перехода по вектору прерывания bootrst меняется на 0000 - почему - не понимаю я ту область памяти вообще не трогаю

Посмотрите чтобы в AVRStudio была правильно указана область памяти .text (начальный адрес должен быть началом области загрузчика)

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


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

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

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

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

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

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

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

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

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

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