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

Простой 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. На данный момент программатор поддерживает следующие контроллеры: 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.

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

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

Downloads:

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

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

📎📎📎📎📎📎📎📎📎📎