Программатор EEPROM и Flash из Arduino

Понадобился программатор? Тогда у вас есть 2 пути: купить готовый или сделать самостоятельно.

Купить готовый более предпочтительный вариант — купить готовый, тем более сейчас выбор готовых программаторов очень хороший. Там будет и нормальный софт, который понятный и работает из коробки и перечень микросхем для программирования очень большой (универсальный).

Собрать самостоятельно — иногда быстрее и дешевле. И главный тут момент — я могу).

В моем случае «быстрее» был решающий фактор, нужно было «вчера». Мне нужно было прочитать и переписать одну микросхему AM29F200, поэтому я припаял ее просто на проводках и успешно справился с задачей. Но паять 44 ноги и развешивать эту «бороду» это испытание. В статье нету схемы, потому, что ее просто нет, есть Arduino Mega и ноги микросхемы подключаются к ней согласно Даташита. Скетч в архиве, работает все очень хорошо и быстро.

Универсальный программатор параллельной памяти (EEPROM/Flash) (источник)

Универсальный программатор параллельной памяти (EEPROM/Flash)

Универсальный программатор параллельной EEPROM/Flash памяти, поддерживающий огромное количество различных микросхем.

🚀 Ключевые возможности

  • Полноценный GUI: Удобный графический интерфейс для управления процессом, написанный на Python.
  • Внушительный объем: Текущая конфигурация пинов позволяет «прошивать» чипы объемом до 1 МБ. Теоретический же предел — безумные 4 ГБ (правда, удачи вам на скорости в 500 Кбит/с!).
  • Всеядный размер страниц: Полная поддержка микросхем с размером страницы от 1 байта до 4096 байт.
  • Интерактивный доступ: Управлять программатором можно напрямую через обычный Монитор порта.
  • Шустрый UART: Аппаратный интерфейс на скорости 500 Кбит/с для обмена данными с ПК через USB.
  • Максимум скорости: Передача данных в бинарном формате и использование режима быстрой постраничной записи (Page Write) самой памяти.

🛠 Аппаратная часть (Hardware)

Сердце программатора — микроконтроллер ATmega2560.

Шина адреса (до 20 бит в текущей конфигурации, с возможностью расширения до 32 бит), как и шина данных памяти, управляются напрямую через пины «атмеги». За связь с ПК отвечает аппаратный интерфейс UART: он гоняет данные в бинарном формате на скорости до 500 Кбит/с через USB.

🔌 Схема подключения (Pinout)

Связь между микроконтроллером (MCU) и прошиваемой микросхемой (Target) осуществляется по следующей схеме:

ATmega2560Пины Arduino MegaПины целевой памяти
PA0..722..29Линии адреса A0..7
PC0..737..30Линии адреса A8..15
PB0..353..50Линии адреса A16..19
PL0..749..42Линии данных Q0..7
PG041Разрешение записи (#WE)
PG140Разрешение вывода (#OE)
PG239Разрешение чипа (#CE)

💡 Подсказка: Все необходимые пины удобно сгруппированы на самом большом разъеме платы Arduino Mega. Если у вашей микросхемы меньше линий адреса, просто оставьте неиспользуемые пины «Меги» свободными.


🧪 Протестированные микросхемы

Ниже приведен список чипов, чья работа была успешно проверена на этом программаторе, а также рекомендуемые для них настройки. Если вы запустите программатор с микросхемой, которой нет в списке — смело дополняйте таблицу!

НазваниеПроизводительНапряжениеОбъемТипРазмер страницы
SST29EE020SST / Microchip5 В256 КБEEPROM128 байт
SST39LF040SST / Microchip3.3 В512 КБFlashЛюбой (4096 байт — быстрее всего)

⚠️ ВАЖНО: При работе с чипами на 3.3 В обязательно используйте согласователи логических уровней! Иначе вы просто поджарите вашу микросхему.


💻 Программное обеспечение (Software)

Реализация

Со стороны микроконтроллера всё просто: данные прилетают по UART и записываются в EEPROM строго по даташиту (или считываются обратно). Управление программатором строится на лаконичных текстовых командах, которые отправляются через тот же серийный интерфейс:

КомандаФункция
iВывести «EEPROM Programmer» (для идентификации устройства)
vПоказать версию прошивки
a [00000100]Выставить на шине адреса 00000100 в hex (для тестов)
d [00000000] [0003ffff]Показать Hex-дамп памяти в диапазоне 00000000-0003ffff (256 КиБ)
r [00000000] [0003ffff]Считать память в диапазоне 00000000-0003ffff и отправить как бинарник
p [00000100] [0003ffff]Записать бинарные данные в страницу памяти 00000100-0000017f (после команды нужно передать сами байты)
lЗаблокировать EEPROM (включить защиту от записи)
uРазблокировать EEPROM (выключить защиту от записи)
eСтереть чип полностью (Chip Erase — необходимо для Flash)
EПереключиться в режим записи для EEPROM (постраничный)
FПереключиться в режим записи для Flash (побайтовый)

Как управлять?

Для ручного контроля с ПК подойдет абсолютно любой Монитор порта (главное — выставите скорость 500 000 бод).

Однако, чтобы выжать из программатора максимум, лучше использовать готовые Python-скрипты из комплекта. Скрипт eepromgui.py запускает удобный графический интерфейс. В нем можно в пару кликов читать и записывать бинарные файлы, а также наглядно смотреть содержимое памяти.

Скрипты тестировались в Linux, но без проблем заведутся на любой ОС. Если вы используете недорогие китайские клоны Arduino Mega на Windows, вам может понадобиться драйвер для чипов CH330N или CH340N.

🛠 Компиляция и прошивка (Compiling and Uploading)

Вариант 1: Через Arduino IDE

  1. Перейдите в меню Инструменты ➔ Плата ➔ Arduino AVR Boards и выберите Arduino Mega or Mega 2560.
  2. В меню Инструменты ➔ Процессор выберите ATmega2560 (Mega 2560).
  3. Подключите Arduino Mega к вашему ПК через USB.
  4. Откройте скетч EEPROM_Programmer и нажмите кнопку Загрузка (Upload).

Вариант 2: Использование готового HEX-файла

  1. Убедитесь, что у вас установлена утилита avrdude.
  2. Подключите Arduino Mega к ПК.
  3. Откройте терминал (или командную строку).
  4. Перейдите в папку с HEX-файлом.
  5. Выполните команду (при необходимости замените /dev/ttyUSB0 на ваш порт, например, в Windows это будет что-то вроде COM3):avrdude -c wiring -p m2560 -P /dev/ttyUSB0 -b 115200 -U flash:w:eeprom_programmer_m2560.hex -D

Вариант 3: Сборка через Makefile (Linux / macOS)

  1. Убедитесь, что у вас установлены avrdude и пакет инструментов avr-gcc.
  2. Подключите Arduino Mega к ПК.
  3. Откройте терминал и перейдите в папку с файлом Makefile и скетчем.
  4. Выполните команду для автоматической сборки и загрузки прошивки:make upload

📝 Заключение / Резюме проекта

Этот программатор — отличное, бюджетное и гибкое решение «из говна и палок» (в лучшем смысле этого слова) для тех, кому нужно быстро оживить старое железо, прошить BIOS или поработать с параллельной памятью, не покупая дорогой программатор вроде TL866.

Главные фишки, которые делают этот проект крутым:

  • Копеечная себестоимость: Всё собирается на базе народной Arduino Mega 2560 и горстки проводов (или простой самодельной платы).
  • Удобство «из коробки»: Наличие продуманного запускаемого Python GUI, запускает привычную оболочку (окно программы) и избавляет от необходимости ковыряться в консоли — интерфейс понятен и дружелюбен.
  • Гибкость под капотом: Прямое управление шинами с микроконтроллера и поддержка текстовых команд позволяют легко модифицировать проект, добавлять новые типы памяти и использовать устройство как отладочный инструмент.

Проект полностью открыт, готов к работе и станет отличным дополнением к инструментарию любого low-level разработчика или любителя ретро-электроники.