Наши партнеры








Книги по Linux (с отзывами читателей)

Библиотека сайта rus-linux.net

Создание программатора EEPROM

Что это такое?

Заметка: Эта глава написана Abhijit Dasgupta. Его email адрес: takdoom@yahoo.com

Проект называется EEP и может быть получен с:

Пожалуйста, не пользуйтесь старым URL для EEP.

EEP - имеющий открытый аппаратный дизайн (вы можете свободно его копировать, использовать, и модифицировать) программатор EEPROM для 24-контактных и 28-контактных 5-вольтовых EEPROM. Есть много разных разработок, но главной целью было получить нечто

  • простое в построении и содержащее широко распространенные компоненты,

  • дешевое и

  • управляемое Linux.

Последняя версия - EEP-0.2.

Микросхемы в EEP из распространенной 74HCT серии, используется интерфейс параллельного порта. Я написал код драйвера только для Linux, но этот код под лицензией GPL, и вы можете его модифицировать для других операционных систем.

Я использую EEP для создания загрузочных PROM для сетевых карт, эти карты я использовал для создания бездисковых компьютеров на linux. Более детально о том, как это делается, смотрите в пакете netboot/etherboot. Также вы можете использовать его для программирования систем на микроконтроллерах с внешним ПЗУ (например, 8031).

Поддерживаемые EEPROM

Большинство программируемых 5-вольтовых 24-контактных и 28-контактных EEPROM должны работать с EEP-0.2. Вот список EEPROM, которые точно работают:

  • 24-контактная 2816/28C16, 2048 байт (16 килобит)

  • 28-контактная 2817/28C17, 2048 байт (16 килобит)

  • 28-контактная 2864/28C64, 8192 байт (64 килобит)

  • 28-контактная 28256/28C256, 32768 байт (256 килобит)

Эти EEPROM производятся различными производителями. Вот некоторые из них: Microchip, Atmel, Xicor, Catalyst, и STM.

Схема и номера контактов

Схема в PostScript (schematic.ps), но к ней прилагается рисунок GIF (schematic.gif). Версия в ascii устарела. На схеме, номера контактов показаны вне каждой микросхемы. В большом прямоугольнике справа приведены номера контактов для 28-контактного ZIF сокета.

Файл pinouts.txt содержит информацию о номерах контактов используемых микросхем.

Для используемых микросхем 74HCT, контакты Питания (Vcc) и Земли (Ground) не показаны на схеме. Разумеется, эти контакты должны быть правильно подключены. Полный список контактов (включая Vcc/Ground) приведен в файле pinouts.txt.

Конструкция

ВНИМАНИЕ: Параллельный порт вашего ПК можно запросто повредить, что-либо к нему подключая. Также возможно повредить весь ваш ПК, периферию, и окружающих людей в результате неправильного подключения и несчастных случаев с электричеством. БУДЬТЕ ПРЕДЕЛЬНО ОСТОРОЖНЫ.

Отречение: Используйте на свой риск. Не дается абсолютно никакой гарантии, смотрите ниже COPYING/LICENSE.

Программатор может быть создан на макете, но для более постоянной версии используйте печатную плату. Для шунтирования шины питания используйте 0.1uF конденсаторы. Питание 5V может быть взято из PC, но будьте с ним осторожны. 28-контактный ZIF сокет, вероятно, самый дорогостоящий компонент. Если вы используете макет, можете обойтись без него (не рекомендуется).

Резистор 180 Ом соединяет контакт 10 (Y6) верхней микросхемы 74HCT259 и контакт 1 ZIF сокета - ограничительный резистор для защиты микросхемы 74HCT259 в случае использования 28-контактной EEPROM с контактом RDY/BSY. При использовании 32 килобайтных (256 килобит) EEPROM таких как 28256, для более надежного функционирования рекомендуется, чтобы этот резистор был закорочен.

Установки джамперов

J1 и J2 - однорядные 3-контактные разъемы для джамперов. При использовании 28-контактных EEPROM, замкните пару ножек справа как на J1 так и на J2. Для 24-контактных EEPROM, замкните пару ножек слева на J1 и J2.

Нижнее выравнивание 24-контактных EEPROM

При подключении 24-контактных EEPROM (таких как 2816) в 28-контактный ZIF сокет, проверьте, что 24-контактное устройство выровнено по нижнему краю ZIF сокета. Это значит, что ножки 1, 2, 27, и 28 ZIF сокета должны остаться неиспользуемыми, и ножка земли соответственно подключена (т.е. ножка 12 24-контактного устройства должна сидеть в контакте 14 ZIF сокета).

Список компонентов

  • Микросхемы:74HCT123, 74HCT132, 74HCT138, 74HCT157, 74HCT574 (1 шт. ), и 2 74HCT259s.

  • Резисторы: 100K, 10K, 1K, 180 Ом, и 390 Ом (1 шт.).

  • Конденсаторы:100пФ, 1uF, (1 шт.) и 3 0.1uF конденсатора на шине питания.

  • Прочее: 1 Светодиод, 1 SPST переключатель, 25-контактный ленточный кабель с DB25 разъемом ("папой"), 28 контактный ZIF сокет (вместо него может использоваться макет), контактные ножки для джамперов.

Если у вас уже есть EEP-0.1

Если у вас уже есть программатор EEP-0.1, для преобразования его в программатор EEP-0.2 вы можете сделать следующие модификации:

  1. удалите соединение между 74HCT157 ножкой 1 (SEL) и верхней 74HCT259 ножкой 11 (Y6)

  2. удалите 1K резистор, соединяющий ножку 1 ZIF-сокета с Vcc

  3. добавьте соединение между ножкой 1 (SEL) микросхемы 74HCT157 и ножкой 9 разъема параллельного порта DB-25

  4. добавьте новое соединение между ножкой 10 верхней микросхемы 74HCT259 и неиспользуемой ножкой J1

  5. добавьте 180 Ом резистор между ножкой 11 верхней микросхемы 74HCT259 и ножкой 1 ZIF-сокета

Как создать программное обеспечение

Загрузите и распакуйте программное обеспечение http://metalab.unc.edu/pub/Linux/apps/circuits/EEP-0.2.tar.gz. Затем зайдите в каталог src и наберите `make'.

Использование

Для создания и считывания eeprom используется программа eep. Она читает данные из stdin и записывает их в eeprom. Данные должны быть в двоичном (чистом) формате. Обычные hex и/или ascii форматы (Intel, Motorola srecord, и т.п.) не поддерживаются, так что если ваш ассемблер выводит данные только в формате hex/ascii, вам следует преобразовать их в двоичный формат (смотрите, например, Hex2bin и srecord, доступные в архиве metalab.unc.edu/pub/Linux). При чтении, вывод также в виде необработанных двоичных данных на stdout (если не указана опция -t).

Использование:

      eep  -0|-1|-2  -r|-w  -b|-t  offset  size

где:

    -0|-1|-2  -0 выбирает порт lp0, -1 порт lp1, и -2 порт lp2,
    -r|-w     -r считывает eeprom в stdout, и -w записывает его данными из stdin,
    -b|-t     -b обычный (двоичный) режим, и -t режим отладки (ascii hex),
    offset    стартовый адрес в eeprom, 0..32767, и,
    size      количество считываемых/записываемых байт, 0..32768.

offset и size могут указываться в виде строк цифр в десятичной записи,
но будут рассматриваться в шестнадцатеричной записи, если предваряются префиксом ``0x'',
и в восьмеричной записи, если предваряются ``0''.

Примеры
--------

# Считывание содержимого 2864 в двоичном (чистом) виде и запись его в файл
eep -1 -r -b 0 8192 > contents.bin
# То же самое:
eep -1 -r -b 0 0x2000 > contents.bin


# Список 16 байт, начиная со смещения 128
eep -1 -r -t 128 16
# Same as:
eep -1 -r -t 0x80 0x10


# Запись 16384 байт из файла nepci.lzrom в первую половину 
# 28C256 eeprom, через lp0:
cat nepci.lzrom | eep -0 -w -b 0 16384 

Электрическая схема в ASCII символах

                        +-------+                      J1
              +5-------|RST    |               +5---o o o----+   +-----------+
              +5--o----|/CLR1  |         10K          |      |   |           |
                  |    |       |-----o--/VVV\-- +5    +------|---|26 A13(+5V)|
      +------+    |    |1/2 123|     |              +--------|-->|27 /WE(NC) |
 16 o-|/CS2  |    |    |       |--||-+              | +------|-->|23 A11(/WE)|
      |   CS1|----o----|B1     | 100pF              | | J2   |   |           |
      |      |         |    /Q1|---------->---------o o o    |   |  ZIF28    |
      |    Y1|---------|/A1    |                        |    |   |  socket   |
      | 138  |         +-------+         _ 1/2 74HCT132 |    |   |   for     |
      |      |                     +5 --| \   __        |    |   |  EEPROM   |
      |    Y2|--------------------------|  O--| \       |    |   |           |
  8 o-|A2    |                +-------+ |_/   |  O-----------|-->|22 /OE     |
  7 o-|A1  Y4|--------------->|EN   Y7|-----o-|_/       |    |   |           |
  6 o-|A0  Y3|----+    +5-----|RST    |     |   180 ohm |    |   |           |
      |    Y0|-+  |           |     Y6|-----|---/VVV\---|----|---|1 A14(NC)  |
      |  /CS3| |  |           | 259 Y5|-----|-----------|----+   |           |
      +------+ |  |           |     Y4|-----|-----------|------->|2 A12(NC)  |
            |  |  |           |     Y3|-----|-----------+        |           |
  5 o--->---|--|--|--------o--|D    Y2|-----|------------------->|21 A10     |
  4 o--->---|--|--|------o-|--|A2   Y1|-----|------------------->|24 A9      |
  3 o--->---|--|--|----o-|-|--|A1   Y0|-----|------------------->|25 A8      |
  2 o--->---|--|--|--o-|-|-|--|A0     |     |                    |           |
            |  |  |  | | | |  +-------+     |      +5------------|28 +5V(NC) |
            |  |  |  | | | |                |                    |           |
            |  |  |  | | | |  +-------+     |                    |           |
            |  |  |  | | | |  |     Y7|-----|------------o------>|3  A7      |
            |  |  +---------->|EN     |-----|-----------o|------>|4  A6      |
            |  |     | | | |  |       |-----|----------o||------>|5  A5      |
            |  |     | | | |  | 259   |-----|---------o|||------>|6  A4      |
            |  |     | | | |  |       |-----|--------o||||------>|7  A3      |
            |  |     | | | |  |       |-----|-------o|||||------>|8  A2      |
            |  |     | | | +--|D      |-----|------o||||||------>|9  A1      |
            |  |     | | +----|A2   Y0|-----|-----o|||||||------>|10 A0      |
            |  |     | +------|A1     |     |     ||||||||       |           |
            |  |     +--------|A0  RST|     |     ||||||||       | ZIF28     |
            |  |              +-------+     |   +------------+   | socket    |
            |  |                    |       |   |   data in  |   |  for      |
            |  |                   +5       +-->|/OE         |   | EEPROM    |
            |  |                                |     574    |   |           |
            |  +------------------------------->|CLK         |   |           |
            +----+                              |   data out |   |           |
                 |                              +------------+   |           |
                 |              +------------+     ||||||||      |           |
  9 o-------------------------->| SEL        |     ||||||||      |           |
                 |              |          B3|<----|||||||o------|19 D7      |
 11 o---<-----------------------|Y3        B2|<----||||||o-------|18 D6      |
 12 o---<-----------------------|Y2        B1|<----|||||o--------|17 D5      |
 13 o---<-----------------------|Y1  157   B0|<----||||o---------|16 D4      |
 15 o---<-----------------------|Y0        A3|<----|||o----------|15 D3      |
                 |              |          A2|<----||o--- data---|13 D2      |
                 |              |          A1|<----|o---- bus ---|12 D1      |
                 |       GND----|/OE       A0|<----o-------------|11 D0      |
  +5--o--+       |              +------------+                   |           |
      |  |  __   o---------------------------------------------->|20 /CE   14|
    100K +-|  \  |  __                                           +---------+-+
  sw1 |    |   O-o-|  \ 1/2 74HCT132                                       |
  o-->o----|__/    |   O---390ohm--+                                       |
  |   |          +-|__/            |                                  GND -+
  |  --- 1uF     |                LED
  |  ---     +5--+                 |
  |   |                            |
  +---o----------------------------o- GND

Заметки:

1. номера контактов разъема параллельного порта DB25 с левого угла.
3. 24-контактные микросхемы (например, 2816) должны быть выровнены по нижнему краю 28-контактного ZIF сокета.
2. Номера ножек справа для ZIF-28 сокета, не для микросхем.
7. Названия сигналов в ZIF-28 сокете для 28-контактных EEPROM
( для 24-контактных EEPROM они приведены в приложениях).
4. J1 и J2 однорядные 3-контактные разъемы для джамперов (или используйте DPDT переключатель).
5. Для 28-контактных EEPROM, замкните левую пару контактов как на J1, так и на J2.
6. Для 24-контактных EEPROM, замкните левую пару контактов и на J1, и на J2.
8. Переключатель SPST sw1 должен быть открыт для разрешения функционирования программатора.
9. Полный список контактов микросхем смотрите в файле pinouts.txt
Abhijit Dasgupta takdoom@yahoo.com