Flip программа для прошивки контроллеров atmel

Обновлено: 07.07.2024

Перевод даташита "AVR282: USB Firmware Upgrade for AT90USB" [1], посвященного обновлению программного обеспечения микроконтроллера (firmware) для AVR с аппаратной поддержкой USB (так называемое семейство AVR USB, поделенное на серии. Многие представители этого семейства имеют префикс AT90USB в наименовании чипа).

Способ обновления firmware через USB, предлагаемый Atmel, обладает следующими возможностями:

• Поддерживается программой Atmel FLIP на всех операционных системах Microsoft Windows®, начиная с Windows® 98SE.
• Версия FLIP 3.2.1 и все более поздние поддерживают работу под Linux.
• Бутлоадер USB по умолчанию прописан в память чипа на заводе Atmel.
• Программирование в системе (In-System programming) через интерфейс USB не требует дополнительного внешнего аппаратного обеспечения.
• Скорость обновления firmware до 32 килобайт/сек.

Цель этого документа - показать, как нужно обновлять программное обеспечение микроконтроллера (firmware upgrade) для чипов семейства AT90USB, используя его встроенный бутлоадер и программу-утилиту FLIP.

[2. Описание]

Чипы серий AVR USB, название которых начинается с AT90USB, поставляются с фабрики Atmel с прошитым в память FLASH (память программ) бутлоадером (USB bootloader). Этот бутлоадер позволяет программировать области памяти FLASH и EEPROM через интерфейс USB.

Для того, чтобы выполнять обновление firmware, компания Atmel разработала бесплатную программу для компьютера, которую почему-то назвала "FLIP". Эта программа обладает достаточной гибкостью, чтобы позволить Вам обновлять firmware микроконтроллеров Atmel прямо в своем рабочем окружении (т. е. в составе готового электронного устройства), и при этом не требуется никакое дополнительное аппаратное обеспечения, кроме стандартного шнура USB (отдельный программатор не нужен).

Последний релиз утилиты FLIP предоставляет следующие возможности:

• Может осуществлять "программирование в системе" (In-System Programming) через интерфейсы RS232, USB или CAN (в зависимости от того, какие интерфейсы поддерживает модель микроконтроллера и Ваше конечное электронное устройство).
• Может использоваться как интуитивно понятная программа с графическим интерфейсом, а также может быть запущена из консоли команд Windows (имеется в виду программа batchisp.exe [2], входящая в пакет FLIP), из интегрированной среды разработки (IDE AVR Studio), или даже из Вашей собственноручно написанной программы.
• Позволяет редактировать буфер записываемых данных: заполнение байтом (fill), поиск по содержимому (search), копирование (copy), очистка (reset), изменение (modify), запуск программы по указанному адресу (goto address).
• Управление памятью целевого микроконтроллера (target device): очистка (erase), проверка на очистку (blank check), программирование содержимого памяти (program), проверка соответствия памяти буферу (verify), чтение в буфер (read), запись и чтение байт, управляющих уровнем защиты, и чтение и запись других специальных байт.
• Возможность автоматизации процесса программирования устройств (возможно только с помощью утилиты batchisp [2]).
• Запуск бутлоадера (срабатывание условия ISP hardware condition) может быть осуществлен программно, из кода firmware микроконтроллера.

AVR282-USB-Device-Firmware-Upgrade

[3. На каком железе это работает (Hardware Requirements)]

1. Любая отладочная плата AVR USB - например ATSTK525/STK526, AT90USBKey, AVR-USB162, AVR-USB32U4, любой кит с микроконтроллером семейства AT90USB (это может быть даже Ваше собственное устройство с чипом AVR USB).
2. Микроконтроллер семейства AT90USB (при этом необязательно в названии чипа должен быть префикс AT90USB, есть и другие микроконтроллеры, которые поддерживают FLIP через USB, например ATmega32U4).
3. Обычный стандартный кабель USB (например, с коннекторами Type A и Mini B), который подходит к Вашей плате.
4. Компьютер PC, работающий под управлением операционной системы Windows с поддержкой USB (98SE, ME, 2000, XP).

[4. Требуемое программное обеспечение (Software Requirement)]

Для перепрограммирования памяти чипа через USB бутлоадер Atmel требуется программа FLIP [3] (утилита Device Firmware Upgrade) версии 3.2.0 или более свежей.

[5. Как использовать бутлоадер]

AVR282-Bootloader-Process-fig51

Рис. 5-1. Алгоритм запуска бутлоадера.

Как показано на этом рисунке, чипы серии AT90USB имеют новый бит фьюзов (fuse bit), если сравнивать со стандартными чипами AVR. Этот фьюз называется HWBE (расшифровывается HardWare Button Enable, т. е. разрешение работы аппаратной кнопки запуска бутлоадера), и по умолчанию он разрешен. Этот новый fuse bit добавлен для того, чтобы добавить поддержку новой функции специального вывода микроконтроллера: HWB. Эта ножка имеет свойство приводить к аппаратному переходу в код секции бутлоадера (запускается бутлоадер, который позволяет загрузить программу пользователя через USB с помощью утилиты FLIP), если при сбросе (RESET) лог. уровень на ней был 0. Чтобы пользователь мог воспользоваться бутлоадером, многие киты (как например AVR-USB162 [2]) имеют две кнопки: RST чтобы выполнить сброс, другая HWB, чтобы подать лог. 0 на ножку HWB.

Прим. переводчика: иногда бутлоадер запускаются одной кнопкой, и необходимый для запуска бутлоадера уровень на ножке HWB формируется с помощью дополнительных элементов - резистора, диода и конденсатора. Так устроена например макетная плата AVR-USB162MU и Teensy 1.0. В макетной плате AVR-USB32U4 и Teensy 2.0 для запуска бутлоадера также используется одна кнопка благодаря наличию внешнего pull-down резистора на ножке HWB.

[6. Обновление firmware в микроконтроллере]

Программа-утилита "Flip" предназначена для организации процесса обновления firmware, она пересылает код бутлоадеру через USB или другие доступные интерфейсы. Утилиту FLIP можно свободно скачать с сайта Atmel или по ссылке [3].

Для того, чтобы можно было начать пользоваться бутлоадером, и с его помощью прошивать/перепрограммировать память FLASH и EEPROM, выполните следующие простые шаги:

1. Установите программное обеспечение Flip [3] (требуется Flip версии 3.0 или более свежая версия).
2. Подключите Вашу плату или устройство AT90USB (AVR-USB162 [2], AVR-USB32U4 [7], userial [6], STK525, AT90USBKey и т. п.) к компьютеру PC с использованием стандартного кабеля USB (обычно с коннекторами Type A и Mini B, такой шнур используется для подключения переносных накопителей на жестких дисках и картридеров).
3. Нажмите и удерживайте кнопку HWB (Hardware Bootloader).
4. Коротко нажмите и отпустите кнопку RST (Reset, сброс).
5. Отпустите кнопку HWB.
6. После выполнения этой процедуры операционная система обнаружит новое подключенное устройство USB и запустит диалог Мастера установки драйвера нового устройства. Просто следуйте инструкциям мастера (INF-файл и драйвер находится в поддиректории USB пути инсталляции программы Flip, обычно это папка %ProgramFiles%\ATMEL\FLIP\FLIPx.x.x\usb). После того, как драйвер установлен, то диалог мастера больше не будет появляться, и можно перейти к шагу 7. Подробно диалог установки драйвера со скриншотами можно посмотреть по ссылкам [6, 7].
7. После завершения установки драйвера Вы можете проверить, правильно ли работает Ваша плата с запущенным бутлоадером, если откроете Диспетчер Устройств (Device Manager). В дереве устройств компьютера Вы увидите папку LibUSB-Win32 Devices, в которой будет отображен чип на Вашей плате, например AT90USB162.

AT90USB162device

Рис. 6-4. Так выглядит устройство бутлоадера DFU в Диспетчере Устройств.

Теперь микроконтроллер на Вашей плате находится в режиме DFU (бутлоадер активен), и Вы можете воспользоваться утилитой FLIP для того, чтобы перепрограммировать микроконтроллер. Далее на скриншотах будет показан пример использования утилиты Flip.

1. В меню программы Flip или с помощью кнопки на передней панели с изображением микросхемы выберите название Вашего микроконтроллера. Предположим, что это AT90USB1287.

AVR282-Device-Selection-fig65

Рис. 6-5. Выбор устройства AT90USB.

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

AVR282-select-USB-Communication-Mode-fig66

Рис. 6-6. Выбор режима подключения к бутлоадеру.

3. Откройте соединение с USB (USB Port Connection -> Open).

AVR282-open-USB-Communication-fig67

Рис. 6-7. Инициализация соединения через USB.

4. Выберите HEX-файл для загрузки.

AVR282-select-HEX-File-to-Load-fig68

Рис. 6-8. Запуск диалога выбора входного файла файла (File -> Load HEX File. ).

5. Теперь Вы можете загрузить файл (программу firmware) в память микроконтроллера, если нажмете на кнопку Run (слева внизу). Галочки Erase (очистка перед записью), Blank Check (проверка памяти на чистоту), Program (прошивка памяти содержимым загруженного HEX-файла), Verify (проверка записи).

AVR282-HEX-File-Loading-fig69

Рис. 6-9. Загрузка HEX-файла в память микроконтроллера.

6. Запуск на выполнение загруженной программы firmware произойдет, если после загрузки нажать кнопку Start Application (справа внизу в окне программы Flip). При этом бутлоадер перестанет работать и отключится от USB как устройство DFU, и начнет работать firmware пользователя. Это firmware может работать как другое USB-устройство (например, как клавиатура, мышь или виртуальный последовательный порт), или выполнять какие-то другие действия, заложенные в код программистом.

AVR282-Start-Application-fig610

Рис. 6-10. Запуск на выполнение программы пользователя.

[7. FAQ (часто задаваемые вопросы)]

1. Почему бутлоадер DFU перестал запускаться после того, как я прошил мой микроконтроллер через JTAGICE MKII или AVRISP?

• Когда Вы используете ISP или JTAG программатор типа JTAGICE MKII или AVRISP для перепрограммирования микроконтроллера, то первое действие, которое эти программаторы выполняют перед прошивкой - полное стирание памяти чипа (full chip erase). Эта операция очищает все содержимое памяти FLASH (заполняет её байтами 0xFF), и тем самым удаляет бутлоадер. Если вы хотите продолжить пользоваться бутлоадером, то загрузите его как HEX-файл с сайта Atmel (ссылку на бутлоадер можно найти в разделе утилиты Documents или Tools на странице сайта Atmel, посвященному Вашему используемому микроконтроллеру, см. скриншот). и далее прошейте этот файл в память чипа с использованием тех же программаторов, JTAGICE MKII или AVRISP.

AVR282-find-DFU-bootloader-at-Atmel-website

2. На моем компьютере установлена утилита FLIP версий Flip 2.4.x/3.0.x. Я установил Flip 3.1.y, и когда запустил бутлоадер, то почему не могу увидеть иконку устройства Atmel DFU у Менеджере Устройств Windows, как это показано на рис. 6-4, но иконка Jungo видна?

• Версии Flip 2.4.x и Flip 3.1.y используют разные драйверы для получения доступа у устройству USB DFU (ранее использовалось API библиотеки LibUSB, а теперь используется API драйвера Jungo). Вы можете обновить драйвер для бутлоадера следующим образом:

– Запустите Менеджер Устройств.
– Сделайте правый клик мышью на иконке AT90USB Jungo.
– Выберите обновить драйвер (Update Driver).
– Продолжите установку драйвера DFU под управлением мастера, как это показано по ссылкам [6, 7].

3. Можно ли с помощью Flip менять значение фьюзов микроконтроллера?

• Нет, утилита Flip не может модифицировать биты фьюзов (fuse bits). Для управления установками fuse bits можете использовать либо JTAGICE MKII (интерфейс JTAG или ISP), AVRISP MKII (интерфейс ISP) или параллельное программирование чипа с помощью специального программатора.

4. Для чего нужна галочка Reset возле кнопки Start Application, как это показано на рис. 6-10? Чем отличается запуск программы пользователя, когда эта галочка установлена, или когда не установлена?

• Если запускаете программу пользователя, не установив галочку Reset, то устройство для сброса не будет использовать таймер Watchdog (произойдет просто безусловный переход по адресу 0000h), и после запуска программы пользователя этот watchdog останется неактивным. Установленная галочка Reset аналогична обычному сбросу устройства, этот сброс генерируется таймером watchdog. После этого варианта запуска все ресурсы чипа очищаются, и watchdog становится неактивным. Этот обычный сброс устраняет сторонние эффекты из-за влияния работы бутлоадера на состояние чипа и его ресурсы. Однако таймер watchdog останется активным, и если watchdog не нужен, то Ваша программа должна его отключить.

[Словарик]

bootloader код в специальной секции старших адресов (Boot Section, конец памяти программ FLASH), который предназначен для загрузки приложения пользователя (Application Section, размещена с начала памяти программ FLASH, т. е. с адреса 0000H). Подробнее см. [4].

DFU Device Firmware Upgrade - обновление программного обеспечения устройства на микроконтроллере.

FLIP FLexible In-system Programmer - гибкое программирование микроконтроллера "прямо в системе", т. е. в готовом изделии. Так называется утилита Atmel [3], работающая с бутлоадером. Для каждого чипа AVR USB есть свой бутлоадрер в бинарном виде, его можно скачать с сайта Atmel (исходный код Atmel не предоставила). Есть также бутлоадер DFU с открытым исходным кодом в библиотеке LUFA (благодаря тому, что спецификация протокола DFU Flip открыта [5]).

firmware выполняемое программное обеспечение микроконтроллера, которое сохранено в перезаписываемой, энергонезависимой памяти микроконтроллера (в нашем случае это AVR, работающий как устройство USB).

HWB Hardware Bootloader, специальная ножка микроконтроллера AVR USB, которая может использоваться не только как обычный порт, но также и для запуска бутлоадера.

ISP In-System Programming, программирование микроконтроллера "прямо в системе", т. е. в готовом изделии. Это могут быть разные способы программирования (USB, JTAG, CAN), но обычно под этой аббревиатурой подразумевается 6-контактный интерфейс ISP, предназначенный для подключения к программатору.

_________________
Fucking static initialization order fiasco

JLCPCB, всего $2 за прототип печатной платы! Цвет - любой!

Упорная битва с Флипом показала следующее.
- После загрузки и запуска проги МК встаёт в непонятное состояние. Несколько миллисекунд работает, потом сбрасывается и, опять таки, запускается по новой.
- После хитрых нажатий кнопок RS и HWB МК можно запустить в нормальный цикл. Только задействован делитель клоков на 8. Задержки выставляются правильно, если написать F_CPU 2000000UL, хотя кварц 16 МГц.
- Искал, где фузы ставятся, не нашёл, а нашёл Signature Bytes из 32 разрядов. Гугла молчит.
Друзья, кто мучил Флипа, подскажите, неохота метод тыка развивать. Скучно как-то.
IDE Atmel Studio 6.2, Flip 3.4.7. платка AVR USB 162 от микросина.

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Только задействован делитель клоков на 8. Задержки выставляются правильно, если написать F_CPU 2000000UL, хотя кварц 16 МГц.

_________________
Раз reset, два reset - полyчи на диске bad !
Тpанзистоp p-n-p. Plug-n-Play ?
У кого что сбоит, тот о том и говорит.

Приглашаем всех желающих 25/11/2021 г. принять участие в вебинаре, посвященном антеннам Molex. Готовые к использованию антенны Molex являются компактными, высокопроизводительными и доступны в различных форм-факторах для всех стандартных антенных протоколов и частот. На вебинаре будет проведен обзор готовых решений и перспектив развития продуктовой линейки. Разработчики смогут получить рекомендации по выбору антенны, работе с документацией и поддержкой, заказу образцов.

Жаль, что эта тема интересует только избранных, но ничего.
Видимо, по другому тему надо было назвать. Типа "Как создать рабочую МК систему не имея ничего, кроме головы на плечах".
Итак, имеем интернет и осциллограф, который у каждого электронщика есть. Дальше:
1. Покупаем кит или готовое устройство с МК с прошитым загрузчиком. К сожалению Оливекс запрашивает непотребную неконкурентную цену. Я купил платы у микросина, голые по 100 руб, готовую по 500 руб. Качество работы выше всяких похвал, срок высылки мгновенный.
2. Покупаем кабель USB A - mini B 5 pin.
3. Загружаем драйвера:
- системный, чтобы ПК увидел подключённый USB микроконтроллер AVR USB 162.
- программу Flip с сайта Атмел'а. Последняя версия 3.4.7.
Друзья, это всё. Никаких программаторов, Даже жменьки разъёмов, провода МГШВ, паяльника и описания системы Громова не надо. Источника внешнего питани +5 В не надо.
Ну а дальше, как всегда морока. Не так работает Флип, как хотелось бы.
Не так запускается прога на МК из Флипа. Я уже писал об этом. А с кнопки RESET на плате запускается грамотно. И по подключению питания на плату работает правильно.
Загрузчик хекс файлов не видит пути с русскими буквами. Но запоминает путь последнего загруженного файла.
Надо бы статью написать на эту тему. Но я не могу. Написать так, что вся АН России понять не сможет, я пожалуйста. А так, чтобы 2х2 было равно 4 не умею.

Навигационные модули позволяют существенно сократить время разработки оборудования. На вебинаре 17 ноября вы сможете познакомиться с новыми семействами Teseo-LIV3x, Teseo-VIC3x и Teseo-LIV4F. Вы узнаете, насколько просто добавить функцию определения местоположения с повышенной точностью благодаря использованию двухдиапазонного приемника и функции навигации по сигналам от MEMS-датчиков. Поработаем в программе Teseo Suite и рассмотрим результаты полевого тестирования.

Часовой пояс: UTC + 3 часа

Кто сейчас на форуме

ПРОГРАММАТОР AVR ЧЕРЕЗ USB

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

ПЕЧАТНАЯ ПЛАТА НА ПРОГРАММАТОР AVR - USB

Теперь перейдем непосредственно к прошивке контроллера и установки драйвера. Весь процесс был проделан на операционной системе windows XP, пройдет ли успешно процесс прошивки и установки драйвера на windows 7 не знаю, так как у меня установленная XP, но вы можете проверить и сообщить на форуме о результате.

После того, как вы собрали программатор и проверили плату на наличие капель олова, обрывов дорожек и верности установки компонентов делаем следующее: подключите его к разъему USB система распознает его как AT90USB162 и запросит драйвер устройства, драйвер необходимо поместить в корень диска С например в Program Files после установки драйвера для AT90USB162 его необходимо прошить, прошивок две на 8 и 16 мгц. с каким кварцем запустился программатор на ту частоту и нужно брать прошивку, у меня на частоте 8 МГц устройство распознавалось как не известное, после установки кварца на 16 МГц устройство распозналось как AT90USB162 и мне удалось установить драйвер. Прошивать нужно через программу Atmel Flip, программу прилагаю. Порядок операций:

1.) Запускаем программу FLIP, Нажимаем на кнопку с изображением микросхемы
2.) В открывшемся окне выбираем тип микроконтроллера (AT90USB162), Нажимаем ОК.
3.) Жмём кнопку с изображением USB разъёма, В открывшемся списке выбираем USB
4.) Жмём на верхнее меню File выбираем в списке Load HEX File
5.) В открывшемся окне выбираем файл прошивки его желательно так же поместить в корень диска С.
6.) Убеждаемся, что галочки в левом поле окна программы выставлены как на картинке:

ПРОГРАММАТОР AVR ЧЕРЕЗ USB - настройка

Нажимаем кнопку Run, которая находится под галочками (на скриншоте обведена синим цветом). Программа начнёт прошивать донгл (длительность прошивки 3-4 секунды). После прошивки нажимаем кнопку Start Aplication в правом поле программы. Система найдёт устройство JUNGO -AVRISP MKII прошивка окончена. Если же при первом подключение программатора система видит устройство как не опознанное вместо AT90USB162 попробуйте поменять местами D+ и D-.

ПРОГРАММАТОР МИКРОКОНТРОЛЛЕРОВ AVR - USB

Если и это не помогло, припаяйте конденсатор 0.1 мкф между землей и 24 ногой контроллера. Программатор использую в программе AVR Studio 4.19 с дрогой версией программы может работать не корректно. Плату поместил в старую мышь, на фотографии отсутствует буфер.

САМОДЕЛЬНЫЙ ПРОГРАММАТОР AVR ЧЕРЕЗ USB

Уверен, что кому-нибудь будет полезна эта информация. В архиве на форуме прошивка, драйвер, печатная плата в формате lay и принципиальная схема программатора. Схему собрал и проверил: serh7000



Картинка для привлечения внимания — xkcd

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

Радуясь, что еще не забыли курс ассемблера, вы кое-как написали программу палочкой на песке. Среди уцелевших вещей каким-то чудом оказалась распечатка документации на контроллер (хорошо, что вы еще не успели пустить её на растопку!), и программу удалось перевести в машинные коды. Осталась самая ерунда — прошить её в контроллер. Но в радиусе 500 километров нет ни одного программатора, не говоря уже о компьютерах. У вас только источник питания (батарея из картошки кокосов) и пара кусков провода.

Как же прошить МК фактически голыми руками?

В качестве подопытного будет выступать МК ATtiny13 фирмы Atmel. Описанная методика работает практически с любым контроллером семейства AVR, разве что коды команд могут незначительно отличаться.

  • SCK — тактовый сигнал, синхронизирует все операции обмена данными;
  • MOSI (Master Out Slave In) — линия данных от ведущего устройства к ведомому;
  • MISO (Master In Slave Out) — линия данных, наоборот, от ведомого устройства к ведущему;
  • RESET — для разрешения прошивки по SPI нужно подать логический «0» на этот вывод.


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

Рис. 2. Схема с индикацией сигналов.

Защита от дребезга


К сожалению, просто используя кнопки для формированя сигналов SPI, хорошего результата мы не добьёмся. Причина этого — в неприятном явлении, которое называется дребезг контактов. При замыкании механические контакты соударяются, отскакивают друг от друга, и вместо одного импульса получается несколько. Для подавления дребезга придется собрать простую схему из пары логических элементов:

Рис. 3. RS-триггер для подавления дребезга.

Это RS-триггер, который переключается в состояние «1» в момент замыкания нижнего контакта переключателя и игнорирует остальные импульсы дребезга. Сброс триггера обратно в «0» происходит при замыкании верхнего контакта, то есть при отпускании кнопки.

«Ишь, разбежался!» — скажет читатель, — «Я же на необитаемом острове сижу. Где я тут возьму триггеры?» Хорошо, можно избавиться от дребезга и без электронных схем. Нужно только заменить «сухой» контакт на мокрый жидкостный. Выключателем будут служить два электрода, опускаемые в проводящую жидкость.

Сигналы MOSI и RESET не требуют подавления дребезга, в отличие от SCK: здесь значение имеет только уровень сигнала в момент выборки, а не его фронты.



Рис. 4. Временная диаграмма работы SPI.

SPI является синхронным интерфейсом: все операции синхронизированы фронтами тактового сигнала (SCK), который вырабатывается ведущим устройством. Максимальная скорость передачи ограничена величиной 1/4 тактовой частоты контроллера. На минимальную же скорость нет никаких ограничений: без тактового сигнала обмен данными «замораживается», и интерфейс может оставаться в статическом состоянии сколь угодно долго.

Передача по SPI осуществляется в полнодуплексном режиме, по одному биту за такт в каждую сторону. По возрастающему фронту сигнала SCK ведомое устройство считывает очередной бит с линии MOSI, а по спадающему — выдает следующий бит на линию MISO. Все внимание на рисунок 4.

  1. Перевод контроллера в режим программирования;
  2. (опционально) Чтение идентификатора устройства;
  3. Стирание;
  4. Запись во flash;
  5. (опционально) Проверка записанного;

Включение режима программирования

Режим программирования включается подачей «0» на ногу RESET. Но есть некоторые тонкости. Atmel рекомендует сначала выставить на выводах RESET и SCK низкий уровень, а только потом подавать на контроллер питание. Если такой возможности нет, нужно после включения питания подать «0» на SCK, а затем положительный импульс на RESET:



Рис. 5. Перевод МК в режим программирования.

Но и это еще не все. Далее нужно передать команду на собственно включение режима программирования: 10101100 01010011 xxxxxxxx xxxxxxxx



Рис. 6. Команда «Program Enable».

Биты, обозначенные как x, могут быть любыми. Во время передачи третьего байта контроллер должен переслать обратно второй байт (01010011). Если это произошло, значит, все хорошо, команда принята, контроллер ждет дальнейших инструкций. Если ответ отличается, нужно перезагрузить МК и попробовать все сначала.

Проверка идентификатора



Рис. 7. Команда «Read Signature Byte».

Прежде чем что-либо писать в память МК, нужно убедиться, что перед нами именно та модель, которая нужна. Каждая модель контроллера имеет свой трехбайтный идентификатор (Signature). Прочитать его можно командами вида
00110000 000xxxxx xxxxxxbb xxxxxxxx
Вместо bb (третий байт команды) следует подставить 00 для первого байта идентификатора, 01 — для второго и 10 — для третьего. Соответствующий байт идентификатора будет передан контроллером при отправке 4-го байта команды.

Для ATtiny13 значение идентификатора равно 00011110 10010000 00000111 (0x1E 90 07).

Очистка контроллера



Рис. 8. Команда «Chip Erase».

Следующим шагом будет очистка памяти МК, которая осуществляется посылкой команды «Chip Erase»
10101100 100xxxxx xxxxxxxx xxxxxxxx
Этой командой выполняется стирание содержимого Flash и EEPROM (все ячейки будут содержать FF), а также снятие lock-битов, если они установлены.

Запись во flash-память

Память программ (Flash) в ATtiny13 состоит из 512 двухбайтных слов (1К байт). Адрес слова имеет разрядность 9 бит. Flash-память разделена на страницы, каждая страница имеет размер 16 слов (всего получается 32 страницы). Запись во flash осуществляется в два этапа.

Сначала необходимо загрузить данные в буфер страницы, для этого используется команда «Load Program Memory Page»
01000000 000xxxxx xxxxbbbb iiiiiiii — для загрузки младшего байта слова, и 01001000 000xxxxx xxxxbbbb iiiiiiii — для загрузки старшего.
4 младших бита 3-го байта команды bbbb — адрес слова на странице, iiiiiiii — загружаемый байт. Сначала всегда должен загружаться младший байт слова, а затем — старший байт того же слова.



Рис. 9. Команда «Load Program Memory Page».

После того, как буфер страницы загружен, нужно выполнить команду «Write Program Memory Page» 01001100 0000000a bbbbxxxx xxxxxxxx для записи страницы непосредственно в память контроллера.
Младший бит второго байта и старшие 4 бита третьего a:bbbb — пятибитный номер страницы для записи.



Рис. 10. Команда «Write Program Memory Page».

Все это выглядит довольно запутанно, но ничего сложного нет. Адрес любого байта памяти программ состоит из 10 бит: ppppp:bbbb:w, где
ppppp — номер страницы (используется в команде «Write Program Memory Page»);
bbbb — адрес слова на странице (в команде «Load Program Memory Page»);
w — бит, определяющий старший или младший байт в слове (зашифрован в первом байте команды «Load Program Memory Page»).

Чтение flash



Рис. 11. Команда «Read Program Memory».

После записи прошивки в МК неплохо бы проверить записанное, так как никакой проверки целостности данных не выполнялось. Единственный способ проверки состоит в том, чтобы прочитать весь объем flash-памяти и сравнить с оригиналом.

Читать память программ легче, чем писать в нее. Забудьте про страничную организацию, чтение выполняется побайтно. Команда «Read Program Memory» выглядит так:
00100000 0000000a bbbbbbbb xxxxxxxx — для чтения младшего байта слова, и 00101000 0000000a bbbbbbbb xxxxxxxx — для старшего.
Младший бит второго байта и весь третий байт a:bbbbbbbb — адрес слова в памяти. Прочитанный байт возвращается во время передачи 4-го байта команды.

Завершение программирования

Пожалуй, самая простая операция. Чтобы завершить программирование и перевести МК в рабочий режим, достаточно подать на RESET логический уровень «1». Контроллер запустится и будет работать по новой программе.


Настало время воспользоваться полученными знаниями на практике. Жертва эксперимента — ATtiny13 — воткнут в макетную плату, рядом собран формирователь сигналов, всё готово:

Рис. 12. Экспериментальная схема.

Шить будем программу вида «проще некуда»:

Всё, что она делает — это выдает единицу на ногу PB1 и уходит в бесконечный цикл. В машинных кодах она занимает всего четыре слова:

Для прошивки её в контроллер необходимо набрать следующие команды:

Ключ на старт, поехали!

Всего 425 нажатий, и МК оживает. Теперь вас точно найдут и спасут с этого проклятого острова.

Читайте также: