068-как правильно прошить avr фьюзы (fuse bit)

FUSE BITES

SPIEN. Как быть, если вы не уверены в том, какое в вашей программе оболочке представление Фьюз битов, прямое или инверсное? Ориентироваться в этом случае, нужно всегда по Биту Spien. Этот бит при программировании через последовательный интерфейс будет всегда запрограммирован, а остальные Фьюз биты нужно выставлять уже относительно его. В программах – оболочках, где нет защиты от снятия этого фьюз бита, нужно быть осторожным, если его снять, МК будет залочен, и недоступен для прошивания по SPI.

CKDIV8. Этот фьюз бит при его установке, делит тактовую частоту микроконтроллера на 8. Если мы используем новый, не шитый ранее МК, он будет тактироваться от внутреннего источника, и частота его будет равна 8 МГц. Но по умолчанию этот фьюз бит уже запрограммирован на заводе при изготовлении. После его установки тактовая частота МК равна единице (8\8=1). В случае, если мы задаем частоту от внешнего кварца, скажем на 12 МГц, частота будет равна 1.5 МГц.

EESAVE. При установке этого фьюз бита, мы запрещаем очистку от записанных ранее данных, (стирание) EEPROM памяти микроконтроллера, при выборе в программе — оболочке функции ERASE (очистить память).

RSTDISBL. Reset disable (Отключение Ресета). Отключение пина Reset, и превращение его, в еще один пин порта — ввода вывода микроконтроллера. Эта функция может использоваться при применении Параллельного программатора. Либо если вам больше не нужно прошивать МК, вы заливаете проверенную прошивку, и дальнейшее перепрограммирование не потребуется. После его установки, МК больше не будет доступен для прошивания через последовательный интерфейс (SPI), залочен. Это актуально для МК с небольшим количеством ножек — портов ввода — вывода, например в корпусе Dip 8.

SELFPRGEN Этот бит включает режим самопрограммирования микроконтроллера. Начинающим, без необходимости его изменять не рекомендую.

BOD LEVEL 0 – 2. Этими битами мы устанавливаем порог срабатывания монитора питания МК, для его более стабильной работы. В случае, если напряжение питания опустится ниже заданного нами уровня, произойдет сброс микроконтроллера.

Lock 1-2 биты. С их помощью мы можем защитить записанную нами прошивку в память микроконтроллера от незаконного копирования. Например, если это было какое-либо коммерческое устройство, аналогов которому по функциональности не выпущено.

CKSEL 0 – 3. С помощью этих фьюз битов, мы задаем микроконтроллеру источник тактирования, внешний или внутренний. Также здесь мы указываем частоту источника тактирования. Всего может быть 16 возможных комбинаций этих фьюз битов. Будьте осторожны, в случае неправильного их выставления, МК может залочиться, так как для своей работы он будет “ждать” внешнего источника тактирования (кварца). В таком случае, если вы все же ошиблись с выставлением этих фьюзов, постарайтесь вспомнить какие выставляли значения, и обратитесь к документации в Даташите на этот МК. После подключения кварца на нужную частоту, и двух  конденсаторов, МК снова будет виден.

CKOUT. Установкой этого фьюз бита, мы выводим на одну из ножек микроконтроллера его тактовую частоту, для синхронизации работы внешних устройств, например другого МК, который должен работать синхронно с этим.

DWEN. С помощью этого фьюз бита мы можем включить режим отладки МК debug WIRE. Без необходимости этот фьюз бит изменять не нужно, так как в этом случае МК перестанет быть виден через последовательный интерфейс (SPI), или по другому будет залочен.

SUT 0 – 1. Устанавливая эти фьюз биты, мы изменяем режимы запуска тактового генератора МК. Выставлять их нужно только с пониманием того, для чего они служат, и без необходимости не изменять, иначе возможна нестабильная работа микроконтроллера.

Программирование/изменение фьюзов в микроконтроллере AVR

Откройте Arduino IDE и загрузите в плату Arduino базовый скетч для мигания светодиодом (basic blink sketch).

Вы увидите, что встроенный в плату Arduino светодиод (подключенный к ее контакту 13) начнет мигать. Более подробно все эти процессы вы можете посмотреть в видео, приведенном в конце статьи. Теперь давайте попоробуем изменить фьюзы и посмотрим что произойдет. Как мы уже выяснили ранее, по умолчанию значения фьюзов в плате Arduino следующие: EFUSE – 0XFF, HFUSE – D9, LFUSE – 62. Изменим их с помощью Avrdude, для этого выполним следующую команду:

После выполнения этой команды вы увидите что скорость мигания светодиода станет значительно меньше. Дело в том, что по умолчанию частота мигания светодиода определялась частотой внешнего кварцевого генератора (16 МГц), теперь же, после изменения фьюзов, она определяется частотой внутреннего RC генератора (1 МГц). Поэтому и светодиод теперь будет мигать значительно медленнее.

Но, поскольку мы изменили фьюзы, мы изменили и настройки загрузчика. Вы можете увидеть это на следующем рисунке:

Чтобы исправить это и вернуть плату Arduino в ее исходное состояние, мы должны снова загрузить в нее загрузчик. Для этого выполните Tools -> Programmer- USBasp, после этого снова зайдите в Tools и выберите пункт «burn bootloader». После этого исходная функция загрузчика загрузится в плату Arduino и она снова начнет функционировать как обычно.

После этого светодиод на плате станет снова мигать с прежней частотой.

Байты конфигурации

Иногда в статьях с описанием конструкции, могут быть указаны байты конфигурации в шестнадцатеричной системе. Перевести, в привычный нам вид, в виде меню с установкой галочек и наоборот, можно с помощью Онлайн калькулятора фьюзов, который представляет собой обычную вэб страницу, для того чтобы перейти на которую, нужно набрать в поисковике Онлайн калькулятор фьюзов. 

На этой странице приводится справочная информация для всех фьюзов микроконтроллера. Правда, для части их, к сожалению на английском языке. Также всю информацию на микроконтроллер мы можем найти в Даташите, PDF файле с указанием цоколевки, характеристиками МК, и с подробным описанием для всех фьюз битов. 

Для того чтобы найти Даташит на нужную нам модель МК, достаточно набрать в поиске слово Datasheet и указать модель микроконтроллера, например Tiny-2313. 

Повторим еще раз, выше на рисунке обведены красным те фьюз биты, которые изменять нельзя, иначе МК будет залочен. Автор статьи — AKV.

Originally posted 2019-09-16 16:30:54. Republished by Blog Post Promoter

Прошивка микроконтроллера

Следующим этапом будет прошивка микроконтроллера. Для этого вам нужно иметь:

  1. Микроконтроллер ATmega 8
  2. Программатор для AVR микроконтроллеров.

Чтобы прошить микроконтроллер нужно иметь программатор и компьютер с соответствующим программатору ПО. Я использую AVR Studio 4. Прошивку оставлю в архиве вместе с печатной платой и принципиальной схемой. 

Фьюз-биты нужно установить следующим образом:

Lock Bits = 0x 3F; High Fuse = 0x D1; Low Fuse = 0x E1; Ext. Fuse = 0x 00

Если микроконтроллер успешно прошит, можно приступать к разблокировке микроконтроллеров. Для этого вставьте прошитую атмегу в панельку возле светодиодов. А «залоченный» мк вставьте в соответствующую ему пустую панельку. Далее нужно подключить питание к плате через терминальный блок, который вы припаяли. Напряжение следует подавать 6-12 вольт, иначе плата не запуститься. Когда питание подключили загорится красный светодиод (если конечно вы все правильно собрали).

Если светодиод горит, то нажимайте на кнопку. Должен загореться зеленый светодиод, а красный погаснет. Если все так и произошло, то поздравляю – плата собрана правильно и вы разблокировали микроконтроллер. 

Теперь несколько слов о джампере, который стоит на плате. Если вы поставите на него перемычку, то при разблокировке МК также очиститься его память, то есть удалиться прошивка. Если же перемычки не будет — прошивка сохраниться.

Если при нажатии на кнопку не произошли действия описанные выше, то что-то пошло не так как нужно. Причина может быть в том, что вы ошиблись при сборке платы или прошивке атмеги. Также причина может быть в том, что микроконтроллер, который вы хотите восстановить, неисправен. Дополнительная информация — на форуме. Всем удачи!

Сборка устройства

Для сборки нам понадобится:

1. Резисторы: 

10к-1шт.
4,7к-2шт.
1к-19шт.
330 Ом – 1шт.

2. Конденсаторы:

100 мкФ 16в. – 1шт.
10 мкФ 16в. – 1шт.
10 нФ — 1шт.

3. Транзисторы:

BC547 – 1шт.
BC557 – 2шт.

4. Светодиоды – 2 шт. (красный и зеленый)

5. Панели под микроконтроллеры

40 выводов – 1шт.
28 выводов – 2шт.
20 выводов – 1шт.

6. Кнопка 4-х контактная – 1 шт.

7. Терминальный блок на 2 контакта – 1шт.

8. Стабилизатор напряжения 7805 в корпусе ТО-220  – 1 шт.

Вот собственно и все детали. Можно приступать к сборке АВР доктора.

Первым делом, нужно залудить контактные площадки на плате. Я обычно покрываю слоем припоя всю плату, так надежнее. Следует внимательно осмотреть плату на обрыв дорожек и другие дефекты. После того, как залудили плату, её нужно обмыть от флюса. Для этого можно воспользоваться водой с мылом или моющим средством. Если флюс не отмывается или вы использовали канифоль, следует промыть плату ацетоном или спиртом. Если нет не того, не другого, можете промыть плату перекисью водорода или на крайний случай растворителем. (при использовании растворителя, плата в дальнейшем будет иметь не очень приятный запах).

Когда все элементы впаяны, нужно еще раз промыть плату. После того как она высохнет, возьмите увеличительное стекло и внимательно осмотрите плату. Я иногда нахожу на плате сопли и непропаянные места. Если вы устраните все найденные дефекты до первого включения платы, вы можете избежать неприятностей. Вот так выглядит готовая плата:

Исходное состояние фьюзов в микроконтроллере ATmega328P и в плате Arduino

Сравнение значений конфигурационных байтов микроконтроллера ATmega328P и платы Arduino представлено в трех следующих таблицах.

№ бита Low Fuse Byte Значение по умолчанию в AVR Значение по умолчанию в Arduino
7 CKDIV8 0 (programmed) 1 (unprogrammed)
6 CKOUT 1 (unprogrammed) 1 (unprogrammed)
5 SUT1 1 (unprogrammed) 1 (unprogrammed)
4 SUT0 0 (programmed) 1 (unprogrammed)
3 CKSEL3 0 (programmed) 1 (unprogrammed)
2 CKSEL2 0 (programmed) 1 (unprogrammed)
1 CKSEL1 1 (unprogrammed) 1 (unprogrammed)
CKSEL0 0 (programmed) 1 (unprogrammed)
№ бита High Fuse Byte Значение по умолчанию в AVR Значение по умолчанию в Arduino
7 RSTDISBL 1 (unprogrammed) 1 (unprogrammed)
6 DWEN 1 (unprogrammed) 1 (unprogrammed)
5 SPIEN 0 (programmed) 0 (programmed)
4 WDTON 1 (unprogrammed) 1 (unprogrammed)
3 EESAVE 1 (unprogrammed) 1 (unprogrammed)
2 BOOTSZ1 0 (programmed) 0 (programmed)
1 BOOTSZ0 0 (programmed) 1 (unprogrammed)
BOOTRST 1 (unprogrammed) 0 (programmed)
№ бита Extended Fuse Byte Значение по умолчанию в AVR Значение по умолчанию в Arduino
7 1 1
6 1 1
5 1 1
4 1 1
3 1 1
2 BODLEVEL2 1 (unprogrammed) 1 (unprogrammed)
1 BODLEVEL1 1 (unprogrammed) 0 (programmed)
BODLEVEL0 1 (unprogrammed) 1 (unprogrammed)

Начальное состояние микроконтроллеров ATmega328/P, в котором они поставляются с завода, является следующим: микроконтроллер сконфигурирован на работу с внутренним RC генератором на 8МГц, при этом прошитый бит CKDIV8 обеспечивает деление частоты генератора на 8; внешний сброс (по низкому уровню на выводе Reset) не запрещен; разрешено программирование по интерфейсу SPI; для загрузчика отведена область памяти 2048 слов; стартовый адрес программы 0x0000; схема контроля питания отключена.

В плате Arduino Uno фьюзы микроконтроллера изменены таким образом, чтобы он был настроен на работу с экономичным кварцевым генератором без делителя частоты; для загрузчика отводится 256 слов; прошитый бит BOOTRST назначает стартовым адресом адреса начала секции загрузчика; порог срабатывания схемы BOD составляет 2.7В.

Теперь рассмотрим процесс изменения фьюзов в плате Arduino (микроконтроллере AVR).

8-разрядный AVR-микроконтроллер с внутрисистемно программируемой флэш-памятью емкостью 128 кбайт

Перевод
технического паспорта ( даташита ) на русский язык.

  1. Общее описание

  2. Ядро центрального процессорного устройства AVR

  3. Память

  4. Интерфейс внешней памяти

  5. Системная синхронизация и тактовые источники

  6. Внешняя синхронизация

  7. Управление энергопотреблением и режимы сна

  8. Системное управление и сброс

  9. Прерывания

  10. Порты ввода-вывода

    Порты в качестве универсального цифрового ввода-вывода

    Альтернативные функции порта

    Описание регистров портов ввода-вывода

  11. Внешние прерывания

  12. Аналоговый компаратор

  13. 16-разр. таймеры-счетчики 1 и 3

    Доступ к 16-разрядным регистрам

    Тактовые источники таймера-счетчика 1/3

    Блок счетчика

    Блок захвата

    Блоки сравнения

    Блок формирования выходного сигнала

    Режимы работы

  14. Временные диаграммы 16-разрядных таймеров-счетчиков

  15. Описание регистров 16-разрядных таймеров-счетчиков

  16. Предделители таймеров-счетчиков 1, 2 и 3

  17. Аналогово-цифровой преобразователь

  18. Интерфейс JTAG и встроенная отладочная система

  19. Модулятор выходов таймеров (OCM1C2)

  20. Последовательный периферийный интерфейс — SPI

    Функционирование вывода SS

  21. 8-разр. таймер-счетчик 0 с функциями ШИМ и асинхронного
    тактирования

    Блок формирования выходного сигнала

    Временные диаграммы таймера-счетчика 0

    Описание регистров 8-разрядного таймера-счетчика 0

    Асинхронная работа таймера-счетчика 0

    Предделитель таймера-счетчика 0

  22. УСАПП

    Генерация тактовых импульсов

    Форматы посылки

    Инициализация УСАПП

    Передача данных — Передатчик УСАПП

    Прием данных — Приемник УСАПП

    Асинхронный прием данных

    Многопроцессорный режим связи

    Описание регистров УСАПП

    Примеры установок скоростей связи

  23. Двухпроводной последовательный интерфейс TWI

    Формат посылки и передаваемых данных

    Системы многомастерных шин, арбитраж и синхронизация

    Обзор модуля TWI

    Описание регистров TWI

    Рекомендации по использованию TWI

    Режимы передачи

  24. Программирование памяти

    Параллельное программирование

    Последовательное программирование

    Программирование через интерфейс JTAG

  25. Электрические характеристики

    Требования к характеристикам внешнего тактового сигнала

    Характеристики двухпроводного последовательного интерфейса

    Характеристики временной диаграммы SPI

    Предварительные данные по характеристикам АЦП

    Временная диаграмма внешней памяти данных

  26. Типовые характеристики ATmega128: предварительные данные

    Типовые характеристики ATmega128: предварительные данные
    (продолжение)

    Типовые характеристики ATmega128: предварительные данные
    (продолжение)

  27. Сводная таблица регистров

  28. Набор инструкций

  29. Информация для заказа

Чтение фьюзов в Arduino

• Download Avrdude Version 6.3 Windows-ming32.

После того, как вы скачали эту программу, вы должны извлечь ее из архива и открыть окно команд Windows в этой папке. После этого подключите программатор USBasp к вашему компьютеру, убедитесь в том, что на вашем компьютере установлен правильный драйвер для программатора USBasp. После этого вы получите возможность чтения фьюзов в плате Arduino. Для этого выполните следующую команду:

Если все прошло нормально, эта команда прочитает байты фьюзов (fuse bytes) и поместит их в три раздельных текстовых файла. На следующем рисунке показан общий ход этого процесса.

Как видно из представленного рисунка, программа Avrdude считала фьюзы из платы Arduino Nano и поместила их в три отдельных текстовых файла. Если вы откроете эти файлы, то вы увидите считанные значения фьюзов: EFUSE – 0xFD, HFUSE – 0XDA, LFUSE – 0xFF. Это и  есть значения фьюзов по умолчанию в плате Arduino Nano

Теперь, когда мы знаем значения фьюзов по умолчанию в плате Arduino, мы можем сравнить со значениями фьюзов по умолчанию в в микроконтроллере ATmega328P