"Просто и доступно" - серия книг, которую с интересом читают и профессионалы, и радиолюбители
Вернуться к теме

Как "прошить" микроконтроллер
КР1878ВЕ1 без проблем? (Часть 3)

Дополнение к книге
"Шина I2C в радиотехнических конструкциях".
М.Солон-Пресс, 2004 г.

Этот материал поступил от читателя Сергея Беззубова, который прислал следующее письмо: "В связи с проблемой отладочных средств для КР1878ВЕ1 хочу предложить Вам схему USB программатора КР1878ВЕ1, сделанную на основе DLP-модуля фирмы FTDI DLP-USB245M. Если Вам понравится эта схема, мне бы хотелось, если это возможно, чтобы Вы опубликовали схему моего программатора". Проект показался действительно интересным и достойным публикации. По материалам Сергея, а также по другим материалам, полученным из Интернета, была подготовлена статья, которая предлагается вниманию посетителей сайта.

рисунок 1
Модуль DLP-USB245M

Как было уже сказано в материалах о "прошивке" микроконтроллера КР1878ВЕ1 (часть 1 и часть 2), для того, чтобы осуществить эту операцию, необходимо пользоваться операционной системой Windows 95 или Windows 98. Поскольку доступ к LPT-порту (а именно с ним работают все публиковавшиеся ранее программаторы) у Windows XP запрещен, с учетом того, что большинство пользователей "персоналок" давно отказались от устаревших операционных систем, использование USB-связи с программатором становится весьма актуальной задачей.

Вначале поговорим о том, что представляет собой DLP-модуль. Как видно из рисунка 1, это - печатная плата с установленными на ней микросхемами, кварцевым резонатором, USB-разъемом и контактными штырьками. Модуль имеет 24 контактных штырька. Расположены они в два ряда по 12 на расстояниях, соответствующих широкому корпусу DIP-24. Поэтому устанавливать модуль на печатной плате очень просто - достаточно впаять в нее обычную панельку или контактное гнездо типа PLS.

Вообще фирма FTDI выпускает разные модули с USB интерфейсом, эмулирующие последовательные и параллельные порты персонального компьютера, но здесь мы будем говорить только о DLP-USB245M, представляющем собой вариант преобразователя с параллельным 8-разрядным интерфейсом. С остальными модулями читатель сможет познакомиться, посетив сайт фирмы-производителя . Там же можно получить и необходимое программное обеспечения, а также рекомендации по написанию драйверов.

Модуль имеет следующие основные характеристики:
- возможет прием и передача данных со скоростью до 1 Мбайт/с;
- буфер передачи типа FIFO объемом 384 байт;
- буфер приема типа FIFO объемом 128 байт;
- протокол шины формируется аппаратно;
- совместимость с USB 1.1 и USB 2.0;
- возможность сохранения конфигурации во встроенном EEPROM;
- драйверы виртуального COM-порта совместимы со всеми ОС;
- USB direct драйверы совместимы с Win 98/NT/2000/ME/XP.

Применение модуля, как указывают его разработчики, предельно просто и не вызовет никаких трудностей для тех, кто хотя бы немного знаком с принципами программирования для PC.

рисунок 2
Расположение контактов
на плате модуля DLP-USB245M

На рисунке 2 показано расположение контактов модуля DLP-USB245M, их наименования. Ниже приводится описание функционального назначения контактов.

- "1" BID - выход; предназначен для идентификации используемого модуля; высокие уровень идентифицируется как DLP-USB232M, низкий уровень идентифицируется как DLP-USB245M;
- "2" GND - общий провод схемы;
- "3" RST - вход; используется для сброса модуля внешним устройством; если этот вход не задействуется, его необходимо подключить к шине питания VCC внешней схемы;
- "4" RSO - выход; сигнал внутреннего генератора сброса;
- "5" GND - общий провод схемы;
- "6" 3V3 - выход; вывод внутреннего источника напряжения 3,3 В; отсюда можно запитать внешнюю схему, если ее потребление не превысит 5 мА;
- "7" GND - общий провод схемы;
- "8" SLP - выход; сигнал активности USB шины; если по шине идет обмен данными, сигнал имеет низкий уровень, при остановке обмена устанавливается в высокий уровень; этот сигнал может быть использован для коммутации P-канального транзистора, управляющего внешней схемой и, таким образом, снизить энергопотребление;
- "9" SND - вход; сигнал инициации обмена по шине;
- "10" VIO - вход; питание параллельной шины данных; если модуль сопрягается с 3,3-вольтовыми логическими элементами, этот вывод соединяется с источником напряжения 3,3 В; либо соединяется с VCC внешней схемы для питания напряжением 5,0 В; возможно также соединение с выводом "11" EXT;
- "11" EXT - вход; сигнал питания модуля напряжением 4,4…5,25 В; этот вывод должен быть соединен с выводом "12" PVC для включения в режим USB-порта;
- "12" PVC - выход; напряжение питания; этот вывод может быть использован для питания внешней схемы, если ее потребление не будет более 500 мА;
- "13" RXF - выход; сигнал поступления данных в буфер приема; имеет низкий уровень, когда в буфере находится хотя бы один байт данных из 128 возможных;
- "14" TXE - выход; сигнал заполнения буфера передачи; имеет высокий уровень, когда буфер микросхемы заполнен на величину 385 байт;
- "15" WR - вход; сигнал чтения данных с линий параллельного порта;
- "16" RD - вход; сигнал записи данных из буфера обмена;
- "17…24" D7…D0 - вход/выход; двунаправленные линии данных.

Как уже было сказано, программное обеспечение для модуля имеет две основных составляющих: ПО виртуального COM-порта (VCP) и ПО типа D2XX, позволяющее "общаться" с помощью DLL-драйвера. Драйвер типа D2XX имеет в своей основе Windows WDM драйвер, который связывает прикладное программное обеспечение (то есть программное обеспечение, разработанное пользователем) с USB портом. Для разработки прикладного ПО может быть использована любая среда визуального программирования, например, VC++,C++Builder,Delphi, VB.

В составе модуля имеется EEPROM типа 94С46, в котором может храниться специфическая информация, которая загружается туда пользователем. Сюда можно "зашить" самые разнообразные данные, например VID и PID идентификаторы, наименование производителя, серийный номер. Но прежде чем начинать "прошивку" этой информации, необходимо установить D2XX драйвер.

Что необходимо сделать, чтобы установить драйвер? Необходимо следовать рекомендациям инструкции, приведенной ниже.

1 Поместить драйвер FTD2XX.dll на жесткий диск компьютера (драйвер можно получить в Интернете с сайта dlpdesign.com или ftdichip.com).

2 С этих же сайтов загрузить программу FTDIUNIN.EXE.

3 Аппаратно сконфигурировать модуль по способу питания и величине напряжения питания (за это "отвечают" выводы "10", "11" и "12). Также убедиться, что уровень сигнала на входе "3" высокий.

4 Соединить модуль с USB портом компьютера при помощи стандартного соединителя (с одной стороны - соединитель типа "А", подключение к источнику сигнала, с другой - тип В, подключение к периферийному устройству). Это действие инициализирует Windows на загрузку драйвера. Когда появится окно "выбрать драйвер", следует отыскать папку, в которой расположен драйвер FTD2XX.dll, и компьютер автоматически его установит. Если компьютер потребует перезагрузить систему, это необходимо выполнить. Теперь при каждом подключении модуля он будет автоматически опознан и для него загружен драйвер.

5 Запустить программу FTDIUNIN.EXE или иное программное обеспечение и выполнить запись данных в EEPROM. Программируется VID (0403) и PID (6001), также можно запрограммировать данные о разработчике ID. Вообще, как сказано в документации, VID и PID уже запрограммированы на заводе-изготовителе, и их можно оставить таковыми по умолчанию. Но если возникнет необходимость их изменить, то такая возможность имеется.

6 Отсоединить модуль от компьютера, затем, выждав 10 секунд, повторно присоединить модуль и произвести перезагрузку компьютера. Модуль готов к работе.

Следует обратить внимание, что имеющаяся в окне загрузчика функция "Test" предназначена для проверки работоспособности модуля DLP-USB232M, а в случае использования DLP-USB245M она работать не будет. Функция же "Read" работать будет в любом случае и с ее помощью можно получить содержимое EEPROM.

рисунок 3
Принципиальная схема DLP-модуля

Вообще-то модуль DLP можно собрать и самостоятельно, по схеме рис.3. Для этого потребуется приобрести микросхему FT245BM, память EEPROM 93С46, кварцевый резонатор на 6 МГц, гнездо USB, несколько резисторов и конденсаторов, контактные штыревые планки. Можно вообще обойтись без планок, разработав печатную плату для вашего устройства с учетом этой "обвязки". Конечно, таким образом можно сэкономить деньги, однако едва ли получится экономия времени. Отсюда можно "скачать" общую схему DLP-модуля, а отсюда - варианты схем модуля с различными вариантами питания внешней части конструкции, относящейся к пользовательской компетенции.

Теперь перейдем непосредственно к программатору. Алгоритм его работы аналогичен алгоритму работы программатора А.Измайлова, который был описан во второй части дополнения "Как прошить КР1878ВЕ1 без проблем", отличие состоит в использовании языка С++ и WinApi. Функции обращения к портам заменены функциями обращения к DLL, которая, в свою очередь, обращается к низкоуровнему драйверу. Низкоуровневый драйвер "общается" с микросхемой, установленной в DLP-модуле.

Микросхема EEPROM, установленная в DLP-модуле, здесь используется лишь для опознания программатора, так как к компьютеру может быть подключено несколько устройств на основе FT245BM. Программа поддержки является многопоточной, то есть не "зависает" на время программирования. DLP-модуль работает в режиме Bit-Bang, то есть линии ввода-вывода функционируют аналогично портам ввода-вывода микроконтроллера. Питание программатора берется с USB, то есть никакого дополнительного источника питания не потребуется.

Данный программатор собирался его автором на макетной плате и после испытаний был разобран в целях модернизации его схему. В настоящее время имеется два варианта схемы, которые приводятся ниже. Автор завершил их испытания и гарантирует надежную работу "железа" и "софта".

рисунок 4
Схема первого варианта программатора

На рисунке 4 показан первый вариант программатора, с использованием ключей на транзисторах КП501Б. Эту схему в "читабельном" варианте можно получить отсюда. Микросхема DA1 представляет собой преобразователь напряжения 5/12 В. Если такую микросхему найти не удастся, возможно использовать внешний источник питания на напряжение 12…12,5 В, например, такой, как был описан в книге. Программное обеспечение для этого варианта скачивайте отсюда. А микросхема 74НС14 может быть заменена на отечественную КР1564ТЛ2.

рисунок 5
Схема второго варианта программатора

На рисунке 5 показан второй вариант программатора, в котором Сергей решил заменить транзисторы КП501Б на трехстабильный буфер 74HC125 (отечественный аналог КР1564ЛП8) и использовать всего два состояния - "0" и третье состояние. Использование этой микросхемы, как предполагает автор, позволяет повысить быстродействие программатора. Других особенностей схема не имеет и легко повторяется. Программное обеспечение для этого варианта скачивайте отсюда.

Теперь поговорим о том, как настроить программное обеспечение программатора. Делается это очень просто. Во-первых, подключив его к USB-порту, нужно будет инсталлировать драйвер таким образом, как это было указано выше. Драйвер FTD2XX.dll имеется в комплекте программ. Во-вторых, необходимо несколько видоизменить содержимое EEPROM. Эта задача выполняется лучше всего с помощью программы EditEEPROM.exe.

рисунок 6
Внешний вид окна программы EditEEPROM

На рисунке 6 показан внешний вид окна программы EditEEPROM. После запуска программы нужно найти подключенное устройство (программатор) и установить с ним связь. Для этого в меню "файл" выбираем пункт "поиск устройств", затем в том же меню выбираем пункт "открыть порт" и далее находим подключенное устройство. Необходимо в область UserArea записать фразу "Ve1ProgUSB" с учетом регистра. Поступаем так: в зоне "UserArea" окна программы набираем "Ve1ProgUSB" (без кавычек), затем в меню "UserArea" выбираем "записать". Желательно также перед записью данных установить величину максимального потребляемого тока равной 180 мА. Собственно, на этом настройка заканчивается.

рисунок 7
Внешний вид окна программы Ve1ProgUSB

А теперь - собственно о работе с программатором. Начать работу с ним необходимо с запуска Ve1ProgUSB.exe. Это программа поддержки, которая была непосредственно разработана Сергеем. Вначале в меню "настройка" выбираем "поиск устройств", затем в этом же меню выбираем "открыть порт" и название найденного устройства. Программатор готов к работе, открытие файлов "прошивки" (в виде .hex или .sav) осуществляется по меню "файл" (пункт "открыть"). В дальнейшем автор планирует добавить верификацию и, возможно, HEX редактор. Время "прошивки"ы микроконтроллера составляет приблизительно 15 секунд (DLP-модуль настроен на работу с USB2.0).

рисунок 8
Ввнешний вид макета программатора

И в заключение приводим внешний вид (рисунок 8) аппаратной части программатора в авторском варианте. Сергей не стал заниматься разработкой "по всем правилам" печатной платы, а просто собрал его на макетной плате. Так что если кто-то решит разработать печатную плату, призываем прислать ее эскиз для дополнения этой статьи, желательно, с фотографией сборки и именем-фамилией разработчика.

© Авторская страница Б.Ю.Семенова.