Что такое фьюзы в микроконтроллерах AVR. Как настраиваются фьюзы. Какие основные фьюзы есть в AVR. Как правильно программировать фьюзы. Какие опасности есть при неправильной настройке фьюзов.
Что такое фьюзы в микроконтроллерах AVR
Фьюзы (fuses) в микроконтроллерах AVR — это специальные байты конфигурации, которые определяют базовые настройки работы микроконтроллера. Они хранятся в энергонезависимой памяти и программируются с помощью программатора.
Основные характеристики фьюзов AVR:
- Определяют настройки тактирования, сброса, защиты памяти и другие базовые параметры
- Программируются отдельно от основной программы микроконтроллера
- Хранятся в энергонезависимой памяти и сохраняют значения после отключения питания
- Неправильная настройка фьюзов может привести к неработоспособности микроконтроллера
Основные фьюзы микроконтроллеров AVR
В микроконтроллерах AVR обычно используется несколько байтов фьюзов:
- Low Fuse — младший байт фьюзов
- Extended Fuse — расширенный байт фьюзов (есть не во всех МК)
Какие настройки определяют основные фьюзы AVR:
Low Fuse
- CKSEL[3:0] — выбор источника тактирования
- SUT[1:0] — время запуска после сброса
- CKOUT — вывод тактового сигнала на внешний вывод
- CKDIV8 — деление тактовой частоты на 8
High Fuse
- BOOTRST — вектор сброса (bootloader/application)
- BOOTSZ[1:0] — размер секции bootloader
- EESAVE — сохранение EEPROM при стирании чипа
- WDTON — включение watchdog таймера
- SPIEN — разрешение SPI программирования
- DWEN — разрешение отладки по DebugWire
- RSTDISBL — отключение вывода RESET
Как программировать фьюзы AVR
Программирование фьюзов AVR выполняется с помощью программатора. Основные этапы:
- Подключить программатор к микроконтроллеру
- Запустить программу для прошивки (например, AVRDUDE)
- Выбрать нужные значения фьюзов
- Выполнить запись фьюзов командой программатора
- Проверить корректность записи
Пример команды для записи фьюзов с помощью AVRDUDE:
avrdude -c usbasp -p m328p -U lfuse:w:0xFF:m -U hfuse:w:0xDE:m -U efuse:w:0xFD:m
Опасности при программировании фьюзов
Неправильная настройка фьюзов может привести к серьезным проблемам. Какие основные опасности существуют:
- Отключение возможности программирования по SPI
- Настройка неправильной тактовой частоты
- Отключение вывода RESET
- Включение защиты от чтения/записи памяти программ
Чтобы избежать проблем, нужно быть предельно внимательным при программировании фьюзов и всегда иметь возможность восстановить работоспособность с помощью высоковольтного программирования.
Важные фьюзы для настройки тактирования AVR
Правильная настройка тактирования критически важна для работы микроконтроллера. Какие фьюзы отвечают за тактирование AVR:
- CKSEL[3:0] — выбор источника тактового сигнала
- CKOPT — опции тактирования
- SUT[1:0] — время запуска после сброса
- CKDIV8 — предделитель тактовой частоты
Типичные варианты настройки тактирования:
- Внутренний RC-генератор 8 МГц
- Внешний кварцевый резонатор
- Внешний тактовый сигнал
При выборе настроек важно учитывать требования к стабильности и точности частоты для конкретного применения.
Фьюзы для настройки загрузчика (bootloader)
Для работы с загрузчиком важны следующие фьюзы AVR:
- BOOTRST — вектор сброса (bootloader/application)
- BOOTSZ[1:0] — размер секции bootloader
Как правильно настроить фьюзы для работы с загрузчиком:
- Установить BOOTRST в 0 для запуска с адреса загрузчика
- Выбрать нужный размер секции загрузчика с помощью BOOTSZ
- Записать загрузчик в выделенную область памяти программ
- Настроить остальные фьюзы в соответствии с требованиями загрузчика
Правильная настройка позволит загружать основную программу через загрузчик, например по UART.
Фьюзы для защиты памяти AVR
В микроконтроллерах AVR есть возможность защитить память от чтения и записи. За это отвечают следующие биты:
- LB — Lock Bits для защиты памяти программ
- BLB — Boot Lock Bits для защиты загрузчика
Основные варианты защиты:
- Запрет чтения памяти программ
- Запрет записи в память программ
- Запрет модификации загрузчика
Настройка защиты может быть полезна для предотвращения копирования прошивки, но нужно быть осторожным — при неправильной настройке можно полностью заблокировать доступ к микроконтроллеру.
Восстановление микроконтроллера после неправильной настройки фьюзов
Если в результате неправильной настройки фьюзов микроконтроллер перестал отвечать на программирование, есть несколько способов восстановления:
- Высоковольтное программирование — подача 12В на вывод RESET
- Использование программатора с поддержкой высоковольтного режима
- Тактирование от внешнего генератора для восстановления работы МК
Важно помнить, что не все способы подходят для всех моделей микроконтроллеров. Перед восстановлением нужно внимательно изучить документацию.
После восстановления работоспособности необходимо правильно настроить фьюзы и проверить работу микроконтроллера, прежде чем продолжать разработку.
Фьюз — Бомбический эксперт по взрывчатке — персонажи Apex Legends™ — ЕА
Фьюз — Бомбический эксперт по взрывчатке — персонажи Apex Legends™ — ЕА Главная Об игре Apex Legends Легенды Карты Вопросы и ответы Системные требования для ПК Создатели Специальные возможности Издание чемпиона Арены Королевская битва Сезон Боевой пропуск Последние новости Обновления игры Новые медиафайлы Подпишитесь на новости Twitter Instagram Facebook YouTube Twitch Форумы playapexshop.com Состязайтесь Рекомендации для сообщества Об игре Apex Legends Легенды Карты Вопросы и ответы Системные требования для ПК Создатели Специальные возможности Издание чемпиона Арены Королевская битва Сезон Боевой пропуск Последние новости Обновления игры Новые медиафайлы Подпишитесь на новости Twitter Instagram Facebook YouTube Twitch Форумы playapexshop. com Состязайтесь Рекомендации для сообщества EA app для Windows Steam для ПК PlayStation®4 PlayStation®5 Xbox Nintendo Switch EA app для Windows Steam для ПК PlayStation®4 PlayStation®5 Xbox Nintendo SwitchЗагрузить Apex Legends для ПК
Загрузить для ПКУсловия и положения
Пользовательское соглашение EA
Гибралтар Крипто«За бессовестные дела я берусь за бесценок».
Бомбический эксперт по взрывчатке
Любитель женщин, свой братан для мужчин и просто Мужик с большой буквы. Фьюз — это целая подрывная бригада в одном лице… Что он и сам прекрасно знает. Этот неунывающий подрывник с неуёмным энтузиазмом с ног до головы увешан взрывчаткой. Уверенности Фьюзу хватает, а вот планирования — не очень. Он привык сначала всё взрывать, а только потом задавать вопросы, и никогда не против ввязаться в очередную заварушку.
Фьюз вырос на Сальво — жестокой планете под управлением попеременно сменяющих друг друга эксцентричных диктаторов, для которых главное — громить, убивать и хорошо проводить время. Большую часть жизни Фьюз прослужил наёмником вместе с подругой детства Мэгги. Но в то время, как она стремилась стать одним из сильнейших диктаторов Сальво, Фьюза манила к себе арена. Он нашёл своё призвание в кровавом спорте Сальво — Костяной клетке. Со временем ему удалось стать лучшим, самым харизматичным и любимым гладиатором на планете.
Настоящее имя
Уолтер Фицрой
Возраст
54
Родной мир
Сальво
Тактическое умение
Кассетный кастет
Пассивное умение
Гренадёр
Спецумение
Джекпот
<b>Кассетный кастет</b>
ТАКТИЧЕСКОЕ УМЕНИЕ
Запуск кластерной бомбы, которая при столкновении разделяется на несколько взрывающихся зарядов.
<b>Гренадер</b>
ПАССИВНОЕ УМЕНИЕ
Дополнительная граната на ячейку рюкзака. Гранаты летят дальше, быстрее и точнее.
<b>Джекпот</b>
СПЕЦУМЕНИЕ
Бомбардировка, после которой область поражения оказывается окружена стеной огня.
<b>Бангалор</b>
apex-legends-character
Профессиональный солдат<b>Безумная Мэгги</b>
<b>Бладхаунд</b>
apex-legends-character
Техноследопыт<b>Валькирия</b>
apex-legends-character
Крылатая мстительница<b>Ваттсон</b>
apex-legends-character
Незыблемая защитница<b>Вэнтедж</b>
apex-legends-character
Снайперский гений<b>Гибралтар</b>
apex-legends-character
Неприступная крепость<b>Каталист</b>
apex-legends-character
Мастерица обороны<b>Каустик</b>
apex-legends-character
Ловчий-отравитель<b>Крипто</b>
apex-legends-character
Эксперт по разведке ПодробнееEA app уже доступно
Вы в идеальном месте для поиска и покупки игр EA, т. к. Origin скоро закроется.
EA app уже доступно
Вы в идеальном месте для поиска и покупки игр EA, т.к. Origin скоро закроется.
Про фьюзы – RoboCraft
Теперь о том, почему я так загонялся на тему сбоев при прошивке.
Дело в том что в памяти атмеги есть ячейки отвечающие за параметры конфигурации всего МК — фьюз-биты.
Про фюз-биты, как обычно, можно почитать у ДиХальта.
От себя добавлю что фьюз биты МК Atmega8 расположены в два байта – старший фьюз-байт (high _fuses) и младший фьюз-байт ( low_fuses)
А у Atmega168 есть ещё и дополнительный фьюз-байт(extended_fuses)
Если при программировании МК произойдёт сбой, то с некоторой долей вероятности (у меня пару раз было =) в эти ячейки может залезть мусор, что приведёт к галюцинированию или неработоспособности.
Шьются они специальными командами по 3 байта каждая+1байт данных (“куда писать”+”что писать”) т.е. вероятность, что помеха совпадёт именно с одной из них невелика, однако при прошивке ненадёжным программатором (или в условиях сильных помех) непосредственно фьюз-битов, вероятность попадания в них хлама существенно возрастает (мы сами подаём команду на запись фьюзов и если она каким-то чудом прорвалась сквозь наводки то данные похерить проще (они могут быть произвольными) и МК с радостью схавает шум эфира)
Наиболее неприятные фьюзы:
Ячейка RSTDISBL
при записи в неё “0” превращает вывод резет в обычную ногу и
прошить МК по SPI будет уже невозможно (вначале программирования необходимо “прижать к земле” RESET – подать “0”)
Ячейка SPIEN
при записи в неё “1” запрещено программирование по SPI. Пишут что при
программировании по последовательному каналу данная ячейка недоступна, так что нам вроде не грозит, однако проверять нехочется=)
Ячейки CKOPT и CKSEL
отвечают за тактирование МК и могут встать в такую позу, что
контроллер будет ждать внешнего тактового сигнала или не сможет раскачать ваш кварц.
Первое и второе лечится только параллельным программатром (может и JTAG поможет)
Второе лечится “тактированием от пальца” (мне пару раз помогло=). Тыкаете в XTAL1 (у атмеги8 — 9 нога) иголкой (или отвёрткой неизолированной) и шьёте как обычно — через SPI (может не с первого раза получится =) – можно, конечно использовать внешний генератор, но это если он есть или его не лень сделать =)
Сбои при программировании остальных фьюзов, лок-битов (биты отвечающие за защиту прошивки) и самого бутлоадера могут доставить неприятности лечимые простой (через SPI) перепрошивкой.
Процесс прошивки бутлодера состоит из четырёх этапов:
Разблокирование секции загрузчика вообще-то, по умолчанию, вся память атмеги и так
доступна для чтения/записи.
Установка фюз-битов — настраивает МК на работу в ардуине.
Прошивка собственно бутлодера
Запись лок-битов, защищающих секцию загрузчика от самостоятельной перезаписи (в общем случае бутлоадер может модифицировать или вообще сносить сам себя)
Настройки процесса прошивки бутлодера и значеня фьюз- и лок-битов можно просмотреть в arduino-0015\hardware\boards.txt в соотвествующей нашему МК секции (atmega8.bootloader)
atmega8.bootloader.programmer (по умолчанию: stk500) протокол используемый бутлодером.
atmega8.bootloader.path(по умолчанию: atmega8 ) путь где файл бутлодера лежит
atmega8.bootloader.file(по умолчанию: ATmegaBOOT.hex) собственно, сам бутлоадер
Теперь самое интересное:
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 вектор начального сброса находится в начале секции загрузчика - МК при включении питания первым делом запустит бутлоадер
Ссылки
AVR. Учебный Курс. Конфигурация FUSE бит
AVR Fuse Calculator
По теме
Arduino/CraftDuino и WinAVR — программируем на чистом С
Делаем ISP-программатор из Arduino
О предохранителях Без ограничений
|
Предохранители | Vishay
Нажимайте кнопки, чтобы отсортировать таблицу по возрастанию, убыванию или выключению. Отфильтруйте, щелкнув и перетащив или щелкнув, удерживая клавишу Ctrl, чтобы выбрать несколько элементов.