Электроника / Atmel AVR
Добавить в избранное

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

Описание программатора используемого для микороконтроллеров Atmel AVR

AVR USB-Программатор

Здесь я приведу описание своего программатора для микороконтроллеров AVR. Собран он по этой схеме.

Программатор довольно таки простой, основой является микросхема преобразователь интерфейсов 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. Также на плате установлена кнопка сброса для FT232RL, на всякий случай, чтобы не переподключать программатор. Схема и фото программатора приведена ниже.

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

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

avr usb программатор собран своими руками по схеме изображения avr usb программатор собран своими руками по схеме изображения

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

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

-p тип контроллера. m16 означает что у нас мега16

-c тип программатора. В avrdude.conf он описан как apu_2

-P порт на котором сидит программатор. В данном случае подключена только одна микросхема FT232RL, так что ft0 (если воткнуто несколько таких конвертеров то этот параметр может быть ft1, ft2 и так далее). Определить номер программатора можно простым перебором.

-U указываем что что то пишем. Формат следующий memtype:r|w|v:filename[:format]. Вначале указываем куда (flash, eeprom или fuse), потом что делаем читаем, пишем, проверяем, затем путь к прошивке. Прошивка у меня лежит в той же папке что и avrdude.exe, поэтому и путь только лишь имя файла. Если же прошивка лежит где то далеко, то полный путь можно указать в кавычках, например, так: «c:\FTBB\m16boot.hex». А последняя «а» означает, что тип файла с прошивкой определить автоматом.

-F игнорирование сигнатуры. Для avrdude ATmeg16 и ATmega16A имеют разные сигнатуры (если в avrdude.conf не определены отдельные сигнатуры для каждого МК). Однако надо быть осторожным, поскольку использование этого ключа может привести к тому, что вы, например, запишете прошивку для ATtiny2313 в ATmega16.

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

avr usb программатор собран своими руками по схеме изображения

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

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

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

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

::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:217:m -U lfuse:w:239:m

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

avr usb программатор собран своими руками по схеме изображения

В приложенном архиве лежат схема, чертеж печатной платы, avrdude со всеми файлами и bat-файл для ATmega16. Драйвера для микросхемы FT-232 вы найдете здесь. Официальный сайт программы AVRdude download.savannah.gnu.org/releases/avrdude/

Дополнительная информация, доделано, переделано

При работе с микроконтроллерами одним из первых встает вопрос наличия программатора для загрузки программа в микроконтроллер. Большинство программаторов либо имеют в составе микроконтроллер, который тоже надо чем-то прошить, либо требуют компьютера наличия COM или LPT интерфейсов на компьютере. Также многие простые в сборке программаторы работают только со старыми операционными системами (WinXP или Win2K).

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

Основой программатора является микросхема преобразователь интерфейсов USB-UART FT232RL. В интернете можно найти много реализаций программаторов на данной микросхеме, например, здесь.

Программатор просто направляет сигналы MOSI, MISO, SCK и RESET, которые формируются на выводах DCD, DTR, RTS и DSR микросхемы DD1 (FT232RL) соответственно, на нужные выводы прошиваемого микроконтроллера. Причем, делает он это только в момент программирования микроконтроллера, в остальные моменты времени программатор отключен от прошиваемой платы за счет 4-х буферных элементов микросхемы DD2 (74HC125). Состояние линий MOSI, MISO, SCK и RESET устанавливается/считывается прошивающим софтом на компьютере. Передача данных между компьютером и микросхемой FT232RL идет по шине USB (от которой питается и программатор).

На плате программатора установлено 4 светодиода. Светодиод HL4 («POWER») сигнализирует о подаче на программатор напряжения питания с шины USB. Светодиод HL3 («PROG») индицирует процесс прошивки микроконтроллера (горит только во время прошивки). Светодиоды HL1 («RX») и HL2 («TX») индицируют приём и передачу данных по UART. Также на плате установлена кнопка сброса для FT232, на всякий случай, чтобы не переподключать программатор. Схема и фото программатора приведена ниже.

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

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

Прошивка микроконтроллеров

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

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

Используются следующие ключи:

  • -p тип контроллера. m16 означает что у нас мега16, а вообще мнемонику модели микроконтроллера можно подсмотреть в файле avrdude.conf
  • -c тип программатора. В avrdude.conf он описан как apu_2
  • -P порт на котором сидит программатор. В данном случае подключена только одна микросхема FT232RL, так что ft0 (если подключено несколько устройств на базе FT232RL, то этот параметр может быть ft1, ft2 и так далее). Определить номер программатора можно путем перебора.
  • -U указываем что что то пишем. Формат следующий memtype:r|w|v:filename[:format]. Вначале указываем куда (flash, eeprom или fuse), потом что делаем читаем, пишем, проверяем, затем путь к прошивке. Прошивка у меня лежит в той же папке что и avrdude.exe, поэтому и путь только лишь имя файла. Если же прошивка лежит где то далеко, то полный путь можно указать в кавычках, например, так: «C:\AVR\Test.hex». А последняя «а» означает, что тип файла с прошивкой определить автоматом.
  • -F игнорирование сигнатуры. Для avrdude ATmeg16 и ATmega16A имеют разные сигнатуры (если в avrdude.conf не определены отдельные сигнатуры для каждого МК). Однако надо быть осторожным, поскольку использование этого ключа может привести к тому, что вы, например, запишете прошивку для ATtiny2313 в ATmega16.

При попытке в первый раз прошить контроллер, программа выдаст ошибку. Это связано с тем, что изначально (от производителя) МК настроен на тактовую частоту 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

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

    ::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-Программатор

Поделиться
Понравился материал?

Комментарии

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