Вход

Регистрация
Главная
 

 

Пиротехнические пульты, пиротехническое оборудование
и пиротехника
Pyro Alex RF 48
Open Pyro SFX 8 D
Open Pyro SFX 10/120
Pyro Man 200 M
Spets 150
Приём заказов на изготовление пиротехнических пультов
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 11
Пиропульты - Электроника Форум » Электроника » Микроконтроллеры и ПЛИС » О заливке bootloaderа в Atmegu8
О заливке bootloaderа в Atmegu8
alexval2007Дата: Воскресенье, 07.11.2010, 17:18 | Сообщение # 1
Электро воспламенитель
Группа: Администраторы
Сообщений: 662
Награды: 7
Репутация: 7
Статус: Offline
О заливке ботлайдера в Atmegu8

Все необходимые файлы в низу статьи в прикреплении.

Чтобы правильно записать ботлайдер в микроконтроллер необходимо его настроить для этого в этом нам помогут специальные биты конфигурации.
В памяти Atmega есть ячейки отвечающие за параметры конфигурации всего МК — FUSE-биты.
О FUSE-битах, можно почитать на easyelectronics.ru.
FUSE-биты Atmega8 расположены в два байта – старший FUSE-байт (high _fuses) и младший FUSE-байт ( low_fuses), у Atmega168 есть ещё и дополнительный FUSE-байт(extended_fuses)
Прошиваютьса они специальными командами по 3 байта каждая+1байт данных (“куда писать”+”что писать”) т.е. вероятность, что помеха совпадёт именно с одной из них невелика, однако при прошивке ненадёжным программатором (или в условиях сильных помех) непосредственно FUSE-битов, вероятность попадания в них хлама существенно возрастает (мы сами подаём команду на запись FUSE и если она каким-то чудом прорвалась сквозь наводки то данные испортить проще (они могут быть произвольными) и МК с радостью примет шум эфира

Наиболее неприятные FUSE:
Ячейка RSTDISBL
при записи в неё “0” превращает вывод RESET в обычную ногу и
прошить МК по SPI будет уже невозможно (вначале программирования необходимо “прижать к земле” RESET – подать “0”)

Ячейка SPIEN
при записи в неё “1” запрещено программирование по SPI. Пишут что при
программировании по последовательному каналу данная ячейка недоступна, так что нам вроде не грозит, однако проверять не хочется

Ячейки CKOPT и CKSEL
отвечают за тактирование МК и могут встать в такую позу, что
контроллер будет ждать внешнего тактового сигнала или не сможет раскачать ваш кварц.

Первое и второе лечится только параллельным программатором (может и JTAG поможет)
Второе лечится “тактированием от пальца” (мне пару раз помогло). Тыкаете в XTAL1 (у атмеги8 — 9 нога) иголкой (или отвёрткой не изолированной ) и шьёте как обычно — через SPI может не с первого раза получится можно, конечно использовать внешний генератор, но это если он есть. Неприятности возможно получиться излечить простой (через SPI) пере прошивкой.

Процесс прошивки bootloadera состоит из четырёх этапов:
Разблокирование секции загрузчика вообще-то, по умолчанию, вся память atmega и так
доступна для чтения/записи.

Установка FUSE-битов — настраивает МК на работу в arduino.
Прошивка собственно bootloadera
Запись LOCK-битов, защищающих секцию загрузчика от самостоятельной перезаписи (в общем случае bootloader может модифицировать или вообще сносить сам себя)
Настройки процесса прошивки bootloadera и значения FUSE- и LOCK-битов можно просмотреть в arduino-0015\hardware\boards.txt в соотвествующей нашему МК секции (atmega8.bootloader)
atmega8.bootloader.programmer (по умолчанию: stk500) протокол используемый bootloader-ом.
atmega8.bootloader.path(по умолчанию: atmega8 ) путь где файл bootloadera лежит
atmega8.bootloader.file(по умолчанию: ATmegaBOOT.hex) собственно, сам bootloader

Теперь самое интересное:
atmega8.bootloader.unlock_bits (по умолчанию: 0x3F) значение записываемое в лок-байт для разблокирования секции бутлодера. Сбрасывает все лок-биты в 1 т.е. разрешаем любые изменения секции прикладной программы и бутлаодера.
atmega8.bootloader.high_fuses (по умолчанию: 0xCA) значение записываемое в старший фьюз-байт.
atmega8.bootloader.low_fuses (по умолчанию: 0xDF) значение записываемое в младший фьюз-байт
atmega8.bootloader.lock_bits (по умолчанию:0x0F) значение записываемое в лок-байт для блокирования секции бутлодера — запрещается запись/чтение секци бутлоадера (программатором конечно можно, но ни агрессивный скетч ни суицидально настроенный бутлоадер не смогут
Рассмотрим что же именно пишется во фьюз-биты МК:

Atmega8
Младший фьюз-байт
BODLEVEL 1 порог срабатывания схемы BOD 2.7В
BODEN 1 но BOD у нас запрещён=)
SUT1 0 эта пара определяет длительность задержки сигнала RESET после включения
SUT0 1 питания - 16тыс тактов (при 16МГц кварце это 1с)
CKSEL3 1 эти фьюзы
CKSEL2 1 определяют тип
CKSEL1 1 тактирования
CKSEL0 1 – кварцевый резонатор >1МГц

Старший фьюз-байт
RSTDISBL 1 ножка RESET – резет
WDTON 1 таймер вочдог – запускается программно
SPIEN 0 шить через ISP можно
CKOPT 0 совместно с CKSEL3...0 определяет что усилитель тактового сигнала включен
EESAVE 1 команда “стереть кристалл” стирает также EEPROM
BOOTSZ1 0 размер секции
BOOTSZ0 1 загрузчика 512байт
BOOTRST 0 вектор начального сброса находится в начале секции загрузчика -
МК при включении питания первым делом запустит бутлоадер

Atmega168
Старший фьюз-байт
RSTDISBL 1 ножка RESET – резет
DWEN 1 работа отладчного интерфейса DebugWire запрещена
SPIEN 0 шить через ISP можно
WDTON 1 таймер вочдог – запускается программно
EESAVE 1 команда “стереть кристалл” стирает также EEPROM
BODLEVEL2 1 порог срабатывания
BODLEVEL1 0 схемы BOD
BODLEVEL0 1 = 2,7В

Младший фьюз-байт
CKDIV8 1 делитель тактового сигнала выключен
CKOUT 1 Выходной буфер системного тактового сигнала отключен от вывода МК
SUT1 1 эта пара определяет длительность задержки сигнала RESET после вкл.питания
SUT0 1 - 16тыс тактов+14тактов +65мс (при 16МГц кварце это немного больше 1с)
CKSEL3 1 эти фьюзы
CKSEL2 1 определяют тип
CKSEL1 1 тактирования
CKSEL0 1 - кварцевый резонатор >8МГц

Дополнительный фьюз-байт
BOOTSZ1 0 1024байта размер
BOOTSZ0 0 секции бутлоадера
BOOTRST 0 вектор начального сброса находится в начале секции загрузчика - МК при
включении питания первым делом запустит бутлоадер

Мои FUSE биты для атмеги 8 скрины из авр студио
Сначала выставляем эти биты потом заливаем ботлайдер

потом закрываем ботлайдер в памяти фьюзами защиты от греха

Программаторы для микроконтроллеров Atmel

Прикрепления: ATmega8_BOOT.zip(7Kb)
 
Пиропульты - Электроника Форум » Электроника » Микроконтроллеры и ПЛИС » О заливке bootloaderа в Atmegu8
Страница 1 из 11
Поиск:


Rambler's Top100 Пиротехника, салюты, фейерверки. Яндекс цитирования
www.alexval2007.ucoz.ru © 2008