Рассмотрим легкий и неразорительный способ записать программу в любой микроконтроллер (МК) серии AVR от Atmel. Нам понадобятся программатор USBASP и программное обеспечение для прошивания, также если на вашей плате установлен 6-пиновый разъём, вам потребуется переходник с 10 выводов на 6. Программатор USBASP, созданный немцем Томасом Фишлем, является очень распространённым, наиболее дешёвым и простым среди других программаторов для МК AVR. Купить его можно в каком-нибудь радиомагазине вашего города (стоимость — 1,5-3$).
Программатор USBASP
Данный программатор соединяется через USB штекер к компьютеру и через шлейф к прошиваемому микроконтроллеру или к конструкции, в которой находится микроконтроллер. Если в первом случае связь устанавливается через последовательный интерфейс USB для обмена информацией, то во втором — через SPI-интерфейс последовательного программирования. Стоит сказать, что SPI-интерфейс последовательного программирования, имеющийся во всех МК AVR, и аппаратный SPI для обмена информации, — это разные составные микроконтроллера, что можно наглядно увидеть на рисунке 2. В некоторых МК у них даже могут не совпадать выводы. К тому же, полнофункциональный SPI-интерфейс может вообще отсутствовать, как, к примеру, в ATtiny13.
Существует множество версий программатора USBASP. Его можно собрать и самому.
Распространены две версии программатора: USBASP 2.0 и USBASP 3.0
Рассмотрим USBASP на примере версии 3.0, как наиболее продвинутой (Рис. 3).
Особенности программатора USBASP
Особенности:
- Поддерживается операционными системами Windows, Linux и Mac OC;
- Поддерживает напряжение питания 5 В и 3,3 В (не все USB-порты выдают 5 В);
- скорость записи до 375 кб/сек (скорость программирования можно настраивать самому в некотором ПО);
- питается от ПК;
Организация USBASP 3.0
На плате программатора присутствует не много радиокомпонентов, перечислим основные:
- МК ATmega8A, имеющий 8 кб флеш-памяти и 1 кб ОЗУ (SRAM);
- кварцевый резонатор на 12 МГц. Аппаратный USB интерфейс в этом МК отсутствует, но присутствует программный USB, и из-за особенностей последнего МК работает на частоте 12 МГц;
- 10-контактный разъём (двухрядный штырьковый разъём типа IDC);
- LED1 и LED2 индикатор включения и индикатор программирования соответственно;
- F1 — самовосстанавливающийся предохранитель на 500мА;
- JP1 — джампер для выбора напряжения: 5 В и 3,3 В в зависимости от позиции перемычки (по умолчанию 5 В). Если ваша конструкция потребляет не более 200 мА (!), то её можно запитать с программатора (вывод VCC на разъёме программатора). Желательно питать устройство от ПК, в этом случае «земля» вашего устройства будет соединена с корпусом ПК и можно будет безопасно подключать и отключать разъем программирующего адаптера;
- JP2 — необходимо закоротить, если хотим перепрошить МК программатора;
- JP3 — выбор частоты тактирования линии SCK (разомкнут — частота 375 кГц, замкнут — 8 кГц). Если более подробно, то данный джампер предназначен для уменьшения скорости записи данных в прошиваемый МК. Это требуется, когда частота тактирования SPI-интерфейса последовательного программирования МК меньше частоты тактирования программатора, то есть меньше 375 кГц. Если в такой ситуации не замкнуть контакты JP3, то МК не прошьётся. Определим, необходимо это в вашем случае или нет. Для примера возьмём МК ATtiny13, который с завода поставляется настроенным на тактовую частоту 1,2 МГц. SPI МК AVR предполагает максимальную частоту тактирования равной ¼ от частоты тактового сигнала МК. Получаем частоту тактирования SPI равной 1,2/4=0,3 (МГц)=300 (кГц). Выходит, что в данном случае замыкание контактов JP3 необходимо.
Однако при использовании AVRDUDE_PROG перемычку можем не трогать.
Программатор поддерживается следующим программным обеспечением:
- AVRdude;
- AVRdude_Prog;
- Khazama AVR Prog;
- Bascom-AVR;
- eXtreme Burner AVR.
Подключение и распиновка USBASP
Подключить программатор USBASP ничего не стоит, надо лишь правильными сторонами вставить шлейф в разъём программатора и в разъём на вашей конструкции. Подсоедините шлейф в разъём USBASP точно так же, как показано на рисунке 4, обратите внимание на красный провод.
Назначение выводов:
- MOSI — выход информационных данных;
- MISO — вход информационных данных;
- SCK — линия для подачи тактовых импульсов (синхронизация данных);
- RESET — подключается к выводу RESET программируемого микроконтроллера;
- VCC — вывод для подачи питания 5 или 3,3 В на прошиваемый МК (не более 200 мА, чтобы не сжечь USB-порт);
- GND — земля (минус);
- NC — не используется.
Установка драйверов для программатора USBASP
Установим драйвера, чтобы можно было пользоваться программатором. Раньше драйвер для USBASP был основан на библиотеке libusb-win32. Затем, после истечения срока сертификата, перевели на новую библиотеку libusbK. Поэтому при установке драйвера из нашего архива не придётся использовать программу Zadig или прибегать к другим манипуляциям с сертификатом. Драйвер тестировался на Windows XP, 7, 8, 10 (32-х и 64-х разрядных версиях).
Процесс установки драйверов:
- Подключите программатор к ПК, при этом в диспетчере устройств появится новое устройство USBasp с жёлтым значком, что осведомляет об отсутствии драйверов;
- Скачайте под статьёй архив “USBasp_software”. Найдите папку “usbasp-win-driver-x86-x64-v3.0.7” и запустите “InstallDriver.exe”;
- Проверьте диспетчер устройств — желтый значок должен исчезнуть (если нет, щелкните правой кнопкой по устройству «USBasp» и выберите пункт «Обновить»);
Программатор готов к работе.
Прошивание программы и FUSE-битов в микроконтроллер
Цепочка действий для записи программы в МК:
- Выбираем программатор USBASP (выставлено по умолчанию);
- Кликаем на программируемый МК в списке;
- Считываем калибровочные ячейки генератора для проверки связи: если появится окно с надписью “Калибровочные ячейки генератора считаны!”, значит, связь с программируемым МК установлена;
- Стираем на всякий случай флеш-память микроконтроллера;
- Указываем путь к нашему файлу прошивки (формат HEX);
- Прошиваем. После благополучной прошивки возникнет сообщение как на рисунке 7.
У каждого МК AVR свой набор FUSE-битов. Настройка FUSE-битов, или, по-русски, конфигурационных битов, обладает извращенской логикой: “1” — это “0”, а “0” — это “1”. Поэтому при прямых FUSE-битах “0” будет означать запрограммированное состояние, а “1” — незапрограммированное.
В программе AVRDUDE_PROG можно без волнения прошивать МК, не трогая FUSE-биты, т.к. программа выставляет их заводские значения.
Кнопка “Программирование” на вкладке Fuses служит для прошивки FUSE-битов в МК. Если нажать “Чтение”, то узнаем какие значения установлены в FUSE-битах микроконтроллера в данный момент.
Автор: Лепешкин Алексей, г. Москва