Доктор avr контроллеров своими руками

Параллельный программатор / фьюз-бит доктор для контроллеров avr

Получив из Китая очередную партию чипов ATtiny2313 для изготовления шлюзов UART-to-I2C/SPI/1W я, вдруг, обнаружил, что эти чипы совершенно невозможно прошить последовательным внутрисхемным (ICSP) программатором. Чипы при этом были в заводской упаковке и без следов пайки. Ранее я уже сталкивался с ситуациями, когда китайцы продавали новые рабочие чипы, но заранее прошитые под какие-либо устройства (например, — вот). Такие чипы прошивают нужной прошивкой прямо на заводе, но, видимо, время от времени случаются накладки, заказчик не забирает партию и чипы попадают в открытую продажу.

Ситуация в общем-то обычная, сложность же конкретно с контроллерами AVR заключается в том, что при сбросе определённых фьюзов, прошить контроллер становится возможно только параллельным программатором в режиме высоковольтного программирования (с использованием напряжения +12 Вольт). Схемы фьюз-докторов для AVR можно найти в интернете, однако минус всех этих схем заключается в полном отсутствии описания их работы. Выложена просто готовая прошивка, которую нужно залить в управляющий схемой контроллер, включить, нажать кнопку и будет вам счастье. Ни исходников, ни подробностей, вообще никаких объяснений.

Для меня, как для радиохламера, такой подход совершенно невозможен и невыносим, поэтому решено было разработать свой собственный программатор / фьюз-бит доктор для микроконтроллеров AVR, описать как он работает и выложить в открытый доступ не только прошивку, но и исходники программы для микроконтроллера с комментариями. Итак, поехали:

В любом даташите на микроконтроллеры AVR есть глава «Memory Programming». Если микроконтроллер поддерживает параллельное программирование (здесь и далее в этой статье под этим термином понимается заливка прошивки в микроконтроллер), то в этой главе есть раздел «Parallel Programming». В этом разделе, во-первых, описано какие сигналы и ноги используются при параллельном программировании, во-вторых, описаны используемые при этом команды и алгоритмы и, в третьих, приводятся диаграммы сигналов. В общем, — всё, что нужно для успеха операции.

Для начала разберёмся с сигналами. Сигналы используются следующие:

  • 8 сигналов для параллельного приёма/передачи байта данных DATA[7:0]. Сигналы передаются в обоих направлениях в зависимости от сигнала OE.
  • 9 служебных сигналов:
    • RDY/BSY — уровень на этой линии сигнализирует о готовности контроллера принимать новые команды. Данные передаются от контроллера к программатору
    • OE — служит для переключения линий данных на вход (высокий уровень) или на выход (низкий уровень)
    • WR — используется для старта выполнения каких-либо действий (стирание / запись …)
    • BS2, BS1 — эти две линии используются для выбора старших или младших байт
    • XA1, XA0 — по уровням на этих двух линиях определяется какое действие будет выполняться по наличию тактового импульса
    • PAGEL — используется при программировании Flash/EEPROM
    • XTAL1 — используется для подачи тактовых импульсов

Кроме этого нам потребуется напряжение +12 Вольт (для перехода в режим программирования), +5 Вольт — для питания контроллера, ну и естественно нужно будет подключить нулевой провод, относительно которого задаются +12 и +5 Вольт, к ноге GND.

В некоторых контроллерах какие-то сигналы могут быть объединены (например, в ATtiny2313 объединены ноги BS1 и PAGEL, а также XA1 и BS2), кроме того, могут отличаться номера ног, на которые заводятся эти сигналы (например, в ATmega8 для данных используются два младших бита порта C и 5 младших бит порта B, а в ATtiny2313 для данных используется только порт B целиком).

С алгоритмами тоже всё оказалось довольно просто, — вся задача сводится к выставлению нужных уровней на некоторые служебные линии (XA1, XA0, BS2, BS1, OE) и линии данных, а также к генерированию положительных или отрицательных импульсов на других служебных линиях (XTAL1, WR, PAGEL). Плюс нужно управлять питанием +5 Вольт (+1 линия) и напряжением +12 Вольт (ещё +1 линия). Управление всеми нужными линиями решено было сделать командами через UART (для этого нужно ещё 2 линии).

Исходя из всего выше описанного, для реализаци устройства нужно иметь 21 линию I/O (8 — данные + 9 — служебные сигналы + 2 — управление линиями +5 и +12 Вольт + 2 — uart), что, согласитесь, довольно много. Чтобы ног на всё хватило, в качестве управляющего контроллера была выбрана ATmega8 (для прототипа, естественно, в dip-корпусе), — у неё 23 линии I/O.

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

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

  • разводка выполнена для одностороннего текстолита (не нужно совмещать разные стороны при переносе рисунка на плату)
  • использован контроллер в dip-корпусе (возможность установки в кроватку + большие расстояния между ножками обеспечивают лёгкость пайки)
  • все нужные контакты выведены на линейки с большим шагом (2,54 мм)
  • есть разъём для внутрисхемного программирования управляющего контроллера (для отладки очень удобно прошивать контроллер прямо на плате, не вынимая из кроватки)

При разводке платы я также предусмотрел установку конденсаторов по линиям питания +5 и +12 Вольт (прямо рядом с разъёмом питания). Эти конденсаторы на схеме не нарисованы, но я решил их на всякий случай поставить. Большого тока схема не потребляет, поэтому будет достаточно конденсаторов на 10-47 мкФ, рассчитанных на максимальное напряжение 16-25 Вольт и выше.

После сборки устройство выглядит вот так:

В соответствии с приведёнными в даташитах алгоритмами и диаграммами наш программатор должен уметь делать следующие вещи:

  • переходить в режим программирования
  • устанавливать и считывать уровни на линиях DATA[7:0]
  • выставлять правильные уровни на линиях XA1, XA0, BS2, BS1, OE
  • генерировать импульсы заданной ширины на линиях WR, XTAL1, PAG

Учитывая, что переходить в режим программирования нужно из какого-то начального состояния, а также то, что линия PAG может быть совмещена с BS1, — для реализации заявленного выше функционала нам хватит всего 11-дцати UART-команд, которые я просто пронумеровал от 0x1 до 0xB:

  • 0x01 — установить все используемые для программирования выводы (включая выводы, управляющие линиями +5 и +12 вольт) в начальное состояние
  • 0x02 — выполнить алгоритм перехода в режим программирования
  • 0x03 — выполнить алгоритм выхода из режима программирования
  • 0x04 — установить нужное состояние на линиях XA1/XA0 и BS2/BS1
  • 0x05 — установить нужное состояние на линии OE
  • 0x06 — сформировать положительный импульс на линии BS1
  • 0x07 — сформировать положительный импульс на линии PAG
  • 0x08 — сформировать положительный импульс на линии XTAL1
  • 0x09 — сформировать отрицательный импульс на линии WR
  • 0x0A — установить нужные уровни на линиях Data[7:0]
  • 0x0B — прочитать состояния линий Data[7:0]

Теперь некоторые моменты обсудим более детально:

Во-первых. В даташитах написано, что перед переходом в режим программирования нужно установить сигналы XA1, XA0, BS1 и WR (они называются Prog_enable) в ‘0000’. Поскольку сигнал на линии WR инвертирован (active low) и далее на всех диаграммах он начинается с высокого уровня, то логично было бы предположить, что его начальное состояние — это высокий уровень (именно он для него означает 0). На деле оказалось, что это работает только после подачи питания, а до подачи питания для всех ног 0 — это низкий уровень, и перед переходом в режим программирования все ноги, входящие в группу Prog_enable должны быть притянуты к низкому уровню.

Читайте также:  Домик для выгула цыплят своими руками

Сам алгоритм перехода в режим программирования банален, — после того, как все линии Prog_enable притянуты к низкому уровню — нужно включить питание +5 Вольт и далее через 20-60 мкс включить напряжение +12 Вольт. Через 10 мкс после этого можно начинать переключать линии Prog_enable, а через 300 мкс — загружать каманды.

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

Далее. Как можно заметить, для выполнения некоторых команд из приведённого выше списка нужны дополнительные данные. Например, команда «установить нужное состояние на линии OE» не позволяет сделать никаких выводов о том, что это за нужное состояние. Для таких команд мы будем устанавливать специальные флаги, которые будут означать, что следующий принимаемый по UART байт — это не новая команда, а те самые данные о «нужных состояниях» линий (состояния линий будут соответствовать определённым битам полученного байта).

Ну и, наконец, чтобы как-то сообщить компьютеру о том, что предыдущий принятый байт обработан и можно посылать следующий — будем отсылать обратно на компьютер 0x00 в случае успешной обработки очередного принятого байта или 0xFF в случае его неуспешной обработки. Вот, собственно, и вся концепция.

Исходя из всего вышеописанного получилась следующая программа:

;— radiohlam.ru — .device ATmega8 .include «m8def.inc» .list ;— по-умолчанию фьюзы CSEL = 0001 (1 МГц), нужно поставить CSEL = 0100 (8 МГц) ;— определяем свои переменные (и раздаём под них регистры) .def w=r16 ; аккумулятор (обменник) .def wait_flags=r17 ; флаги ожидания данных (0 — XA1/XA0/BS2/BS1, 1 — OE, 2 — Data) .def fd_reg=r19 ; счётчик для организации быстрых (маленьких) задержек (шаг 1 мкс) .def ld_reg=r20 ; счётчик для организации медленных (больших) задержек (шаг 200 мкс) .def w2=r21 ; ещё одна переменная для временного хранения всякой фигни ;— определяем названия выводов и портов .equ Data_Out = 0x18 ; порт B — вывод данных (линии данных на выход) .equ Data_In = 0x16 ; порт B — ввод данных (линии данных на вход) .equ RDY = 0 ; PC0 .equ BS1 = 1 ; PC1 .equ BS2 = 2 ; PC2 .equ XA0 = 3 ; PC3 .equ XA1 = 4 ; PC4 .equ PAG = 5 ; PC5 .equ OE = 2 ; PD2 .equ XTAL1 = 3 ; PD3 .equ WR = 4 ; PD4 .equ Ctrl_12 = 6 ; PD6 .equ Ctrl_5 = 7 ; PD7 .equ RxD = 0 ; PD0 .equ TxD = 1 ; PD1 .equ MinCommandNumber = 0x1 ; минимальный номер команды .equ MaxCommandNumber = 0xB ; максимальный номер команды ;—————————————— ;— начало программного кода .cseg .org 0 rjmp Init ; переход на начало программы (вектор сброса) ;— дальше идут вектора прерываний ;— если не используем — reti, иначе — переход на начало обработчика reti ; внешнее прерывание INT0 reti ; внешнее прерывание INT1 reti ; Timer2 COMP reti ; Timer2 OVF reti ; Timer1 CAPT reti ; Timer1 COMPA reti ; Timer1 COMPB reti ; Timer1 OVF reti ; Timer0 OVF reti ; SPI, STC rjmp RX_INT ; USART, Rx complete reti ; USART, DataRegister Empty reti ; USART, Tx complete reti ; ADC conversion complete reti ; EEPROM ready reti ; Analog comparator reti ; TWI (two-wire serial interface) reti ; Store Program Memory Ready ;— начало программы Init: ;— устанавливаем указатель вершины стека на старший байт RAM ldi w,Low(RAMEND) out SPL,w ; младший байт адреса ldi w,High(RAMEND) out SPH,w ; старший байт адреса ;— отключаем лишнее sbi ACSR,ACD ; выключаем компаратор ;— инициализируем порты ;— DDR — направление работы (0 — вход, 1 — выход) ;— PORT — состояние защёлок / подтяжек (0 — низкий уровень / нет подтяжки, 1 — высокий уровень / есть подтяжка) ;— настраиваем PORTD (состояние — все, кроме PD2(OE), PD4(WR), PD7(+5) — нули, направление — все на выход) ldi w,0b10000000 out PORTD,w ldi w,0b11111111 out DDRD,w ;— настраиваем PORTC (состояние — все нули, направление — все на выход, кроме PC0(RDY)) clr w out PORTC,w ldi w, 0b11111110 out DDRC,w ;— настраиваем PORTB (состояние — все нули, направление — все на выход) clr w out PORTB,w ser w out DDRB,w ;— инициализируем UART clr w out UBRRH,w ; UBRR (для кварца 8 МГц и скорости 38400) ldi w,12 ; равен 12, т.е. UBRRH = 0, UBRRL = 12 out UBRRL,w ldi w,0b10001110 ; поднимаем биты USBS, UCSZ1:0 + старший бит (URSEL) должен быть 1 при записи в UCSRC ; в примере из оф.доки на мегу — косяк, они просто скопировали пример из 2313 ; (в 2313 старший бит был не важен) out UCSRC,w ; формат: 1 старт, 8 данные, 2 стоп ldi w, (1

Добавить комментарий Отменить ответ

Для отправки комментария вам необходимо авторизоваться.

Источник

Доктор avr контроллеров своими руками

Многие радиолюбители знают (иногда на собственном печальном опыте), что микроконтроллер AVR можно вывести из строя неосторожным программированием настроечных бит (так называемых фьюзов). Будучи запрограммированными неправильно, эти биты сохраняются в энергонезависимой памяти, и могут привести к невозможности дальнейшего программирования микроконтроллера или выбору фьюзами его тактовой частоты. По крайней мере невозможно восстановить микроконтроллер обычными средствами, без наличия специального высоковольтного HVPP/HVSP программатора.

Высоковольтный параллельный (HVPP) или последовательный (HVSP) программатор относится к профессиональным инструментальным средствам разработчика, и поэтому его купить непросто — из-за высокой цены и малой доступности. Польский радиолюбитель Pawel Kisielewski разработал несложное устройство, позволяющее восстанавливать состояние фьюзов микроконтроллера в состояние по умолчанию — Atmega fusebit doctor [1].

Примечание: к сожалению, разработчик не предоставил исходный код для Atmega fusebit doctor. Но даже несмотря на это, проект все равно обрел популярность. Также есть старый вариант такого же fuse-доктора, который предназначен только для лечения микроконтроллеров ATtiny [4], к нему исходники выложены.

Чаще всего причина проблем с фьюзами, из-за которых микроконтроллеры AVR приходят в негодность — неправильный выбор источника тактирования (биты фьюзов CKSEL), запрет программирования через SPI (бит фьюзов SPIEN), или запрет вывода сброса (фьюз RSTDISBL). Если в первом случае Вы можете помочь себе сами, подключив внешний источник тактов (некоторые программаторы AVR имеют для этого специальный выход), то 2-й и 3-й случаи ошибочной манипуляции с фьюзами нельзя вылечить стандартным последовательным программатором. Большинство радиолюбителей не знают, как собрать параллельный программатор, потому что это довольно сложно и дорого, и проще и быстрее купить новый микроконтроллер.

Atmega fusebit doctor, как следует из названия, это устройство, предназначенное для восстановления «убитых» микроконтроллеров AVR ATmega (и ATtiny начиная с версии v2.04 устройства) путем записи в них корректных значений бит фьюзов. Описанное простое и дешевое устройство позволит исправить Ваши брикнутые микроконтроллеры за несколько секунд.

RefDes# Номинал Шт. Примечание
R2, R7 , R8 , R9 , R10 , R11 , R12 , R13 , R14 , R15 , R16 , R17 , R18 , R19 , R20 , R21 , R22 , R23 , R24, R26 1k 20 0.125 Вт. Защитные резисторы помечены зеленым шрифтом, их можно поставить любым номиналом в диапазоне от 100 Ом до 1 кОм.
R4, R6 4.7k 2 0.125 Вт
R1, R27 10k 2 0.125 Вт
R3, R25 100 2 0.125 Вт
R5 330 1 0.125 Вт
C1 100µF 1 Напряжение 16V..25V, емкость не критична, может быть любая в диапазоне от 10 до 200 мкф.
C2 10µF 1 Напряжение 16V..25V, емкость не критична, может быть любая в диапазоне от 1 до 20 мкф.
C3 10nF 1 Емкость не критична, может быть любая в диапазоне от 10 до 100 нф.
IC1 7805 1 Любая аналогичная микросхема линейного стабилизатора напряжения. Например, также подойдет КРЕН5В.
IC2 ATmega8 1 Также подойдут ATmega88, ATmega88P, ATmega168, ATmega168P, ATmega328, ATmega328P, и их более новые (и низковольтные) версии с суффиксами A или L. Использовать микроконтроллеры с памятью от 16 килобайт и выше предпочтительнее, потому что можно использовать прошивку с расширенными возможностями консоли терминала (см. вопрос Q017). Для установки микроконтроллера нужна кроватка (сокет) на 28 ножек.
IC3 MEGA16-P 1 Кроватка на 40 ножек для микроконтроллеров в корпусах DIP40.
IC4 MEGA8-P 1 Кроватка на 28 ножек для микроконтроллеров в корпусах DIP28.
IC5 AT90S2313/TINY2313 1 Кроватка на 20 ножек для микроконтроллеров в корпусах DIP20.
T1, T3 BC557 2 Любой кремниевый транзистор структуры P-N-P. Печатная плата рассчитана на транзисторы, у которых база посередине.
T2 BC547 1 Любой кремниевый транзистор структуры N-P-N. Печатная плата рассчитана на транзисторы, у которых база посередине.
JP1 ERASE 1 Перемычка — 2 штырька с шагом 2.54 мм.
JP2 RS232 1 Коннектор для подключения терминала.
X1 1 Коннектор для подкючения внешнего питания.
SV2 1 Коннектор 20 выводов мама, для подключения плат раширения.
S1 1 Кнопка на замыкание.
LED1 Красный светодиод 1 Желательно использовать светодиоды с корпусом диаметром 3..4 мм.
LED2 Зеленый светодиод 1 Желательно использовать светодиоды с корпусом диаметром 3..4 мм.
Читайте также:  Выкройка шапочки для бассейна своими руками выкройка

HVPP расшифровывается как high voltage parallel programming, т. е. высоковольтное параллельное программирование.

HVSP расшифровывается как high voltage serial programming, т. е. высоковольтное последовательное программирование.

Это устройство использует параллельный и последовательный принципы высоковольтного программирования микроконтроллеров AVR. С помощью этих методов можно «достучаться» до убитых микроконтроллеров, у которых запрещен сброс или программирование ISP.

В настоящий момент поддерживается 145 типов микроконтроллеров AVR, но не все из них были протестированы. Те, что были проверены, подкрашены зеленым цветом. Автор просит в случае проблемы с каким-либо микроконтроллером сообщить ему, тогда он исправит ошибку. Список рассортирован по объему памяти программ микроконтроллера (FLASH).

1 килобайт: AT90s1200 , Attiny11, Attiny12, Attiny13/A , Attiny15

2 килобайта: Attiny2313/A , Attiny24/A, Attiny26 , Attiny261/A, Attiny28, AT90s2333, Attiny22, Attiny25 , AT90s2313 , AT90s2323, AT90s2343

4 килобайта: Atmega48/A , Atmega48P/PA, Attiny461/A , Attiny43U, Attiny4313, Attiny44/A, Attiny48, AT90s4433, AT90s4414, AT90s4434, Attiny45

8 килобайт: 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

32 килобайта: 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

64 килобайта: Atmega64/A, Atmega64C1, Atmega64M1, Atmega649, Atmega6490, Atmega649A/P, Atmega6490A/P, Atmega640, Atmega644/A , Atmega644P/PA , Atmega645, Atmega645A/P, Atmega6450, Atmega6450A/P, AT90usb646, AT90usb647, AT90can64

128 килобайт: Atmega103, Atmega128/A , Atmega1280 , Atmega1281, Atmega1284, Atmega1284P, AT90usb1286, AT90usb1287, AT90can128

256 килобайт: Atmega2560 , Atmega2561

[Как восстановить фьюзы «убитого» микроконтроллера]

Просто поместите убитый AVR в сокет, нажмите кнопку START и. и это все. Вы получите восстановленный, работоспособный микроконтроллер в том виде, как он пришел с завода Atmel. На плате fuse-доктора есть 3 слота для установки большинства совместимых микроконтроллеров AVR, которые совпадают с цоколевкой DIP-версий Atmega8, Atmega16, Attiny2313. Имеется также дополнительный коннектор, куда Вы можете подключить адаптеры:

#1 adapter расширение HVPP, для совместимых с 20-выводными Attiny26 и совместимых с 40-выводными Atmega8515.

HVSP adapter для 8-выводных и 14-выводных процессоров, которые можно запрограммировать через HVSP.

Вы можете создать свои собственные адаптеры для других типов процессоров, с DIP-корпусами или SMD, можно также использовать макетную плату (breadboard) для этой цели – просто подключите нужные сигналы к нужным выводам, используя разноцветные проводные перемычки (платы беспаечного макетирования breadboard и штыревые перемычки для них свободно продаются на aliexpress или других DIY-магазинах для радиолюбительского творчества).

Как определить, как подключить самому микроконтроллер? Откройте даташит на Ваш AVR, перейдите в раздел «memory programming», затем «parallel programming», посмотрите названия сигналов, все сигналы подписаны под слотом DIP40. В памяти fuse-доктора есть еще свободное место, так что проект может быть доработан в любое время.

Fuse-доктор смонтирован на односторонней печатной плате размером 55 x 92 мм. На верхней стороны необходимо установить несколько перемычек, либо можно сделать плату двухсторонней — выбор за Вами. Резисторы R7..R23 могут быть любого номинала от 100 Ом до 10 кОм, но лучше всего поставить от 470 Ом до 1 кОм.

Внимание: При монтаже кроватки DIP40 Вы должны удалить из неё контакты от 29 до 37. Для этих выводов восстанавливаемого микроконтроллера не нужен электрический контакт со схемой, и печатные проводники, которые проходят в этом месте позволили сделать плату меньше и дешевле (можно сделать плату, где токопроводящие дорожки находятся толькo с одной стороны). На картинке показано место, откуда нужно удалить контакты на кроватке DIP40.

[Использование fuse-доктора]

Перемычка ALLOW ERASE позволит fuse-доктору очистить всю память FLASH и EEPROM. Если эта перемычка не установлена, то fuse-доктор не будет очищать память, но в этом случае может и не вылечить микроконтроллер, если память микроконтроллера заблокирована битами защиты (lockbits).

После установки брикнутого AVR в сокет и нажатия кнопки START fuse-доктор инициирует запуск режима параллельного или последовательного высоковольтного программирования. Выбор будет сделан автоматически, fuse-доктор распознает адаптер HVSP и запустит восстановление в режиме HVSP. После этого fuse-доктор будет ждать появления лог. 1 на выводе RDY/BSY. Затем будет прочитана сигнатура восстанавливаемого AVR, и будет выполнена проверка, поддерживается ли этот микроконтроллер. На следующем шаге будет выполнена очистка памяти, если пользователь это разрешил (т. е. если установлена перемычка ALLOW ERASE). Затем будут проверены биты защиты lockbits, и если они не заблокированы, то fuse-доктор установит все биты фьюзов в фабричное состояние по умолчанию, учитывая возможное наличие расширенных байт битов фьюзов (у некоторых старых AVR есть только один байт фьюзов LOW, так что разные ситуации корректно обрабатываются). После того, как биты фьюзов проверены, fuse-доктор сообщает о результате миганием индикационных светодиодов.

[Светодиоды индикации]

Для индикации состояния на плате fuse-доктор установлены 2 светодиода — зеленый (GOOD) и красный (BAD).

Вот описание их работы:

Зеленый постоянно горит – пациент успешно вылечен, биты фьюзов восстановлены. Если разрешены биты защиты, то будет просто проведена проверка состояния фьюзов — заводское ли оно, и если это так, то зеленый светодиод загорается.

Красный постоянно горит – проблема с сигнатурой, её нельзя прочитать, нет микроконтроллера в сокете, или такой сигнатуры нет в базе данных fuse-доктора.

Зеленый мигает – сигнатура в порядке, но биты фьюзов в неправильном состоянии. Причина — установлены биты защиты, нужно разрешение на полную очистку восстанавливаемого AVR (см. выше описание перемычки ALLOW ERASE).

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

[Текстовый терминал]

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

Вы можете подключить fuse-доктор через интерфейс RS232 к компьютеру, и через него отслеживать на экране процесс восстановления фьюзов. Информация будет поступать в процессе выполнения всех действий через UART управляющего микроконтроллера fuse-доктора. Для корректного подключения требуется правильно согласовать TTL-уровни UART с подключением к компьютеру. Если у Вас старый компьютер, на котором сохранился традиционный RS-232, то понадобится преобразователь уровней наподобие MAX232 (или [2]). Если у Вас современный ноутбук, и нужно подключиться через USB, то используйте конвертеры USB — TTL UART [3].

Настройки терминала для подключения: скорость 4800 бод, без бита четности (parity: none), 8 бит данных, 1 стоп-бит, без наличия подтверждения передачи и без управления потоком (handshake: none, Flow control: none).

Читайте также:  Бахрома своими руками шарф

[Дополнительные замечания]

Последняя прошивка fuse-доктора — версия 2.11 (файл наподобие atmega_fusebit_doctor_2.11_mXXX.bin или atmega_fusebit_doctor_2.11_mXXX.hex от 01.05.2011). В предыдущей версии 2.10 были ошибки (в частности, не восстанавливались микроконтроллеры ATmega328P).

Для fuse-доктора используйте микроконтроллеры: ATmega8, ATmega88, ATmega88P, ATmega168, ATmega168P, ATmega328, ATmega328P, и их более новые (и низковольтные) версии с суффиксами A или L. Всегда используйте последнюю версию прошивки, память EEPROM прошивать не нужно.

Для питания fuse-доктора используйте стабилизированное, сглаженное напряжение постоянного тока 12V. Более высокое напряжение может повредить восстанавливаемый микроконтроллер!

Код программы fuse-доктора был написан на основе описаний режимов программирования HVPP и HVSP из даташитов подходящих микроконтроллеров AVR. Если Вам нужен fuse-доктор для семейства ATtiny AVR, то обратите внимание на предыдущий проект автора — Attiny fusebit doctor [4]. К сожалению, в этом проекте возможны некоторые ошибки, и он больше не поддерживается, потому что более новый Atmega fusebit doctor поддерживает все модели семейства ATtiny AVR. Однако этот проект также опубликован с исходным кодом, и при изучении даташита AVR в его исходном коде проще разобраться, чтобы понять механизм программирования.

Биты фьюзов. В микроконтроллере fuse-доктора используется внутренняя тактовая частота 1 МГц, и разрешен бит EESAVE (см. файл README). Таким образом, если Вы купили новый микроконтроллер, то никакие фьюзы менять не надо — микроконтроллер и так уже работает на частоте 1 МГц. Бит EESAVE не обязателен, т. к. запрещает очистку памяти EEPROM при перепрограммировании firmware (т. е. в данном случае программы fuse-доктора), а в программе fuse-доктора EEPROM просто используется для сохранения счетчика количества вылеченных чипов, которое посылается через UART терминала.

В обновлении 2.1X добавлена новая функциональность. Теперь через терминал можно послать нужное значение фьзов и битов защиты, и таким образом работать с чипами, у которых не распознана сигнатура. Если Вы подключите вывод терминала TX к выводу RX печатной платы fuse-доктора, то ручной режим будет разрешен автоматически. Это требует, чтобы в режиме ожидания на выводе TX терминала была лог. 1 — так и произойдет, если он будет подключен к TTL UART/RS232. Также необходимо на плате fuse-доктора наличие нижнего подтягивающего резистора (pulldown) номиналом 10 кОм. Если это условие не соблюдается, то fuse-доктор будет работать в обычном, автоматическом режиме.

Как работает новый функционал: сначала fuse-доктор читает сигнатуру восстанавливаемого чипа. И если с сигнатурой проблема (она не распознана), то будет предложено вручную вести сигнатуру. Введите 2 последних байта сигнатуры в шестнадцатеричном виде (4 HEX-символа) и нажмите Enter.

Затем fuse-доктор попробует прочитать чип в зависимости от предоставленной сигнатуры. Если чтение прошло успешно, то выберите одну из опций:

1 записать биты фьюзов – это действие выполнит цикл записи фьюзов значениями из буфера (по умолчанию).

2 модифицировать биты фьюзов – это позволит Вам ввести фьюзы вручную, значения в буфере будут обновлены. Введите один байт в HEX (2 символа) и нажмите Enter. Повторите операцию для каждого имеющегося байта фьюзов.

3 установка битов защиты (lockbits) – введите новое значение в HEX (2 символа) и нажмите Enter. Выполняйте это действие с осторожностью! Помните, что не используемые биты должны всегда быть в лог. 1! Например, нужно разрешить LB1 и LB2, для этого ведите FC (11111100).

4 очистка чипа – это действие просто сотрет чип и его биты защиты. Оно требует для безопасности наличия установленной перемычки ALLOW ERASE.

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

Не обращайте на светодиоды индикации, когда fuse-доктор работает в ручном режиме — они просто мигают случайным образом.

Внимание: программа fuse-доктора версии 2.1x ТРЕБУЕТ обновленной версии печатной платы 2h!

[Файлы]

atmega-hvpp-fusebit-doctor_archive.rar — в этом архиве находятся все релизы (печатные платы, схемы в PDF и Eagle, и прошивки, рассортированные по папкам), начиная с самого первого. Последний релиз в папке update10-20.04.2011. Подробное описание см. в файлах README архива (они есть во многих папках, и имеют расширение *.txt). Исходного кода прошивки нет.

shuffle_avrdoc_usb.rar — SMD-версия fuse-доктора. Отличается от оригинальной версии тем, что на плате разведен только коннектор для подключения адаптеров. В архиве только печатка и схема, разводка сделана в Sprint Layout. Исходного кода прошивки нет.

atmega-hvpp-fusebit-doctor_update11.rar — тут схемы и печатные платы адаптеров #1HVPP и HVSP, прошивки последней версии (update10-20.04.2011), печатная схема и плата версии 2h. Исходного кода прошивки нет. UPDATE #11, 30.04.2011. По поводу бит фьюзов см. файл README. В этом обновлении исправлен баг, когда не записывался старший байт фьюзов (касается всех чипов!).

atmega_fusebit_doctor_smd_adapter_1.0.rar — первая версия 1.0 fuse-доктора схемы и печатной платы. Исходного кода прошивки нет.

avr_attiny_hvsp_fusebit_doctor_V3.rar — версия доктора, которая предназначена только для микроконтроллеров AVR ATtiny (схема и прошивка) [4]. Исходный код доступен только для этой версии (на Бейсике).

[FAQ]

Q001: мой fuse-доктор не подает признаков жизни, светодиоды не мигают.
A001: скорее всего критичная ошибка на плате или плохо запрограммированный микроконтроллер.

Q002: Горит красный светодиод.
A002: Восстанавливаемый чип не распознан. Измерьте напряжения на нем в режиме ожидания напряжения. Это +12 на сигнале RESET и +5 SUPPLY на соединительном коннекторе мама – Вы должны получить 0V или близкое к 0V напряжение для обоих этих сигналов. После того, как нажата кнопка START, Вы должны на 1 секунду получить напряжения +12V и 5V. Если это не так, то проверьте транзисторы — исправны ли они, и правильно ли спаяна схема подачи напряжений.

Q003: Горит красный светодиод.
A003: Ошибка на печатной плате. Проводники проходят очень близко друг к другу, так что возможно, что есть невидимое замыкание. Также может быть, что где-то есть непропай. Проверьте все соединения мультиметром, причем очень тщательно.

Q004: Горит красный светодиод.
A004: Подключите устройство к терминалу, чтобы получить лог восстановления. Нажмите кнопку START для получения информации на терминале.

Q005: На терминал выводится «Init programming. «, и больше ничего, или считанная сигнатура «00 01 02» или «FF FF FF».
A005: Восстанавливаемый чип неисправен, или все еще есть не обнаруженная ошибка на печатной плате.

Q006: Считанная сигнатура «1E 90 00», «1E 1E 1E», или что-то подобное (правдоподобные данные).
A006: Восстанавливаемый чип в порядке, он инициирован, проверьте замыкания на сигналах DATA, BS, XA.

Q007: Зеленый светодиод горит / в терминал выводится сообщение «Verifying. – OK!», но восстановленный чип не работает со стандартным программатором (не программируется через ISP).
A007: Можно быть на 100% уверенным, что фьюзы восстановлены корректно, но у восстановленного микроконтроллера есть аппаратная проблема с интерфейсом программирования ISP (MOSI, MISO, SCK), или имеется какое-то другое повреждение.

Q008: Что означают сообщения «Read Signature. FAIL!» и «Trying T2313 pinout. OK», выведенные в лог терминала?
A008: Все 20-выводные чипы нуждаются в индивидуальной обработке. Сначала fuse-доктор пытается прочитать чип по стандартной схеме, и если это не получается («FAIL!»), то делается попытка использовать схему 20-выводных T2313 совместимых чипов, после чего эта последняя попытка получается успешной. Так что это нормальное поведение, не ошибка.

Q009: Что за мусор «

Переходничок был изготовлен из платки TQFP32-DIP, подойдет для восстановления фьюзов микроконтроллеров AVR в корпусе TQFP32, например ATmega8, ATmega168, ATmega328P и других.

Источник

Оцените статью