Библиотека сайта rus-linux.net
Создание программатора EEPROM
Что это такое?
Заметка: Эта глава написана Abhijit Dasgupta. Его email адрес: takdoom@yahoo.com
Проект называется EEP и может быть получен с:
Главный сайт (загрузка только исходных кодов): http://metalab.unc.edu/pub/Linux/apps/circuits/. Ищите файлы с именем EEP-0.2.tgz и eprom.html.
Просмотрите или загрузите: http://members.nbci.com/abhijit_dasgupta/eep/index.html
EEP - имеющий открытый аппаратный дизайн (вы можете свободно его копировать, использовать, и модифицировать) программатор EEPROM для 24-контактных и 28-контактных 5-вольтовых EEPROM. Есть много разных разработок, но главной целью было получить нечто
простое в построении и содержащее широко распространенные компоненты,
дешевое и
управляемое Linux.
Микросхемы в 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 килобит)
Схема и номера контактов
Схема в 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 вы можете сделать следующие модификации:
удалите соединение между 74HCT157 ножкой 1 (SEL) и верхней 74HCT259 ножкой 11 (Y6)
удалите 1K резистор, соединяющий ножку 1 ZIF-сокета с Vcc
добавьте соединение между ножкой 1 (SEL) микросхемы 74HCT157 и ножкой 9 разъема параллельного порта DB-25
добавьте новое соединение между ножкой 10 верхней микросхемы 74HCT259 и неиспользуемой ножкой J1
добавьте 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 |