Простой 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