Хабрахабр

[Из песочницы] Программатор для EPROM на Arduino

Тесты оперативной памяти и периферии проводить. Понадобилось при изучении и ремонте компьютеров, которые старше меня, прошивать ПЗУшки. Нормального программатора у меня на тот момент не было.

В современных компах все ещё встречается данный интерфейс (правда не полноценный разъем, а на гребенке) да и купить плату в PCI слот тоже не проблема, но возникают уже сложности с софтом. Собрать на логике для LPT порта, конечно, можно, но данный вариант был отброшен, так как для использования пришлось бы включать ещё какого-нибудь старичка. Соответственно, в современных версиях Windows ПО не будет работать. Он был написан очень давно, когда работа с портами ввода/вывода в операционных системах велась иначе.

И даже в процессе разработки все же его купил себе, но он не в состоянии прошить микросхемы, которые требуют высокое напряжение программирования. Сразу стоит оговориться, что про существование TL866 знаю. Максимум 18 вольт (TL866+ или 21 для предыдущей версии).

Собрав программатор, я смог сдампить пару интересующих чипов. Беглое гугление привело меня к данному репозиторию. А вот с прошивкой все оказалось куда сложнее… Софт этого просто не умеет… Его, конечно, можно обмануть, выставив неправильный чип, но работает это не во всех случаях и явно не наш метод

Соответственно, все устройства перезагружаются. Очень сильно огорчил пользовательский интерфейс, который, вместо классического варианта с предоставлением права выбора порта пользователю, проходился по всем доступным последовательным интерфейсам. Особенно обидно, наверное, когда у тебя 3D принтер уже часов 10 печатает детальку с флешки, а тут такая подстава...

В данном случае исходных кодов к графическому интерфейсу нет. Мир OpenSource прекрасен тем, что ты можешь взять проект и дописать его под свою задачу. Стало интересно и появился небольшой повод для изучения Qt. По крайней мере я их не нашел, хотя можно было написать разработчику. Так что софт будет кросплатформенный.

Решил пожертвовать поддержкой EEPROM в софте. Берем за основу схему из предыдущего проекта и дорабатываем устройство до требуемого функционала. При доработке опирался на самую объемную микросхему (27C512 для DIP28) и убрал всю путаницу относительно адресных ножек. Возможно, это не совсем удачное решение, но для электрически стираемых чипов уже не нужно такое высокое напряжение. Это освободит дополнительные ноги самого микроконтроллера, которые понадобятся для управления подачей напряжения программирования. Весь адрес будет задаваться исключительно при помощи сдвиговых регистров (74HC595). А все необходимые сигналы (PRG) можно получить модификацией адреса перед загрузкой в регистры.

Изменения только в области защиты выводов микроконтроллера и сдвиговых регистров. Принцип подачи напряжения программирования остался прежним. 0. Заменил резисторы (1 КОм) на диоды с подтяжкой к лог. Хотя, справедливости ради, и резисторы работают. Это менее агрессивный вариант.

Изучив документацию на все интересующие чипы, определил, что требуется три точки подачи Vpp:

  1. 27C16 на 21 ногу микросхемы (23 ногу DIP28 сокета)
  2. 27C32 и 27C512 на сигнал #OE (Output Enable)
  3. 27C64, 27C128, 27C256 на 1 ногу микросхем

Это адресная нога A13 для более емких собратьев. Микросхемы 27C16 и 27C32 от остальных отличаются корпусом, так что им требуется подавать напряжение питания на 26 ножку сокета. Подобный режим допустим, но включение на чтение или запись одной ячейки вряд ли является нормой. Тока с выхода сдвигового регистра должно хватить для работы, но на время загрузки данных его выходы переходят в Z состояние. И ещё один потребовался для 27C16, которому на время чтения необходимо подать на вход Vpp 5 вольт. Поэтому под управление питания установлен дополнительный транзистор. Можно, конечно, на время чтения выставить напряжение программирования на значения 5 вольт, но переключаться между 25 и 5 вольтами неудобно.

Плата разведена под Arduino Nano. Если есть свободные ноги АЦП, то почему бы не измерять напряжение программирования? На самом деле это особенность многих микроконтроллеров AVR в корпусе для поверхностного монтажа. На нем имеются два дополнительных входа, которые кроме как для АЦП использовать нельзя. С учетом того, что напряжение может быть до 30 вольт (вроде больше всего хотят отечественные РФ5, 25 вольт), рассчитываем делитель из того, что есть в наличии. На китайских Arduino UNO частенько есть входы A6 и A7. 5 вольта для данной задачи вполне достаточна. Точность в 0. Эта функция — защита от дурака, а не вольтметр.

Поэтому на печатной плате есть посадочное место для преобразователя DC-DC Step Up на чипе MT3608, которые за копейки доступны на али. Можно, конечно, было заморочиться и выступать в качестве ШИР (широтно импульсное регулирование) контроллера, но ножек свободных не осталось.

По схеме на этом все.

С ним можно ознакомится в небольшом видео. Алгоритм работы с данными микросхемами очень прост.

При сборке можно спокойно менять номиналы резисторов. Схемы и софт доступны в репозитории на GitHub: https://github.com/walhi/arduino_eprom27_programmer. Правда с делителем потребуется немножко исправить код скетча.

Теги
Показать больше

Похожие статьи

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»
Закрыть