Предлагаем читателям описание конструкции простого программатора. Его особенность - связь с компьютером через принтерный порт, работающий в режиме ЕРР. В отличие от стандартного, этот режим позволяет с большой скоростью обмениваться восьмибитными данными в обоих направлениях. Принципиальная схема простого программатора микросхем FLASH-памяти показана на рис. 1. Линии DATA1-DATA8 параллельного порта компьютера через шинный формирователь DD2 связаны с шиной данных FLASH-микросхемы и входами регистров DD4-DD7. Выходы последних образуют шину адреса. Так как порт компьютера - восьмиразрядный, адрес записывают в четыре приема по шесть разрядов. Регистр, в который будет производиться запись в данном цикле, задают двумя старшими разрядами выводимого в порт кода. Анализируя их, дешифратор DD1 направляет строб адреса ADDRSTB на тактовый вход соответствующего регистра.
Логический узел, собранный на элементах DD3.1 - DD3.3, формирует сигнал WAIT, свидетельствующий о готовности программатора к обмену с портом, он же управляет микросхемой DD2. Сигналом WRITE компьютер переключает направление передачи данных формирователем DD2. А элемент DD3.4, в зависимости от логического уровня упомянутого сигнала, выдает взаимно инверсные сигналы ОЕ и WR. Последние вместе с сигналом СE, повторяющим строб данных порта DATASTB, управляют программируемой микросхемой. Вероятно, читатели заметили, что логика работы параллельного порта и названия его сигналов отличаются от принятых в стандартном принтерном интерфейсе CENTRONICS. Дело в том, что уже в течение многих лет подавляющее большинство компьютеров оснащается контроллерами параллельного порта, для которых CENTRONICS - всего лишь один из возможных режимов работы. Для связи с современными лазерными и струйными принтерами, а также со сканерами, внешними накопителями на жестких дисках и другими устройствами, подключаемыми к этому порту, широко применяют другие режимы, позволяющие не только ускорить передачу информации, но и сделать ее двухсторонней. К сожалению, в радиолюбительских конструкциях ими пользуются редко, возможно, из-за отсутствия сведений о них в доступной технической литературе. Постараемся восполнить пробел. Необходимый для работы описываемого программатора режим параллельного порта носит название ЕРР - Enhanced Parallel Port (улучшенный параллельный порт). Он позволяет передавать два вида восьмиразрядной информации - адреса внешних устройств и данные. Различие лишь в том, что в первом случае каждый байт сопровождается импульсом низкого уровня на выходе ADDRSTB (SELECTIN), а во втором - на выходе DATASTB (AUT-OFEED). Здесь и далее в скобках - привычные названия действующих на тех же выводах разъема LPT сигналов интерфейса CENTRONICS. Обмен в режиме ЕРР - двухсторонний. Направление задает контроллер, устанавливая до начала строба адреса или данных и поддерживая во время его действия соответствующий логический уровень на выводе WRITE (STROBE): низкий - от компьютера к внешнему устройству, высокий - обратно. Для приема сигнала, подтверждающего готовность устройства, предусмотрен вход WAIT (BUSY). Контроллер начнет процедуру обмена (установит низкий уровень соответствующего строба) только при низком уровне WAIT и не завершит ее, пока на этом входе не появится сигнал высокого уровня. Чтобы не "повесить" компьютер, не начатую или не завершенную операцию ввода/вывода контроллер отменит приблизительно через 15 мкс. Максимальная скорость обмена данными - практически такая же, как и с устройством, вставленным в слот расширения ISA. Предусмотрена возможность установки внешнего устройства в исходное состояние сигналом RESET (INIT), а также прием запроса прерывания, поступившего на вход INTR (АСК). Подробнее о различных режимах работы параллельного порта можно прочитать, например, в [1]
Чтобы убедиться в том, что контроллер параллельного порта компьютера работает в режиме ЕРР, или перевести его в этот режим, необходимо сразу после включения компьютера вызвать утилиту SETUP. Обычно это делают нажатием на клавишу DEL, пока на экране наблюдается заставка BIOS. Выбрав в разделе Chipset Features Setup пункт Parallel Port Mode, задают режим ЕРР или ЕСР+ЕРР. Последний - самый универсальный, и нередко именно он установлен по умолчанию. Если в предлагаемом списке режимов аббревиатура ЕРР отсутствует, задайте ЕСР (Expanded Capabilities Port - порт с расширенными возможностями). Есть вероятность, что его контроллер все-таки способен работать в нужном режиме, а разработчики программы SETUP сэкономили на выводе нескольких символов на экран. Заметим, что возможность работы порта по стандартному протоколу CENTRONICS сохраняется независимо от установок BIOS. Несколько слов о программной реализации обмена в режиме ЕРР. Как известно, контроллер порта CENTRONICS содержит всего три регистра: данных, состояния и управления, расположенных в пространстве ввода/вывода процессора соответственно по адресам BASE, BASE+1 и BASE+2. Базовый адрес (BASE) обычно равен 3F8H (для LPT1) или 2F8H (для LPT2). В некоторых компьютерах, особенно портативных, применяются и другие базы, например, 3ВСН. BIOS записывает базовые адреса последовательных портов в ОЗУ по адресам 0:408Н, 0:40АН, 0:40СН, 0:40ЕН (соответственно для портов LPT1 — LPT4), и при необходимости их можно определить, прочитав эти ячейки. Регистр адреса ЕРР имеет адрес BASE+3, а данных - BASE+4. Для выполнения операций ввода/вывода достаточно читать коды по этим адресам или записывать их. Все остальное контроллер параллельного порта сделает аппаратно. Следует иметь в виду, что все управляющие сигналы режима ЕРР остаются связанными с соответствующими разрядами портов состояния и управления обычного режима. Их неосторожным программным изменением можно нарушить логику обмена, что приведет к сбою. Перед началом работы регистр управления (BASE+2) рекомендуется обнулить. Изменяя значение разряда D2 этого регистра, в режиме ЕРР управляют уровнем сигнала RESET. Осталось рассказать, как переключить в режим ЕРР контроллер ЕСР. Для этого достаточно записать в его регистр управления ECR, находящийся по адресу BASE+402H, байт с двоичным кодом 100 в трех старших разрядах, например, 30Н. Предварительно рекомендуется запомнить значение, прочитанное из этого регистра, чтобы иметь возможность восстановить его по окончании работы. Но вернемся к программатору. Чтобы программировать с его помощью FLASH-микросхемы, процедуры SetFLASHAddr, WriteFLASH и ReadFLASH, описанные в [2], необходимо заменить следующими: const Base=$378, {для LPT1}
ЕРР Addr = Base+3;
EPP_Data = Base+4;
procedure SetFLASHAddr(A:longint);
var AA:longint;
begin
{A[0..5] - в DD4}
port[EPP_Addr] := A and $3F;
{А[6..11] - в DD5}
AA := A shr 6;
port[EPP Addr] := (AA and $3F) or 40;
{A[12..17] - в DD6}
AA := AA shr 6;
port[EPP_Addr] := (AA and $3F) or 80;
{A[18..23] - в DD7, если эти разряды адреса не нужны, их
можно использовать в качестве управляющих
сигналов или не выводить вовсе}
AA := AA shr 6;
port[EPP_Addr] := (AA and $3F) or $0C0;
end;
procedure WnteFLASH(A:longint; B:byle);
begin
SetFLASHAddr(A);
port[EPP_Data] := B;
end;
function ReadFLASH(A:longint):byte;
begin
SetFLASHAddr(A);
ReadFLASH := port[EPP Data];
end;
Чертеж печатной платы программатора и расположение деталей на ней показаны на рис. 2. В качестве разъемного соединителя XS1 применена угловая розетка CENR36F, обычно устанавливаемая на принтерах. Это позволяет соединять программатор с компьютером обычным принтерным кабелем. Напряжение питания подают на указанные на рисунке контактные площадки непосредственно или через разъем, аналогичный имеющемуся на пятидюймовых дисководах и "винчестерах". Чтобы программировать микросхемы FLASH-na-мяти, достаточно напряжения 5 В. Для аппаратного переключения их в режим чтения идентификаторов типа и производителя предусмотрен переключатель SA1. Схема его подключения изображена на рис. 3. Если в такой коммутации нет необходимости, контактные площадки под выводы нормально замкнутых контактов переключателя соединяют перемычкой.
Панель для программируемых микросхем информационной емкостью 128 или 256 Кбайт в корпусе DIP-32 устанавливают на стороне платы, обратной той, где расположены остальные компоненты. Аналогичные микросхемы в корпусах TSOP-32 и PLCC-32 подключают к этой панели с помощью переходных плат, изготовленных в соответствии с рис. 4 (положение маркировочных точек на микросхемах должно совпадать с указанным на чертежах). На плате под микросхемы в корпусе PLCC-32 расстояние между рядами контактных площадок выводов 7-10 и 23-26 пришлось увеличить, поэтому впаянные в них штыри следует изогнуть таким образом, чтобы они входили в соответствующие гнезда панели программатора. Следует иметь в виду, что микросхемы FLASH-памяти в корпусах TSOP-32 выпускают и с "зеркальным" (относительно показанного на рис. 4) расположением выводов. Вывод 1 такой микросхемы эквивалентен выводу 32 обычной и помечен треугольником. Маркировочная точка находится у вывода 32, эквивалентного выводу 1. Это позволяет, используя "сквозные" контактные площадки, монтировать микросхемы с обеих сторон печатной платы.
Выходы микросхемы DD7 программатора выведены на контактные площадки. Работая с FLASH-памятью большего (чем указано выше) объема, их используют для расширения шины адреса. При необходимости с них же снимают различные управляющие сигналы, формируя последние программным образом. Если этого не требуется, микросхему DD7 можно не устанавливать. При наличии соответствующих переходных панелей и, если необходимо, управляемых источников повышенного напряжения с помощью описанного устройства можно читать и программировать ПЗУ любых типов, в том числе внутреннюю память микроконтроллеров. ЛИТЕРАТУРА 1. Гук М. Интерфейсы ПК. Справочник. С.-Пб.: Питер, 1999. 2. Долгий А. Программирование микросхем FLASH-памяти. - Радио, 2000, № 8, с.20-23.
А. ДОЛГИЙ, г. Москва
Радио № 10, 2000