Программатор для AVR на базе FT232R

При работе с микроконтроллерами одним из первых встает вопрос наличия программатора для загрузки программа в микроконтроллер. Здесь я приведу описание используемого мной программатора для микороконтроллеров Atmel AVR. Собран он по этой статье. Программатор довольно таки простой, для его сборки нет необходимости в предварительной прошивке управляющего контроллера, также не требуется наличие ставших уже редкостью COM и LPT интерфейсов.

Основой программатора является микросхема преобразователь интерфейсов USB-UART FT232RL. Описание данной микросхемы неоднократно приводилось в Интернете, например, здесь. Программатор просто направляет сигналы MOSI, MISO, SCK и RESET, которые формируются на выводах DCD, DTR, RTS и DSR микросхемы DD1 (FT232RL) соответственно, на нужные выводы прошиваемого микроконтроллера. Причем, делает он это только в момент программирования микроконтроллера, в остальные моменты времени программатор отключен от прошиваемой платы за счет 4-х буферных элементов микросхемы DD2 (74HC125). Состояние линий MOSI, MISO, SCK и RESET устанавливается/считывается прошивающим софтом на компьютере. Передача данных между компьютером и микросхемой FT232RL идет по шине USB (от которой питается и программатор). Светодиод HL4 («POWER») сигнализирует о подаче на программатор напряжения питания с шины USB. Светодиод HL3 («PROG») индицирует процесс прошивки микроконтроллера (горит только во время прошивки). Светодиоды HL1 («RX») и HL2 («TX») индицируют приём и передачу данных по UART. Также на плате установлена кнопка сброса для FT232, на всякий случай, чтобы не переподключать программатор. Схема и фото программатора приведена ниже.

Схема программатора

Фото программатора

Для прошивки используется консольная программа AVRdude (если прикрутить SinaProg, то можно работать с оконным приложением). Для прошивки нам потребуется командная строка такого вида:

avrdude.exe -p m16 -F -c apu_2 -P ft0 -U flash:w:Test.hex:a

Однако при попытке в первый раз прошить контроллер, программа выдаст ошибку. Это связано с тем, что изначально (при изготовлении) МК настроен на тактовую частоту 1 МГц, а программа пытается прошить МК на максимальной скорости. Для этого используется ключ снижения скорости -B. Тогда AVRdude начнёт прошивать МК и мы получим следующую картину

Однако уменьшение скорости приведёт к увеличению времени прошивки МК. Поэтому сначала проще изменить фьюзы МК. Для этого используется следующая строка:

avrdude.exe -p m16 -F -B 4800 -c apu_2 -P ft0 -U hfuse:w:201:m -U lfuse:w:239:m

Данная строка используется только для изменения фьюзов ATmega16 (для которой написаны все мои примеры на этом сайте) на внешнее тактирование, JTAG при этом отключен. Старший и младший байты фьюзов задаются просто числом. Если перевести его в двоичный вид, то получим конкретные биты. Не очень удобный способ представления, зато ошибиться с нотацией сложней. Скорость нужно устанавливать маленькую, так как они все равно прошиваются мгновенно на любой скорости. Ниже приведен список вариантов для разной конфигурации фьюзов для ATmega16 и ATmega32:

:: Внутренний генератор, частота 1 МГц, JTAG отключен
avrdude.exe -p m16 -F -B 4800 -c apu_2 -P ft0 -U hfuse:w:217:m -U lfuse:w:225:m

:: Внутренний генератор, частота 2 МГц, JTAG отключен
avrdude.exe -p m16 -F -B 4800 -c apu_2 -P ft0 -U hfuse:w:217:m -U lfuse:w:226:m

:: Внутренний генератор, частота 4 МГц, JTAG отключен
avrdude.exe -p m16 -F -B 4800 -c apu_2 -P ft0 -U hfuse:w:217:m -U lfuse:w:227:m

:: Внутренний генератор, частота 8 МГц, JTAG отключен
avrdude.exe -p m16 -F -B 4800 -c apu_2 -P ft0 -U hfuse:w:217:m -U lfuse:w:228:m

:: Внешний кварц, частота от 1 МГц, JTAG отключен
avrdude.exe -p m16 -F -B 4800 -c apu_2 -P ft0 -U hfuse:w:201:m -U lfuse:w:239:m

ВНИМАНИЕ. Для остальных МК необходимо свериться с документацией!!! Далее необходимо загрузить уже саму прошивку в МК. Делается это следующей строкой:

avrdude.exe -p m16 -F -c apu_2 -P ft0 -U flash:w:Test.hex:a

А вообще для упрощения работы и минимизации ошибок желательно написать один раз командный файл и использовать его для прошивки. Ниже привожу пример используемого мной файла

::avrdude.exe -p m16 -F -B 4800 -c apu_2 -P ft0 -U hfuse:w:201:m -U lfuse:w:228:m
avrdude.exe -p m16 -F -c apu_2 -P ft0 -U flash:w:Test.hex:a
Pause=null

Два двоеточия в первой строке означают, что данная строка закомментирована. Сделано это для того, чтобы не прошивать фьюзы каждый раз. Один раз раскомментировали, прошили и закомментировали, чтобы случайно не попортить фьюзы. Во второй строке указывается путь к hex-файлу. Третья строка необходима, чтобы окно после прошивки не закрывалось сразу, так как нужно проверить лог avrdude, чтобы убедиться в правильной прошивке МК. Обратите внимание на следующие строки, если всё так, значит всё нормально.

avrdude.exe:  verifying ...
avrdude.exe:  244 bytes of flash verified

avrdude.exe:  safemode: Fuses OK
RESET ... OK

avrdude.exe done. Thank you.

В приложенном архиве лежат avrdude c командным файлом для ATmega16, SinaProg, схема и чертеж печатной платы программатора в Diptrace. Программа готова к использованию, никакие конфиги править не нужно. Данным программатором я пользуюсь уже несколько лет, работает шустро и стабильно. До этого использовал программатор, собранный по этой статье. Однако из-за необходимости нажатия кнопок перед и после прошивки собрал приведенный здесь вариант. Драйвера для микросхемы FT-232 вы найдете здесь. Официальный сайт программы AVRdude расположен здесь. Следует заметить, что новые версии avrdude (с 6-ой версии) собраны без поддержки pthread и libusb, что ограничивает нас в использовании программаторов на ftdi под Windows. С версией из приложенного архива все работает.

Скачать архив с файлами AVR USB-Программатор
Copyright © 2014-2018 Design by Skyer