среда, 30 мая 2018 г.

Ремонт китайского клона платы Digispark Kickstarter Attiny85 Micro USB Development Board

Статья про то, как я восстановил работоспособность китайского клона платы Digispark Kickstarter Attiny85 Micro USB Development Board.
Вот так она выглядит (отличительная особенность - надпись "Rev3" со стороны разъема USB):



При подключении платы "из коробки" к порту USB (или если подать питание на плату) секунд через 5 плата начинает мигать светодиодом с частотой примерно 2 Гц. Это тестовая программа, которая загружается в память из bootloader'а. Bootloader - это программа, записанная в данное устройство, которая запускается при включении питания и позволяет загружать через интерфейс USB в flash-память пользовательские программы.

Для того, чтобы проверить работу данного устройства под управлением своей программы, я установил Arduino IDE. Через "Менеджер плат" установил пакет плат Digistump AVR Boards.
В качестве примера был выбран стандартный скетч Digispark_Examples/Start.
В этом примере программа должна мигать встроенным светодиодом на порту P1 (в нумерации портов данной платы) с частотой 1 Гц (то есть раз в секунду).

Программа была скомпилирована и загружена в устройство. Загрузка начинается сразу после подключения устройства к порту USB (в течении 5 секунд после включения данная плата находится в режиме ожидания программирования со стороны компьютера).
После загрузки кода, bootloader должен начать выполнение данного кода.

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

Для того, чтобы разобраться с данной проблемой, я решил подключить это устройство к программатору для микроконтроллеров Atmega. Под рукой у меня оказался самодельный программатор USBtiny (https://learn.adafruit.com/usbtinyisp).

Вот таблица подключения разъема программатора к пинам платы Digispark:


Пин ISPПин Digispark
MOSIP0
RESETP5
SCKP2
MISOP1
GNDGND


Теперь подключаю программатор к USB-порту компьютера, а на плату Digispark подаю питание через зарядное устройство в USB-выходом.

Для работы с программатором я пользуюсь AVRDUDESS - графической оболочкой к программе avrdude. Выбираю тип программатора (USBtiny) и жму кнопку [Detect] в разделе "MCU":



































Программатор видит контроллер и определяет его как ATtiny85.

Далее жму верхнюю кнопку [Read] в разделе "Fuses & lock bits". Получаю следующие значений фьюзов:

Lfuse = 0xE1
Hfuse = 0xDD
Efuse = 0xFF

Для того, чтобы понять, какие именно биты установлены, нажимаю кнопку [Bit selector]. Открывается окно с расшифровкой текущего состояния фьюзов:
















Здесь отображаются инверсные значения битов, когда 1 означает 0 и наоборот. То есть, если бит равен 1, он не установлен, а если 0, то установлен.

Анализ фьюз-битов показывает, что флаг SELFPRGEN не установлен. Этот бит отвечает за режим самопрограммирования, то есть именно тот режим, в котором должен работать микроконтроллер с бутлоадером, чтобы иметь возможность самостоятельно (без внешнего программатора) записывать в флеш-память пользовательские программы.

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

Щелкаем левой кнопкой мыши на значении этого бита, значение 1 (не установлено) меняется на 0 (установлено):















После нажатия кнопки [ОК], новое значение байта Е фьюзов (было 0xFF стало 0xFE) переносится в главное окно программы. Нажимаем кнопку [Write] в разделе "Fuses & lock bits", чтобы записать новое значение фьюз-битов в микроконтроллер:


































Отключем питание с платы, отключем программатор, подключаем плату к USB-порту компьютера и пробуем еще раз залить тестовую программу Digispark_Examples/Start.

На этот раз результат есть - светодиод начинает мигать с частотой 1Гц. То есть, работоспособность данного контроллера успешно восстановлена!

На время публикации этой статьи в местном магазине данный модуль стоил порядка 68 грн ($2.6).

Комментариев нет:

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