Простой USB программатор на одной микросхеме

 Введение


Данный программатор является адекватной заменой 5 проводковому программатору на LPT. Интерфейс программы интуитивно понятен. Полностью на русском. 4 кнопки управления + табло с логом.

Изначально был создан для само программирования устройства.
Устройство обменивалось данными с компьютером через виртуальный COM-порт на основе FT232R и с помощью специальных возможностей FT232R обновлялось ПО контроллера.

Такой программатор может подойти как начинающему для освоения контроллеров AVR (т.к. очень прост, не требует дополнительной настройки, да и собирается из доступных материалов) так и уже опытным пользователям для встраивания в устройства и т.п.

Также проект интересен для изучения возможностей FT232R. Иногда бывает надо подёргать ногами программно с компа или даже подключить что-нибудь к компу. Поскольку в последних моделях компьютеров сложно найти LPT или даже COM порты, а хочется иногда.

При желании можно вывести на любой пин CBUS0-CBUS4 – частоту 6,12, 24 или 48 Мгц.и использовать её для тактирования контроллера или ещё чего.
 Это делается с помощью специальной утилиты MProg взять можно тут http://www.ftdichip.com/Support/Utilities.htm

Схема

Схема программатора приведена на рис.1
Содержит:
DD1 – FT232R
C1 – неполярный конденсатор 0.1В для внутренней стабилизации 3.3В
R1-R4 – 100-500 Ом (не критично. Можно  заменить их перемычками поставлены на всякий случай. Чтоб ограничить ток при каких-то замыканиях или неполадках.)
XT1 – USB – коннектор
XT3 – разъём ISP распайка под STK200/300
Итого: 7 элементов. Красота :) 

 

 

  Рис. 1 – принципиальная схема программатора

 

Технические характеристики программатора

1.    На данный момент программатор поддерживает следующие контроллеры:
ATmega8, ATmega48, ATmega16,  ATmega128 (способ подключения других контроллеров описан ниже).
2.    Выходные напряжения:
Программатор не содержит выходного буфера т.к. FT232R имеет возможность запитывания выходных портов внешним напряжением. Таким образом, при запитывании выходных портов напряжением с платы прошиваемого контроллера производится согласование уровней сигналов. Ну, или можно запитать всё от USB.
3.    Согласование с устройством:
Выходные порты FT232R позволяют переводить их в 3-е состояние. Поэтому программатор занимает порты только на время прошивания.

Программная реализация

Программа программатора написана на Delphi, ее можно скачать в конце статьи в подразделе Downloads.

Для управления FT232R используется библиотека D2XXunit пример её использования был взят тут: http://www.ftdichip.com/Support/SoftwareExamples/CodeExamples/Delphi.htm
   
Алгоритм реализации протокола записи в контроллер:

1 переводим FT в режим битбэнг, настраиваем скорость выдачи по сути частоту SCK. (ПП -  OpenDevice)
2 указываем файл (ПП - TMainForm.OpenFileButtonClick)
3 преобразовываем HEX файл в последовательность байт начиная с 0 адреса. (так было проще чтоб номер байта являлся его адресом) (ПП – LoadFile – это для FLASH, ПП – LoadFile8bit – для EEPROM).
4 переводим последовательность байт в последовательность вывода бит. Протокола ISP (AVR_Send – для FLASH и для EEPROM - AVR_Send8bit)
5 Отправляем в спец функцию FT, и это дело передаётся в контроллер (ПП – Write_USB_Device_Buffer)

Подключение контроллеров неподдерживаемых программатором

Если контроллер не поддерживается программатором, а очень хочется его прошить имеется 2 варианта развития событий.
1.    сообщить мне о необходимости добавления контроллера.
2.    самостоятельно добавить его.

Чтоб самостоятельно добавить необходимый контроллер необходимо знать. Сигнатуру контроллера и название фьюз битов. Эта информация берётся и даташита на контроллер.
В каталоге с программой программатора имеется файл Chips.ini, в котором находятся все данные по поддерживаемым контроллерам.

Чтоб добавить новый чип, необходимо внести в этот файл данные контроллера. Это можно сделать, используя, например, обычный Notpad.

Формат данных такой: (для примера взят контроллер ATmega128)
[0x1E 0x97 0x02]         - заголовок это сигнатура контроллера по ней программатор узнаёт контроллер.
Chip = ATmega128        - название контроллера. Написать можно что угодно но для удобства пишется реальное название чипа.
EepromPageSize = 8        - размер страницы EEPROM (вообще этот параметр не используется в программе. Ну так на всякий случай был заведён поскольку фигурирует в даташите.
FlashPageSize = 128        - размер страницы FLASH
FlashPagesCount = 512    - количество страниц во флеши
;Low                - комментарий
FusesNames[0] = CKSEL0    - дальше расписаны фьюзы по названиям
FusesNames[1] = CKSEL1        как известно фъюзы записываются 3мя байтами
FusesNames[2] = CKSEL2        нижний, верхний и дополнительный
FusesNames[3] = CKSEL3        именно в таком порядке заполняются биты
FusesNames[4] = SUT0        неуказанные биты будут лишены возможности
FusesNames[5] = SUT1        редактирования и программироваться не будут
FusesNames[6] = BODE        в данном примере отсутствуют биты 18-23
FusesNames[7] = BODLEVEL
;High
FusesNames[8] = BOOTRST
FusesNames[9] = BOOTSZ0
FusesNames[10] = BOOTSZ1
FusesNames[11] = EESAVE
FusesNames[12] = CKOPT
FusesNames[13] = SPIEN
FusesNames[14] = JTAGEN
FusesNames[15] = OCDED
;Extend
FusesNames[16] = WDTON
FusesNames[17] = M103C

Печатная плата

Печатная плата приведена на рисунке 2.
    Красным цветом обозначены корпуса элементов
    Зелёным соединения на задней стороне платы.
    Все элементы и дорожки умещаются на одной стороне.
Разъём ISP вставляется на плату контактами по обе стороны. На второй стороне остаётся только соединить контакты 6, 8, 10. с общим и контакт 2 с Vcc.
На печатной плате в отличии от схемы  находится джампер J-PWR. Он служит для запитки схемы контроллера и выходных портов от напряжения USB – 5В. Версию платы в P-CADе можно скачать ниже  в подразделе Downloads.

 

     Рис. 2 – печатная плата программатора

  При создании статьи использовались следующие документы и материалы:

1.    Aponte AVR910: In-System Programming – взят алгоритм работы
2.    Datasheet ATmega128 – управляющие команды и временные характеристики
3.    Application Note AN_232R-01 – управление FT232R

  Downloads:

1. Последняя версия программы
2. Исходники и старые версии программы
3. Версия платы в P-CADе.

 

 

   Автор:  Сергей Меньшиков

  Обсудить статью можно на форуме, в разделе программатор Usb