Исправление фузов avr

Фьюзбит Доктор. Исправляем AVR при неправильно прошитых фьюзах (Сборка устройства). — DRIVE2

Для вылечивания микроконтроллеров с неправильно прошитыми фьюзами собрал Atmega fusebit doctor.

Всю информацию почерпнул с сайта с этой статьй: Исправляем AVR фьюзы при помощи «Atmega fusebit doctor»

Что доктор может или как это будет работать?

При подаче питания 12 вольт на плату, и установке «порченого» микроконтроллера, нажатием на кнопку START получим рабочий микроконтроллер.

При восстановлении фьюз бит прошивка микроконтроллера остается нетронутой. На плате есть перемычка, при замыкании которой устройство полностью «обнулит» микроконтроллер.

Приступим )

1. Изготовление платы

1. Собираем устройство по самой последней версии на данный момент.
Печатка Доктора от Paul (в Сплинте)

Ошибки в данной плате, обнаруженные zloynik:1.Резистор с 23 ноги меги не соединен с панельками.2.Резистор с 4 ноги меги не соединен с панельками.3.Резистор с 5 ноги меги не соединен с панельками.

4.Транзистор BC547(Т2) с 13 ноги меги-нет контакта с эмиттера на «землю».

Не беда. Дорисовываем недостающие соединения.
Печатная плата в Спринте

специально выделил дорожку, чтоб показать какие они тонкие. Ширина дорожки — 0.5 мм. Для меня это слишком мелко

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

принтер не в лучшем состоянии (. Мажет. Единственное спасение — это то, что он в самом начале нормально пропечатывает

3. Прогреваем плату предварительно утюгом на максимуме. Прикладываем рисунок — он моментально прилипает. А мы его разглаживаем ваткой и опять греем утюгом.

4. НУ вот и первый блин комом. Перестарался с очисткой бумаги. Не отчаиваемся, переделываем ) a-a.d-cd.net/cfcaaa8s-960.jpg

5. Пропустим попытку №2 и сразу к третьей передем. А если быть более точным честным, то плата эта была 5-й раз переделана. После протравки в хлорном железе получилось это чудо )Нужно было маркером подправить перед травлением.

желтым выделил места, где недотравил. Зеленым — дорожки в процессе травления пострадали

6. Смываем тонер растворителем 646-м (что имелось по близости, то пошло в дело) и получаем нужные дорожки. Эти дорожки ввиду недотравления пришлось доводить до ума путем “прозвонки” каждого соединения. Еще та задачка…

вот они, перетравленные дорожки. Пришлось перемычки лепить в этих местах

7. Представляю помощника в изготовлении отверстий. Его название: ДП-11 7500 обмин.
Очень полезная штукенция. Правда кушает 27В, но и от 24-х не отказывается (два аккума от УПСа ). Взял попользоваться на неопределенное время.

Особенность: если положить моторчик, перестает крутиться. А если начать сверлить (только подносишь к будущему отверстию и надавливаешь), то начинает сверлить.

миниатюрный моторчик

Т.е. вначале не понравилось, когда он в горизонтальном положении останавливался, а потом понял, что это вообще незаменимая вещь! Просверлил нужные отверстия, отложил моторчик всторону. Нужно просмерлить? берешь и сверлишь… Питание при этом не убитается.

Вначале думал, что там какой-то регулятор стоит. Но нет там ничего такого, это просто моторчик износился со временем и глючит. Глюк на пользу )))

2. Сборка устройства Atmega fusebit doctor

1. Набиваем плату компонентами. Вначале припаиваем перемычки и панельки под микросхемы.

Подписал радиоэлементы. Неподписанные резисторы — на 1К Ом. Не было в наличии одного резистора на 10К Ом. По совету vasilii76 установил меньше на 8,2К (какой был).
Резисторы при монтаже планировались для установки в лежачем положении (на 0.125 Вт), но раз приобрел 0,250Вт, то так и запихал их…

Устройство Atmega fusebit doctor. Надписи со стороны элементов не делал — и так пойдет (на функционирование устройства не влияет)

2. На первый раз для дорожек 0,5мм сойдет. Боялся перетравить дорожки, поэтому в процессе пришлось их дорабатывать.

позже покрою лаком сверху

3. Получилось довольно скромно ). В планах немного не так себе представлял.Панельку под микроконтроллер на 40-пин установил на плату кверх-ногами ))) Не критично

остается подпилить края и прошить -мозги- для функционирования устройства

4. А вот такой красивый девайс с сайта getchip.net должен был получиться )

с надписями поинтереснее будет выглядеть

Сборка устройства на этом завершена. Идем прошивать микроконтроллер Atmega-8L

3. Прошивка микроконтроллера для устройства “Atmega fusebit doctor”

1. Специально делать макетку для прошивки Atmega-8L не стал.
Собирал вот по этой схемке Упрощенную отладочную для Atmega-8, но из того, что имелось и без кварца.Две панельки на 28-ножек и пару перемычек — вот все устройство.

ну не было у меня панельки нужной ширины, прилепил на 2-х 28-и пиновыйх, но широких

2. Подключаем ранее изготовленный:
Простой LPT программатор AVR микроконтроллеров (5-ть проводков)

3. Запускаем uniprof_08_jun_10. Наш микроконтроллер определился как mega8.
Отлично! Заливаем прошивку с версией 2.11 из этого архива в папке “firmware” для нужного МК. Архив — Прошивка — atmega_fusebit_doctor_2.11_m8.bin

4. Устанавливаем фьюзы для МК и давим на батон “Write”.

Всего один фьюз изменить. Убираем галочку — значит активируем перемычку

Вот и все с прошивкой. Бежим проверять в действии )

4. Проверка работоспособности доктора

Большое спасибо vasilii76, который помогал при проверке работоспособности данного устройства, давал наставления )))

1. Собираем опять же из подручных средств переходник для Attiny13. Панелька, 11 штырьков и проводки — вот и все )))

полноценную плату буду позже готовить

2. Подключаем к доктору нашу подопытную Attiny13, с заранее активированными фьюзами:
CKSEL, RSTDISBL, SPIEN. Давим на кнопку и пациент “вылечен” )

Установка в корпус + изготовление адаптера для Attiny 13 в DIP-корпусе

1. Приобрел в радиомагазинчике корпус для РЭА модели G407. После небольших манипуляций на точильном станке плата подошла идеально!

2. Установил адаптер под Attiny 13 в DIP-корпусе. Подробнее про изготовление адаптера можно ознакомиться в статье “Ч”.
Адаптер под Attiny — 8pin (14pin) для Доктора (atmega fusebit doctor)

адаптер тоже идеально подходит. Копрус с адаптером отлично закрывается

Какие микроконтроллеры были испытаны?

1. Attiny 13На докторе был испытан микроконтроллер Attiny 13. Были проверены все фьюзы в полях:Fuse High Byte – старший байт;Fuse Low Byte – младший байт.

Проверка прошла успешно!

2. Attiny 12С ним что-то не так получилось. Испытывал тут: Lock Bit Byte.

МК успешно залочен.. Мигает зеленый светодиод. Эти фьюзы не получилось восстановить (

Буду позже разбираться с ней.

Сопряжение доктора с ПК

Преобразователь RS-232 — UART (для конфигурирования различных устройств)

Сколько стоит собрать это чудо?

Цена вопроса: 270р на детали, + 130р на корпус = 400р
Из деталек самый дорогой — микроконтроллер (145р — пол стоимости Доктора)

Не учитываются трудо-затраты и материалы на печатку

Опыт при изготовлении платы — бесценен!

Варианты Доктора от драйвовчан

Хороший вариант реализовал renoshnik.

Всем удачных поделок )

Не забываем нажать кнопку Нравится )))

Источник: https://www.drive2.ru/b/332416/

AVR. Учебный Курс. Конфигурация FUSE бит

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

Но без знания этой особенности контроллера далеко не уедешь. Так что распишу все по порядку. У разных версий контроллеров число FUSES разное, какие то могут отсутствовать, но основные есть всегда. Вот по ним и пройдемся.
 

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

Итак, главное:

 
Однако контроллеры делают электронщики, а прошивающие программы — программисты. Как бы логично. И вот эти программисты взяли и заварили адскую путаницу с галочками.

Нет бы им раз и навсегда принять за стандарт, что галочка это 1, а не ВКЛЮЧЕНО (что, напомню, является нулем).

И поэтому в одних прошивающих программах галочка означает, что опция включена (в FUSE бит записывается 0),в других, обычно написанных электронщиками, галочка означает единицу. Т.е. с точностью до наоборот.

А что будет если перепутать? А будет ОЧЕНЬ плохо. Контроллер войдет в неправильный режим и может заблокируется наглухо. Т.е. раз прошил и все. Приехал.
 

Нет, спасти его можно, но для этого тебе потребуются дополнительные ухищрения в виде высоковольтного программатора, JTAG адаптера или генератора тактов. Все зависит от того в какой режим ты загонишь контроллер своими неправильными настройками.
 

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

Конфигурация тактового сигнала По умолчанию все контроллеры AVR (кроме старых серий AT90S2313, AT90S8535 итд) сконфигурированы так, чтобы работать от внутреннего источника тактов. Т.е. стоить подать на них питание и они начинают работать. Ничего больше и не нужно.

За источник тактов отвечают биты CKSEL Выставив их правильным образом можно выбрать частоту работы контроллера, а также источник тактового сигнала.

  • CKSEL3…0 = 0000 — Внешний источник сигнала.

Т.е. на вход XTAL1 подаются прямоугольные импульсы. Такое иногда делают в синхронных системах, когда несколько контроллеров работают от одного генератора.
 

CKSEL3…0 = 0100 – 8 MHz от внутреннего генератора(обычно по умолчанию стоят такие) Для большинства AVR такая конфигурация CKSEL означает тактовку от внутреннего генератора на 8Мгц, но тут могут быть варианты. Так что в этом случае втыкай внимательно в даташит. В табличку Internal Calibrated RC Oscillator Operating Modes

Иногда нужно иметь внешний тактовый генератор, например, чтобы его можно было подстраивать без вмешательства в прошивку. Для этого можно подключить RC цепочку, как показано на схеме и подсчитать частоту по формуле f = 1/3RC, где f будет частотой в герцах, а R и С соответственно сопротивлением резистора и емкостью конденсатора, в омах и фарадах.

  • CKSEL3…0 = 0101 – для частот ниже 0.9 MHz
  • CKSEL3…0 = 0110 – от 0.9 до 3 MHz
  • CKSEL3…0 = 0111 – от 3 до 8 MHz
  • CKSEL3…0 = 1000 – от 8 до 12 MHz

Данная табличка справедлива только для ATmega16 у других МК может отличаться. Уточняй в даташите!
 

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

  • CKSEL3…0 = 1001 — низкочастотный «часовой» кварц.

На несколько десятков килогерц. Используется в низкоскоростных устройствах, особенно когда требуется точная работа и низкое потребление энергии.

Для обычных кварцев ситуация несколько иная. Тут максимальная частота кварца зависит также и от бита CKOPT когда CKOPT = 1 то:

  • CKSEL3…0 = 1010 или 1011 — от 0,4 до 0.9 MHz
  • CKSEL3…0 = 1100 или 1101 — от 0,9 до 3 MHz
  • CKSEL3…0 = 1110 или 1111 – от 3 до 8 MHz (либо от 1 до 16Мгц при CKOPT=0)

А если CKOPT равен 0 то при тех же значения CКSEL можно поставить кварц от 1 до 16MHz.
 

Разумеется, кварц на 16MHz можно поставить только на Мегу без индекса ”L”. (Хотя, как показывает практика, Lку тоже можно неслабо разогнать. У меня ATMega8535L заработала на 16Мгц, но были странные эффекты в работе. Поэтому я не стал так извращаться и разгон снял). Опять же, все выше сказанное в точности соответствует только Меге 16, у других может незначительно отличаться.
 

Бит CKOPT задает размах тактового сигнала. Т.е. амплитуду колебаний на выходе с кварца. Когда CKOPT = 1 то размах маленький, за счет этого достигается меньшее энергопотребление, но снижается устройчивость к помехам, особенно на высоких скоростях (а предельной, судя по таблице выше, вообще достичь нельзя.

Точнее запуститься то он может запустится, но вот надежность никто не гарантирует). А вот если CKOPT активизировать, записать в него 0, то размах сигнала сразу же станет от 0 до питания. Что увеличит энергопотребление, но повысит стойкость к помехам, а значит и предельную скорость.

При оверклокинге МК тем более надо устанавливать CKOPT в 0.
 

Биты SUT задают скорость старта МК после снятия RESET или подачи питания. Величина там меняется от 4ms до 65ms. Мне, за всю практику, пока не довелось эту опцию использовать — незачем. Так что ставлю на максимум 65ms — надежней будет.
 

Бит RSTDISBL способен превратить линию Reset в одну из ножек порта, что порой очень нужно когда на какой-нибудь крошечной Tiny не хватает ножек на все задачи, но надо помнить, что если отрубить Reset то автоматически отваливается возможность прошивать контроллер по пяти проводкам. И для перешивки потребуется высоковольтный параллельный программатор, который стоит несколько тысяч и на коленке сделать его проблематично, хотя и возможно.
 

Второй заподлянский бит это SPIEN если его поставить в 1, то у тебя тоже мгновенно отваливается возможность прошивать по простому пути и опять будет нужен параллельный программатор. Впрочем, успокаивает то, что сбросить его через SPI невозможно, по крайней мере в новых AVR (в старых, в AT90S*** было можно)
 

WDTON отвечает за Собачий таймер, он же Watch Dog. Этот таймер перезагружает процессор если его периодически не сбрасывать – профилактика зависаний. Если WDTON поставить в 0, то собаку нельзя будет выключить вообще.
 

BODLEVEL и BODEN — это режим контроля за напряжением. Дело в том, что при определенном пороге напряжения, ниже критического уровня, контроллер может начать сильно глючить. Самопроизвольно может запортачить, например, EEPROM или еще что откосить. Ну, а ты как думал, не покорми тебя с пару недель — тоже глючить начнешь 🙂 

Так вот, для решения этой проблемы есть у AVR встроенный супервизор питания. Он следит, чтобы напруга была не ниже адекватного уровня.

И если напруги не хватает, то просто прижимает RESET и не дает контроллеру стартовать. Вот эти два фуза и рулят этой фичей. BODEN включает, а BODLEVEL позволяет выбрать критический уровень, один из двух.

Какие? Не буду раскрывать, посмотри в даташите (раздел System Control and Reset).

 

JTAGEN — Включить JTAG. По умолчанию активна. Т.е. JTAG включен. Из-за этого у MEGA16 (а также 32 и прочих, где есть JTAG) нельзя использовать вывода порта C, отвечающие за JTAG. Но зато можно подключать JTAG отладчик и с его помощью лезть контроллеру в мозги.
 

EESAVE — Защита EEPROM от стирания. Если эту штуку включить, то при полном сбросе МК не будет стерта зона EEPROM. Полезно, например, если в EEPROM записываются какие-либо ценные данные по ходу работы.
 

BOOTRST — перенос стартового вектора в область бутлоадера. Если эта галочка включена, то МК стартует не с адреса 00000, а с адреса бутсектора и вначале выполняет бутлоадер. Подробней про это было написано в статье про прошивку через лоадер.
 

BOOTSZ0..1 — группа битов определяющая размер бут сектора. Подробней смотри в даташите. От контроллера к контроллеру они отличаются.
 

Lock Bits Это, собственно, и к фузам то отношения не имеет. Это биты защиты. Установка этих битов запрещает чтение из кристалла. Либо флеша, либо ЕЕПРОМА, либо и того и другого сразу.

Нужно, только если ты продаешь свои устройства. Чтобы злые конкуренты не слили прошивку и не заказали в китае более 9000 клонов твоего девайса, оставив тебя без штанов. Опасности не представляют.

Если ты заблокируешь ими кристалл, то выполни полное стирание и нет проблемы.

Характерной особенностью установленных лок битов является считываемая прошивка — в ней байты идут по порядку. Т.е. 00,01, 02, 03, 04… FF, 00… Видел такую срань? Значит не судьба тебе спереть прошивку — защищена =)
 

Техника безопасности И главное правило при работе с FUSE битами — ВНИМАНИЕ, ВНИМАНИЕ и ЕЩЕ РАЗ ВНИМАНИЕ! Не выставляйте никогда FUSE не сверившись с даташитом, даже если срисовываете их из проверенного источника.

Мало ли в какой нотации указал их автор, в прямой или инверсной. Так что если повторяете какую-либо конструкцию, то перед тем как ставить фузы, проверьте то ли вы вообще ставите!
 

Обязательно разберитесь что означает галочка в прошивающей программе. Ноль или единицу. Включено или выключено! Стандарта нет!!!
 

Если фуз биты задаются двумя числами — старший и младший биты, то выставляются они как в даташите. Где 0 это включено.
 

Неплохой FUSE калькулятор
 

Второе, железное, правило работы с FUSE. Запомните это навсегда и не говорите, что я не учил.
 

Подсказка: Как с одного взгляда определить какого типа (прямые или инверсные) fuse биты в незнакомой прошивающей проге?

Дедуктивный метод: Нажмите чтение Fuses и посмотрите на состояние бита SPIEN Этот бит всегда активен, а если он будет сброшен, то программатор контроллер даже определить не сможет. Если SPIEN в 1 — значит фьюзы инверсные, как в PonyProg. Если ноль — значит по нотации Atmel.

Источник: http://easyelectronics.ru/avr-uchebnyj-kurs-konfiguraciya-fuse-bit.html

Как восстановить неправильно выставленные фьюзы в ATtiny

Привет всем хабраюзерам. Думаю многие, кто занимается микроконтроллерами, имеют небольшой опыт в «блокировке» микроконтроллера неправильно выставленными фьюз-битами, например, неправильные настройки тактирования, в частности — очень низкая частота, например 16 КГц.

Так же данный метод должен подойти для случаев, когда были случайно изменённые фьюз-биты RSTDISBL, а конкретнее — порт RESET используется как порт ввода/вывода или же небрежное отношение к фьюз-биту SPIEN(разрешение на последовательное программирование), всё это исключает прошивку классическим способом по протоколу SPI(In-System Programming).

В этом видео я расскажу, и покажу, как можно разблокировать микроконтроллеры из серии ATtiny у которых не правильно выставленные фьюз-биты.

Данный метод годиться не для всех ATtiny, но подходит для большинства популярных, вот их список:

  • ATtiny13;
  • ATtiny24;
  • ATtiny25;
  • ATtiny44;
  • ATtiny45;
  • ATtiny84;
  • ATtiny85.

На видео я показал как можно восстановить заводские фьюз-биты при помощи Arduino, по сути информация представлена ниже дублируется в видеоформате.

Скажу сразу, за основу взят проект товарища Wayne Holder, за что ему большое спасибо, вот ссылка на его статью.

Итак, приступим, вот схема подключения на примере ATtiny13:А вот так данная схема выглядит в моём исполнении:Про подключение к ATtiny25/45/85/24/44/84 будет ниже.

Как Вы можете видеть, схема состоит из 6 резисторов номиналом в 1 КОм, 1 NPN транзистора 2n3904, вот его распиновка:

Можно взять советский КТ315, или его аналоги, ну собственно источника напряжения 11.5-12.5 В, как рекомендуют инженеры из ATmel в документациях к тех микроконтроллерах что упомянуты выше.

Не думаю, что стоит завышать или занижать напряжение, так что перед восстановлением советую проверить напряжение на источнике питания вольтметром или мультиметром. На момент съёмки видео, напряжение на моём аккумуляторе было 12.4 В.

Пару слов где можно взять 12 В — это разного рода блоки питания для роутеров или модемов, вот например, мой DSL модем ASUS DSL-N10E как раз имеет 12 В блок питания, как правило на каждом блоке питания указано напряжение.

Так же 12 В можно взять из разъёма MOLEX компьютера:А если точнее — жёлтый и чёрный.

Стоит упомянуть, что нужно соблюдать повышенную осторожность при подключении 12 В части, потому, что это напряжение запросто палит как микроконтроллеры так и другую периферию Arduino, например преобразователь USB-TTL, ссылаюсь на личный опыт. Поэтому следуем алгоритму:

  • Собираем схему;
  • Подаем питание на Arduino подключив к юсб;
  • Подаём +12В на транзистор;
  • Восстанавливаем микроконтроллер;
  • Отключаем +12В.

Именно таким образом я сбрасывал фьюз-биты ATtiny13(использовал порт Reset как порт ввод/вывода), уже раз 10-15 при отладке одного моего проекта, вот краткое его видео превью:LCD(HD44780) вольтамперметр на ATtiny13Подключаем к другим микроконтроллерам наш «восстановитель фьюз-битовов» следующим образом:

  • Порт RST ATtiny подключается между резистором на 1 КОм, тот что подключается к +12В, и коллектором транзистора VT1;
  • 13-й пин Arduino, он же PB5, подключается через резистор на 1 КОм к базе транзистора VT1;
  • 12-й пин Arduino, он же PB4, подключается через резистор на 1 КОм к SCI (Target Clock Input) ATtiny;
  • 11-й пин Arduino, он же PB3, подключается через резистор на 1 КОм к SDO (Target Data Output) ATtiny;
  • 10-й пин Arduino, он же PB2, подключается через резистор на 1 КОм к SII (Target Instruction Input) ATtiny;
  • 9-й пин Arduino, он же PB1, подключается через резистор на 1 КОм к SDI (Target Data Input) ATtiny;
  • 8-й пин Arduino, он же PB0, желательно подключить через резистор на 100-330 Ом к VCC ATtiny, на всякий случай.
  • GND — разумеется общий провод или другими словами «земля».

Всё это переназначается в коде, никаких проблем.Вот код из странички автора// AVR High-voltage Serial Fuse Reprogrammer
// Adapted from code and design by Paul Willoughby 03/20/2010
// http://www.rickety.us/2010/03/arduino-avr-high-voltage-serial-programmer/
//
// Fuse Calc:
// http://www.engbedded.com/fusecalc/ #define RST 13 // Output to level shifter for !RESET from transistor
#define SCI 12 // Target Clock Input
#define SDO 11 // Target Data Output
#define SII 10 // Target Instruction Input
#define SDI 9 // Target Data Input
#define VCC 8 // Target VCC #define HFUSE 0x747C
#define LFUSE 0x646C
#define EFUSE 0x666E // Define ATTiny series signatures
#define ATTINY13 0x9007 // L: 0x6A, H: 0xFF 8 pin
#define ATTINY24 0x910B // L: 0x62, H: 0xDF, E: 0xFF 14 pin
#define ATTINY25 0x9108 // L: 0x62, H: 0xDF, E: 0xFF 8 pin
#define ATTINY44 0x9207 // L: 0x62, H: 0xDF, E: 0xFFF 14 pin
#define ATTINY45 0x9206 // L: 0x62, H: 0xDF, E: 0xFF 8 pin
#define ATTINY84 0x930C // L: 0x62, H: 0xDF, E: 0xFFF 14 pin
#define ATTINY85 0x930B // L: 0x62, H: 0xDF, E: 0xFF 8 pin void setup() { pinMode(VCC, OUTPUT); pinMode(RST, OUTPUT); pinMode(SDI, OUTPUT); pinMode(SII, OUTPUT); pinMode(SCI, OUTPUT); pinMode(SDO, OUTPUT); // Configured as input when in programming mode digitalWrite(RST, HIGH); // Level shifter is inverting, this shuts off 12V Serial.begin(19200);
} void loop() { if (Serial.available() > 0) { Serial.read(); pinMode(SDO, OUTPUT); // Set SDO to output digitalWrite(SDI, LOW); digitalWrite(SII, LOW); digitalWrite(SDO, LOW); digitalWrite(RST, HIGH); // 12v Off digitalWrite(VCC, HIGH); // Vcc On delayMicroseconds(20); digitalWrite(RST, LOW); // 12v On delayMicroseconds(10); pinMode(SDO, INPUT); // Set SDO to input delayMicroseconds(300); unsigned int sig = readSignature(); Serial.print(“Signature is: “); Serial.println(sig, HEX); readFuses(); if (sig == ATTINY13) { writeFuse(LFUSE, 0x6A); writeFuse(HFUSE, 0xFF); } else if (sig == ATTINY24 || sig == ATTINY44 || sig == ATTINY84 || sig == ATTINY25 || sig == ATTINY45 || sig == ATTINY85) { writeFuse(LFUSE, 0x62); writeFuse(HFUSE, 0xDF); writeFuse(EFUSE, 0xFF); } readFuses(); digitalWrite(SCI, LOW); digitalWrite(VCC, LOW); // Vcc Off digitalWrite(RST, HIGH); // 12v Off }
} byte shiftOut (byte val1, byte val2) { int inBits = 0; //Wait until SDO goes high while (!digitalRead(SDO)) ; unsigned int dout = (unsigned int) val1

Источник: https://habr.com/post/249967/

Восстановление микроконтроллеров

Источник: http://elwo.ru/publ/skhemy_na_mikrokontrollerakh/vosstanovlenie_mikrokontrollerov/9-1-0-533

Atmega fusebit doctor – исправляем микроконтроллер

Для исправления микроконтроллеров с неправильно прошитыми фьюзами собрал Atmega fusebit doctor. Как у большинства начинающих, программирование микроконтроллеров заканчивается залочиванием кристалла неправильно выставленными фьюзами. Не обошла и эта проблема  меня, в результате, две Atmega8 и три Atmega328P в dip корпусе лежат у меня в коробке.

Изучая в интернете вопрос “как разлочить микроконтроллер Atmega”, попал на сайт getchip, где автор предложил свой вариант устройства Atmega fusebit doctor для исправления фьюзов до заводских. Единственным фактором являлась цена Atmega8. В городе в магазине радиодеталей Atmega8 стоит 320 рублей. Пришлось заказывать на площадке Aliexpress микроконтроллер, доставка составила 26 дней.

За это время подготовил плату, и распаял детали.

Изготавливать плату с кучей dip панелей под разные микроконтроллеры не хотелось, так как в наличии Atmega8 и Atmega328P dip корпусе с неправильно прошитыми фьюзами.

Решил оставить только один разъем к которому, есть возможность подключать переходники адаптеры под разные микроконтроллеры, если возникнит такая необходимость. Схема устройства взята с сайта автора и имеет версию 2h.

Я ее немного изменил: резисторы smd тип 0805, транзисторы smd выпаял из старой материнской птаты. Перед установкой транзисторов проверил исправность с помощью ESR тестер. Стабилизатор напряжения +5V на чипе ams1117-5.0. Плату развел программой Sprint Layout под smd детали.

Также заранее необходимо прошить микроконтроллер Atmega8 любым подходящим и имеющимся у вас в наличии программатором. Я рекомендую программатор USB ISP для прошивки кристала Atmega8. Стоит не забывать про правильно выставление фьюзы для прошивки микроконтроллера.

Переходник Atmega8 и Atmega328P dip корпусе 

Изготовленная плата с распаянными деталями

Обратная сторона:

После подачи постоянного напряжения +12В на плату устройство при правильной сборке и монтаже запустится сразу же о чем будет сигнализировать красный светодиод. Блок питания на 12V от старой телевизионной  приставки. Этот  блок питания использую для подачи напряжения на электромотор, для сверления отверстий в печатных платах.

Изготовленный переходник для Atmega8 и Atmega328P

Обратная сторона

Индикации готового устройства имеет два светодиода – красный и зеленый цвета.Горит зеленый светодиод – микроконтроллер успешно вылечен, фьюз биты восстановлены до заводских. То есть если микроконтроллер «залочен» (LockBits включены), проверяются фьюз биты и если они совпадают с заводскими – загорается зеленый светодиод.

Горит красный светодиод – проблемы с сигнатурой микроконтроллера, невозможно прочитать микрокод, нет микроконтроллера в панельке или нет такого микрокода в кристале данных Atmega8.

Зеленый светодиод мигает – микрокод в порядке, фьюз биты с ошибкой, но исправить их невозможно, так как микроконтроллер «залочен» (LockBits включены), необходимо полное стирание данных микроконтроллера, для этого нужно установить перемычку для полного стирания кристала – «ALLOW ERASE».

Мигает красный светодиод – микрокод в порядке, микроконтроллер «не залочен», но, по какой-то причине, нет возможности восстановить фьюз биты.

На плате есть 3-х пиновый разъем UART, через который наше устройство Atmega fusebit doctor есть возможность подключить к компьютеру через соответствующий переходник и считывать данные о процессе восстановления микроконтроллера.

Список микроконтроллеров: успешно востановленных пользователями устройством Atmega fusebit doctor.

1kB:AT90s1200, Attiny11, Attiny12, Attiny13/A, Attiny152kB:Attiny2313/A, Attiny24/A, Attiny26, Attiny261/A, Attiny28, AT90s2333, Attiny22,Attiny25, AT90s2313, AT90s2323, AT90s23434kB:Atmega48/A, Atmega48P/PA, Attiny461/A, Attiny43U, Attiny4313, Attiny44/A, Attiny48, AT90s4433, AT90s4414, AT90s4434, Attiny458kB:Atmega8515, Atmega8535, Atmega8/A, Atmega88/A, Atmega88P/PA, AT90pwm1, AT90pwm2, AT90pwm2B, AT90pwm3, AT90pwm3B, AT90pwm81, AT90usb82, Attiny84, Attiny85, Attiny861/A, Attiny87, Attiny88, AT90s8515, AT90s853516kB:Atmega16/A, Atmega16U2, Atmega16U4, Atmega16M1, Atmega161, Atmega162, Atmega163, Atmega164A, Atmega164P/PA, Atmega165A/P/PA, Atmega168/A, Atmega168P/PA, Atmega169A/PA, Attiny167, AT90pwm216, AT90pwm316, AT90usb16232kB:Atmega32/A, Atmega32C1, Atmega323/A, Atmega32U2, Atmega32U4, Atmega32U6, Atmega32M1, Atmega324A, Atmega324P, Atmega324PA, Atmega325, Atmega3250, Atmega325A/PA, Atmega3250A/PA, Atmega328, Atmega328P, Atmega329, Atmega3290, Atmega329A/PA, Atmega3290A/PA, AT90can3264kB:Atmega64/A, Atmega64C1, Atmega64M1, Atmega649, Atmega6490, Atmega649A/P, Atmega6490A/P, Atmega640, Atmega644/A, Atmega644P/PA, Atmega645, Atmega645A/P, Atmega6450, Atmega6450A/P, AT90usb646, AT90usb647, AT90can64128kB:Atmega103, Atmega128/A, Atmega1280, Atmega1281, Atmega1284, Atmega1284P, AT90usb1286, AT90usb1287, AT90can128256kB:

Atmega2560, Atmega2561

Успешно вылечил свои микроконтроллеры.Теперь в программаторе USB ISP микроконтроллеры Atmega читаються и прошиваються.

Скачать с Яндекс Диска прошивку и печатную плату

AliExpress Программатор USB ISP для прошивки кристала Atmega

AliExpress Atmega8

Источник: http://migsat.ru/master-remont/132-atmega-fusebit-doctor-ispravlyaem-mikrokontroller.html

Fuse-бит доктор с LED индикатором

Дата публикации: 10 декабря 2014.

Рейтинг:  4 / 5

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

– микроконтроллер Atmel AVR ATtiny2313;- 4-разрядный семисегментный индикатор с общим анодом;- два резистора номиналом 4.7 кОм;

– NPN транзистор BC547 или эквивалентный;

– интегральный регулятор напряжения 78L05;- небольшая макетная плата;

– источник напряжения +12 В.

Принципиальная схема

Для минимизации числа компонентов индикатор подключен к микроконтроллеру непосредственно. Не используются транзисторы и токоограничительные резисторы.

В таком методе задействованы 12 линий ввода/вывода микроконтроллера (4 разряда + 7 сегментов + десятичная точка).

для Attiny2313 необходимо выставить такие фьюз-биты: lfuse: 0xE4, hfuse: 0xDF, efuse: 0xFF, частота тактирования контроллера 8 МГц.

Для режима высоковольтного последовательного программирования нужно 6 сигнальных линий от микроконтроллера ATtiny2313.

Нам потребуется подать +5 В для питания целевого микроконтроллера, +12 В на вывод Reset целевого микроконтроллера, сигнал SCI (serial clock input), сигнал SII (serial instruction input), сигнал SDI (serial data input) и SDO (serial data out)/ Для этого мы используем оставшиеся свободные линии ввода/вывода ATtiny2313. Некоторые линии ввода/вывода будем использовать одновременно в интерфейсе HVSP и для управления индикатором.

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

После подачи питания считывается сигнатура целевого микроконтроллера по интерфейсу HVSP, по которой определяется имя целевого микроконтроллера. Затем считываются Fuse-биты (младший, старший и расширенный).

Значения Fuse-битов могут быть прочитаны пользователем путем нажатия кнопки, значения отображаются в шестнадцатеричном формате.

Нажатие и удержание кнопки около 1 секунды переводит устройство в режим программирования заводских установок Fuse-битов. По окончанию программирования считывание значений повторяется, и пользователь может удостовериться в верности установок. Так же легко можно восстановить работоспособность смартфона программой SP Flash Tool на примере UMI XII.

Для питания необходим внешний источник напряжения +12 В. Установленный регулятор напряжения +5 В используется для питания целевого и управляющего микроконтроллера. Автором, для питания схемы, была применена батарея типа A23 с напряжением 12 В.

Транзистор BC547 используется для подачи напряжения программирования +12 В на вход Reset целевого микроконтроллера.

Использование

– установите целевой микроконтроллер в слот;- подайте питание +12 В на схему;- на дисплее отобразится имя целевого микроконтроллера после идентификации по сигнатурным байтам;- нажимайте кнопку для смены контента дисплея (имя контроллера, старший байт, младший байт, расширенный байт);

– нажмите и удерживайте кнопку около 1 секунды для сброса Fuse-битов к заводским настройкам.

 Источник: simpleavr

   Уверен, многие имеют микроконтроллеры с неправильно прошитыми фузами и непригодными для дальнейшего использования. Но не спешите их выбрасывать – есть интересное устройство, специально предназначенное для исправления ошибочно установленных фьюзов. Представляем «» – это устройство предназначено вернуть к жизни с неправильно прошитыми фьзами. Такими фьюзами могут быть:

CKSEL фьюзы выбора задающего генератора (выбран внешний генератор при его отсутствии или выбрана очень маленькая частота внутреннего);

SPIEN запрет последовательного программирования;

RSTDISBL использование ножки сброса как дополнительной линии ввода-вывода;

– установленные LOCK биты;

– другие, мешающие последовательному программированию.

   Принцип работы восстановителя прост – подаем на плату 12 вольт, вставляем в панельку «испорченный» микроконтроллер, нажимаем кнопочку «START» и в момент получаем новенький рабочий микроконтроллер. Очень просто, даже не нужен компьютер. И если внешне устройство выглядит просто, то внутри все гораздо сложнее.

При нажатии кнопки «START» устройство читает сигнатуру микроконтроллера-пациента, при этом, если она не читается, делается несколько попыток прочитать различными способами. После того как сигнатура прочитана по базе определяется тип микроконтроллера и восстанавливаются заводские, для данного микроконтроллера, установки фьюз бит.

Если сигнатура неизвестна или микроконтроллер выдает ее неверно устройство установит фьюз биты в такое состояние, при котором станет возможным последовательное программирование. При восстановлении фьюз бит прошивка микроконтроллера остается нетронутой. Еще на плате есть перемычка «ALLOW ERASE», при замыкании которой устройство полностью «обнулит» микроконтроллер.

Это нужно в том случае, если пациент «залочен», т.е. установлены защитные биты которые препятствуют чтению/записи микроконтроллера.

   Для индикации работы устройство имеет два светодиода – и .

– Если горит зеленый – пациент успешно вылечен, фьюз биты восстановлены до заводских. Если микроконтроллер «залочен» (LockBits включены), просто проверяются фьюз биты и если они совпадают с заводскими – загорается зеленый светодиод.

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

– Если зеленый мигает – сигнатура в порядке, фьюз биты с ошибкой, но исправить их невозможно, так как микроконтроллер «залочен» (LockBits включены), необходимо полное стирание микроконтроллера (нужно установить перемычку для стирания – «ALLOW ERASE»).

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

– Если Вы хотите получить более подробную информацию о процессе «лечения» – на плате есть выход UART. Отправьте этот сигнал на терминал и получите «распечатку» того, что было сделано. Установки для терминала:

 baudrate: 4800
 parity: none
 databits: 8
 stopbits: 1
 handshake: none

   На плате установлены три панельки для контроллеров на 20 (Attiny2313 …), 28(Atmega48/88/168, Atmega8 …), 40 (Atmega16, Atmega8535 …) ножек. Если Вы решили «полечить» другого «пациента», то на плате предусмотрен специальный разъем для подключения адаптеров с панельками под любой, нужный Вам, микроконтроллер. Устройство поддерживает аж 106 типов микроконтроллеров AVR. Вот полный список:

 1kB: AT90s1200, Attiny11, Attiny12, Attiny13/A, Attiny15

 2kB: Attiny2313/A, Attiny24/A, Attiny26, Attiny261/A, Attiny28, AT90s2333, Attiny22,Attiny25, AT90s2313, AT90s2323, AT90s2343

 4kB: Atmega48/A, Atmega48P/PA, Attiny461/A, Attiny43U, Attiny4313, Attiny44/A, Attiny48, AT90s4433, AT90s4414, AT90s4434, Attiny45

 8kB: Atmega8515, Atmega8535, Atmega8/A, Atmega88/A, Atmega88P/PA, AT90pwm1, AT90pwm2, AT90pwm2B, AT90pwm3, AT90pwm3B, AT90pwm81, AT90usb82, Attiny84, Attiny85, Attiny861/A, Attiny87, Attiny88, AT90s8515, AT90s8535

 16kB: Atmega16/A, Atmega16U2, Atmega16U4, Atmega16M1, Atmega161, Atmega162, Atmega163, Atmega164A, Atmega164P/PA, Atmega165A/P/PA, Atmega168/A, Atmega168P/PA, Atmega169A/PA, Attiny167, AT90pwm216, AT90pwm316, AT90usb162

 32kB: Atmega32/A, Atmega32C1, Atmega323/A, Atmega32U2, Atmega32U4, Atmega32U6, Atmega32M1, Atmega324A, Atmega324P, Atmega324PA, Atmega325, Atmega3250, Atmega325A/PA, Atmega3250A/PA, Atmega328, Atmega328P, Atmega329, Atmega3290, Atmega329A/PA, Atmega3290A/PA, AT90can32

 64kB: Atmega64/A, Atmega64C1, Atmega64M1, Atmega649, Atmega6490, Atmega649A/P, Atmega6490A/P, Atmega640, Atmega644/A, Atmega644P/PA, Atmega645, Atmega645A/P, Atmega6450, Atmega6450A/P, AT90usb646, AT90usb647, AT90can64

 128kB: Atmega103, Atmega128/A, Atmega1280, Atmega1281, Atmega1284, Atmega1284P, AT90usb1286, AT90usb1287, AT90can128

 256kB: Atmega2560, Atmega2561

   Схема устройства для восстановления испорченных микроконтроллеров довольно простая.

   Плата разведена хорошо, но есть один нюанс, о котором важно не забыть при сборке устройства. Ножки 40-ка пиновой панельки с 29 по 37 необходимо откусить (лучше в плате вообще не сверлить отверстия под эти ножки).

   Теперь осталось только прошить микроконтроллер ATmega8 и устройство готово! Данный вариант прошивки еще есть для микроконтроллеров: Atmega88, Atmega88P, Atmega168, Atmega168P, Atmega328, Atmega328P.

Прошивка для микроконтроллеров с 16kB и 32kB памяти, кроме того, выдает названия восстанавливаемых микроконтроллеров.

В результате работы «Atmega fusebit doctor» мною были возращены к жизни несколько ATtiny2313, ATmega48, Atmega8535. Схему испытал: феска.

   Форум по микроконтроллерам AVR

   Схемы на микроконтроллерах

Архив для статьи “Fuse-бит доктор с LED индикатором”
Описание: Файлы прошивки микроконтроллера и EEPROM
Размер файла: 2.55 KB Количество загрузок: 1 256 Скачать

Печать E-mail

Авторизация

Сейчас 157 гостей и ни одного зарегистрированного пользователя на сайте

Источник: https://radioparty.ru/prog-avr/551-fuse-bits-doctor-seven-segmen

Востанавливаем фьюзы на микроконтроллерах Attiny через Arduino

 Так уж получилось ,что мне пришли Attiny13 с заблокированным фьюзом RSTDISBL – в ячейках фьюзов был зашит мусор.Паралельно с перепиской с продавцом начались поиски решения проблемы.

Напомню,что у большинства микроконтроллеров Atmel вывод reset можно перепрограммировать в обычный вывод ,и в этом случае прошивка по SPI становится недоступно – программирование в этом случае возможно только через HVSP / HVPP программаторы:

HVSP(High Voltage Serial Programming) – это последовательный высоковольтный программатор для микроконтроллеров с малым количеством выводов. 

HVPP(High Voltage Parallel Programming) – это паралельный высоковольтный программатор для микроконтроллеров с большим количеством выводов.

В интернете найден вариант доктора фьюзов Atmega fusebit doctor  на основе микроконтроллера,небольшого количества радиокомпонентов и переходников под разные м/к.Он поддерживает микроконтроллеры и с HVPP и с HVSP  вариантом.Устройство может востанавливать работу микроконтроллеров,у которых заблокирован reset (фьюз RSTDISBL)  ,spi (фьюз SPIEN).

Для востановления Attiny13 было решено собрать “экпресс” вариант доктора на макетной плате  и используя Arduino UNO.Схема была упрощена для использования только режимом с HVSP.

Получилась вот такая упрощенная схема:

 Список деталей:

R1,R6 – 4.7 kOm.

R2,R4,R8,R9,R10,R11,R12 – 1 kOm.

R3 – 10kOm

R5,R7 – 100 Om.

Транзисторы – любые подходящие:

Q1 – N-P-N. Например 2N3904.

Q2 – P-N-P. Например 2N3906.

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

Для наших целей необходим прошитый фьюз доктором микроконтроллер Atmega328P ,Atmega168,Atmega88 или Atmega 8,который должен быть установлен в Arduino.

К сожалению микроконтроллер необходимо прошивать другим программатором,так как мы будем менять фьюзы для использования внутреннего генератора:

Atmega 8 L:0xE1 H:0xD1Atmega88,Atmega168 L:0x62 H:0xD7 E:0xF9

Atmega328 L:0x62 H:0xD1 E:0xFF

Рекомендуемые м/к : Atmega328 или Atmega168 -они поддерживают управление через консоль последовательного порта.В других м/к это не возможно.

Пример прошивки  микроконтроллера Atmega328 через USBasp :

avrdude -c usbasp -p m328 -U flash:w:atmega_fusebit_doctor_2.11_m328p.hex -U hfuse:w:0xD1:m -U lfuse:w:0x62:m -U efuse:w:0xFF:m

Пример прошивки  микроконтроллера Atmega328 через Arduino :

avrdude -c avrisp -P COM1 -b 19200 -p m328 -U flash:w:atmega_fusebit_doctor_2.11_m328p.hex -U hfuse:w:0xD1:m -U lfuse:w:0x62:m -U efuse:w:0xFF:m

Прошивки можно найти на официальном сайте или тут.Для каждого микроконтроллера имеется своя прошивка.

Если fusebit doctor больше не нужен,то состояние фьюзов можно вернуть ,воспользовшись функцией “записать загрузчик” в Arduino IDE подключив микроконтроллер так же через программатор.

Сборка схемы:

На картинке макетной платы не подключена точка 12 вольт к источнику питания.Я воспользовался выводом Vin.Если вы будете использовать напряжение с этого же вывода,то для начала проверте соотвествует ли оно нашим требованиям.

Обратите внимание,что на принципиальной схеме не отображена перемычка оранжевого цвета,которая разрешает режим erase – полное стирание микроконтроллера.Она необходима только,если у заблокированного микроконтроллера установлены lock биты.

Резисторы на 1к , которые подключены между микроконтроллерами -не обязательны,но они защищают прошивающий микроконтроллер от нештатных ситуаций.Вы можете упростить схему,но на свой страх и риск.

Перед первым запуском внимательно проверте все соединения – при возможных ошибках с питанием 12 вольт вы можете вывести из троя микроконтроллеры !

Сброс фьюзов на примере Attiny85:

Если вы уверены в отсутствии ошибок,то можете подключить питание к Arduino.Не забываем про внешнее питание +12 вольт.

Запускаем в среде Arduino IDE монитор порта и установливаем скорость 4800.Монитор последовательного порта можно использовать и другой.

Нажимаем кнопку reset на Arduino и мы должны увидеть данные пациента,на скриншоте показан уже сброшенный микроконтроллер:

Для сброса фьюзов по умолчанию необходимо ввести цифру 1 -write fusebits.После этого вы должны увидеть состояние :

Что значит установка фьюзов прошла успешно.

Если на микроконтроллере установлены lock биты,то сброс фьюзов будет не возможен,пока не будет выполнено полное стирание.В строке Lockbits  будет указан статус ENABLED.

Для того,чтобы разблокировать микроконтроллер необходимо установить перемычку,выделенную оранжевым цветом(А4 на GND) и выбрать в меню пункт 4 – chip erase.Далее ,после разблокировки мы уже можем сбрасывать и сами фьюзы через опцию меню под номером 1.

Источник: http://homes-smart.ru/index.php/oborudovanie/arduino/48-vostanavlivaem-fyuzy-na-mikrokontrollerakh-attiny-cherez-arduino

Восстановление конфигурации Fuse-битов микроконтроллеров AVR – tiny (HVSP)

Читать все новости ➔

    При разработке устройств на микроконтроллерах AVR часто требуется изменение конфигурации Fuse-битов (например, для изменения источника тактовой частоты, включения/выключения дополнительных функций). Все микроконтроллеры AVR имеют возможность внутрисхемного программирования (последовательный протокол). Однако при конфигурировании Fuse-битов легко допустить ошибку, что очень часто случается у новичков, и в итоге, при следующей попытке внутрисхемно запрограммировать микроконтроллер, программатор сообщает об ошибке (например, микроконтроллер не обнаружен).

Распространенными случаями является ошибочное отключение вывода Reset микроконтроллера (Fuse-бит RSTDISBL, для возможности использовать его как линию ввода/вывода) или отключение режима ISP программирования (Fuse-бит SPIEN) – в этих случаях внутрисхемное программирование станет невозможным.

Данное устройство – Attiny fusebit doctor – позволяет восстановить конфигурацию Fuse-битов (заводские установки, согласно техническому описанию) микроконтроллеров семейства Tiny фирмы Atmel. Поддерживает все микроконтроллеры, которые имеют интерфейс высоковольтного последовательного программирования (HVSP):

– в 8-выводном корпусе: Attiny11, Attiny12, Attiny13, Attiny15, Attiny25, Attiny45, Attiny85, Attiny22, AT90s2323, AT90s2343; – в 14-выводном корпусе: Attiny24, Attiny44, Attiny84;

– в 20-выводном корпусе, со специальным адаптером: Attiny261, Attiny461, Attiny861.

Схема устройства

Устройство очень простое в изготовлении, не содержит дорогостоящих компонентов.

Основой является микроконтроллер ATtiny2313, а также несколько резисторов и транзисторов (BC547, BC557), регулятор напряжения +5 В (7805T).

Стоит заметить, что для питания устройства необходим стабилизированный источник питания с выходным напряжением +12 В (что важно для инициализации режима высоковольтного программирования).

При программировании Fuse-битов микроконтроллера следует учитывать, что используется внутренний осциллятор 4 МГц без делителя на 8. А также можно включить опцию «fast rising power».

Восстановление конфигурации микроконтроллера (пациента) начинается по нажатию кнопки Start. Для индикации статуса предусмотрены два светодиода, состояния которых обозначают:

– включен зеленый светодиод – конфигурация Fuse-битов восстановлена.

Если установлены Lock-биты, то проверяется только соответствие текущей конфигурации битов заводским установкам и если она совпадает, то включается зеленый светодиод;
– включен красный светодиод – ошибка при считывании сигнатуры микроконтроллера: невозможно прочитать, отсутствует микроконтроллер в сокете или сигнатура не совпадает с имеющимися в базе данных устройства;
– мигает зеленый светодиод – сигнатура верна, конфигурация Fuse-битов не верная. Lock-биты установлены, требуется операция стирания Flash-памяти;
– мигает красный светодиод – сигнатура верна, lock-биты не установлены, но по некоторым причинам Fuse-биты не могут быть записаны, не проходит проверка после 10 попыток.

Устройство для восстановления Fuse-битов действует согласно протокола высоковольтного последовательного программирования.

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

После этого выполняется операция стирания, если пользователь указал это. Следующий этап – считывание lock-битов и, если они не установлены, то контроллер получает новую конфигурацию Fuse-битов, соответствующую модели микроконтроллера – пациента.

После этого выполняется проверка установки (верификация) Fuse-битов и, если тест проходит удачно, устройство заканчивает свою работу. В противном случае устройство повторяет цикл запись-верификация Fuse-битов 10 раз.

Подключение выводов микроконтроллеров в режиме высоковольтного последовательного программирования.

На плате установлены две перемычки (джамперы) «chip erase» и «unknown signature»:

chip erase – разрешает операцию стирания всей Flash-памяти чипа. Это необходимо в том случае, если установлены lock-биты, т.е. нет возможности исправить Fuse-биты, пока не будут сняты lock-биты. Джампер включен – операция стирания разрешена.

unknown signature – неизвестная сигнатура чипа – явление очень редкое, но все же случается, что чип стер свою сигнатуру.

Сигнатура, байты калибровки и другие данные не могут неизменно храниться в структуре чипа, они могут быть случайно повреждены (стерты) в случае нестабильного электропитания в процессе программирования.

Обычно в таких случаях получаемые значения сигнатуры – FF FF FF, но чип работает нормально, Flash-память можно считать и записать.

Если считанная сигнатура не совпадает ни с одной из базы данных устройства (включая значения FF FF FF и 00 00 00), то при включении этого джампера устройство запишет универсальную конфигурацию Fuse-битов. Универсальная конфигурация означает, что будет восстановлен ISP (включение бита SPIEN) и функциональность вывода Reset (отключение бита RSTDISBL) микроконтроллера, опции осциллятора затронуты не будут. При таких действиях микроконтроллер получит возможность дальнейшего восстановления, но уже при помощи обычного SPI программатора.

Внимание! Не используйте опцию «unknown signature» с микроконтроллерами ATtiny11 или ATtiny15.

Архив для статьи “Восстановление конфигурации Fuse-битов микроконтроллеров AVR – tiny (HVSP)”

Возможно, Вам это будет интересно:

Источник: http://meandr.org/archives/8119

Ссылка на основную публикацию
Adblock
detector
",css:{backgroundColor:"#000",opacity:.6}},container:{block:void 0,tpl:"
"},wrap:void 0,body:void 0,errors:{tpl:"
",autoclose_delay:2e3,ajax_unsuccessful_load:"Error"},openEffect:{type:"fade",speed:400},closeEffect:{type:"fade",speed:400},beforeOpen:n.noop,afterOpen:n.noop,beforeClose:n.noop,afterClose:n.noop,afterLoading:n.noop,afterLoadingOnShow:n.noop,errorLoading:n.noop},o=0,p=n([]),h={isEventOut:function(a,b){var c=!0;return n(a).each(function(){n(b.target).get(0)==n(this).get(0)&&(c=!1),0==n(b.target).closest("HTML",n(this).get(0)).length&&(c=!1)}),c}},q={getParentEl:function(a){var b=n(a);return b.data("arcticmodal")?b:(b=n(a).closest(".arcticmodal-container").data("arcticmodalParentEl"),!!b&&b)},transition:function(a,b,c,d){switch(d=null==d?n.noop:d,c.type){case"fade":"show"==b?a.fadeIn(c.speed,d):a.fadeOut(c.speed,d);break;case"none":"show"==b?a.show():a.hide(),d();}},prepare_body:function(a,b){n(".arcticmodal-close",a.body).unbind("click.arcticmodal").bind("click.arcticmodal",function(){return b.arcticmodal("close"),!1})},init_el:function(d,a){var b=d.data("arcticmodal");if(!b){if(b=a,o++,b.modalID=o,b.overlay.block=n(b.overlay.tpl),b.overlay.block.css(b.overlay.css),b.container.block=n(b.container.tpl),b.body=n(".arcticmodal-container_i2",b.container.block),a.clone?b.body.html(d.clone(!0)):(d.before("
"),b.body.html(d)),q.prepare_body(b,d),b.closeOnOverlayClick&&b.overlay.block.add(b.container.block).click(function(a){h.isEventOut(n(">*",b.body),a)&&d.arcticmodal("close")}),b.container.block.data("arcticmodalParentEl",d),d.data("arcticmodal",b),p=n.merge(p,d),n.proxy(e.show,d)(),"html"==b.type)return d;if(null!=b.ajax.beforeSend){var c=b.ajax.beforeSend;delete b.ajax.beforeSend}if(null!=b.ajax.success){var f=b.ajax.success;delete b.ajax.success}if(null!=b.ajax.error){var g=b.ajax.error;delete b.ajax.error}var j=n.extend(!0,{url:b.url,beforeSend:function(){null==c?b.body.html("
"):c(b,d)},success:function(c){d.trigger("afterLoading"),b.afterLoading(b,d,c),null==f?b.body.html(c):f(b,d,c),q.prepare_body(b,d),d.trigger("afterLoadingOnShow"),b.afterLoadingOnShow(b,d,c)},error:function(){d.trigger("errorLoading"),b.errorLoading(b,d),null==g?(b.body.html(b.errors.tpl),n(".arcticmodal-error",b.body).html(b.errors.ajax_unsuccessful_load),n(".arcticmodal-close",b.body).click(function(){return d.arcticmodal("close"),!1}),b.errors.autoclose_delay&&setTimeout(function(){d.arcticmodal("close")},b.errors.autoclose_delay)):g(b,d)}},b.ajax);b.ajax_request=n.ajax(j),d.data("arcticmodal",b)}},init:function(b){if(b=n.extend(!0,{},a,b),!n.isFunction(this))return this.each(function(){q.init_el(n(this),n.extend(!0,{},b))});if(null==b)return void n.error("jquery.arcticmodal: Uncorrect parameters");if(""==b.type)return void n.error("jquery.arcticmodal: Don't set parameter \"type\"");switch(b.type){case"html":if(""==b.content)return void n.error("jquery.arcticmodal: Don't set parameter \"content\"");var e=b.content;return b.content="",q.init_el(n(e),b);case"ajax":return""==b.url?void n.error("jquery.arcticmodal: Don't set parameter \"url\""):q.init_el(n("
"),b);}}},e={show:function(){var a=q.getParentEl(this);if(!1===a)return void n.error("jquery.arcticmodal: Uncorrect call");var b=a.data("arcticmodal");if(b.overlay.block.hide(),b.container.block.hide(),n("BODY").append(b.overlay.block),n("BODY").append(b.container.block),b.beforeOpen(b,a),a.trigger("beforeOpen"),"hidden"!=b.wrap.css("overflow")){b.wrap.data("arcticmodalOverflow",b.wrap.css("overflow"));var c=b.wrap.outerWidth(!0);b.wrap.css("overflow","hidden");var d=b.wrap.outerWidth(!0);d!=c&&b.wrap.css("marginRight",d-c+"px")}return p.not(a).each(function(){var a=n(this).data("arcticmodal");a.overlay.block.hide()}),q.transition(b.overlay.block,"show",1*")),b.overlay.block.remove(),b.container.block.remove(),a.data("arcticmodal",null),n(".arcticmodal-container").length||(b.wrap.data("arcticmodalOverflow")&&b.wrap.css("overflow",b.wrap.data("arcticmodalOverflow")),b.wrap.css("marginRight",0))}),"ajax"==b.type&&b.ajax_request.abort(),p=p.not(a))})},setDefault:function(b){n.extend(!0,a,b)}};n(function(){a.wrap=n(document.all&&!document.querySelector?"html":"body")}),n(document).bind("keyup.arcticmodal",function(d){var a=p.last();if(a.length){var b=a.data("arcticmodal");b.closeOnEsc&&27===d.keyCode&&a.arcticmodal("close")}}),n.arcticmodal=n.fn.arcticmodal=function(a){return e[a]?e[a].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof a&&a?void n.error("jquery.arcticmodal: Method "+a+" does not exist"):q.init.apply(this,arguments)}}(jQuery)}var debugMode="undefined"!=typeof debugFlatPM&&debugFlatPM,duplicateMode="undefined"!=typeof duplicateFlatPM&&duplicateFlatPM,countMode="undefined"!=typeof countFlatPM&&countFlatPM;document["wri"+"te"]=function(a){let b=document.createElement("div");jQuery(document.currentScript).after(b),flatPM_setHTML(b,a),jQuery(b).contents().unwrap()};function flatPM_sticky(c,d,e=0){function f(){if(null==a){let b=getComputedStyle(g,""),c="";for(let a=0;a=b.top-h?b.top-h{const d=c.split("=");return d[0]===a?decodeURIComponent(d[1]):b},""),c=""==b?void 0:b;return c}function flatPM_testCookie(){let a="test_56445";try{return localStorage.setItem(a,a),localStorage.removeItem(a),!0}catch(a){return!1}}function flatPM_grep(a,b,c){return jQuery.grep(a,(a,d)=>c?d==b:0==(d+1)%b)}function flatPM_random(a,b){return Math.floor(Math.random()*(b-a+1))+a}