Реклама ⓘ
Главная » Микроконтроллеры
Призовой фонд
на апрель 2024 г.
1. 100 руб.
От пользователей

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


Реклама ⓘ

USB программатор параллельных Flash и EEPROM микросхем памяти

Приветствую всех посетителей портала cxem.net. В этой статье хочу представить свою очередную разработку - USB программатор параллельных Flash и EEPROM микросхем памяти.

На разработку этого устройства меня подтолкнула банальная лень. У меня есть в загашнике небезызвестный универсальный программатор Willem, который подключается к LPT- порту компьютера, но каждый раз доставать старый системный блок и подключать его ко всей периферии для прошивки одной-двух микросхем мне очень надоело. Очень хотелось программатор, который можно подключить к USB порту современного ноутбука, быстро прошить что-нибудь и убрать обратно на полку. Покупать заводской программатор USB по баснословной цене ради редкой прошивки пары флешек - это не моя тема. Поэтому я решил изобрести свой "велосипед". Тем более у меня были кое-какие наработки по этой теме (возможно кто-то видел мою статью про USB программатор AVR,SPI_Flash,I2C_EEPROM).

За основу программатора я взял микроконтроллер STM32F107VCT6 в 100-выводном корпусе (просто он у меня был, как-то купил от жадности по дешёвке пару штук на Aliexpress). У данного микроконтроллера достаточное количество портов ввода-вывода, есть хардверный USB-OTG, он 32-битный и работает соответственно с 32 битными переменными, а больше для моего проекта и ничего не надо.

Всю схему можно условно разделить на три части: микроконтроллер, который принимает-отправляет пакеты данных по USB, обрабатывает их и управляет остальной периферией, преобразователи логических уровней, выполненные на микросхемах 74LVC8T245, которые преобразуют логический уровень 3,3 вольта от микроконтроллера в 5 вольтовый или 3,3 вольтовый, и высоковольтная часть, которая преобразует 5 вольт шины USB в 12,5 вольт и 14,5 вольт.

Принципиальная схема цифровой части программатора:

Схема программатора

В "цифровой" части схемы находится сам микроконтроллер U1 со своей обвязкой, пять преобразователей логических уровней U2-U6 (или шинных формирователей, если угодно), два электромагнитных пятивольтовых реле RL1-RL2, которые коммутируются через транзисторы Q1 и Q2, преобразователь напряжения low drop AMS1117 (U7) на 3,3 вольта а также разъёмы для подключения программируемых микросхем. Обратите внимание, что контакт питания разъёма программирования "VCC", а также питание правой половины всех преобразователей логических уровней подключаются через джампер S1 "SWITCH V_PROG" либо к 5 вольтам шины USB (VUSB), либо к 3,3 вольтам внутренней шины питания, это позволяет программировать микросхемы, которые питаются как от 5 вольт, так и от 3,3 вольт. Также дополнительно выведен разъём с I2C и SPI шинами микроконтроллера. Этот разъём используется для программирования SPI_flash (в данной версии пока не реализовано) и I2C_EEPROM (уже реализовано). 

Расскажу подробнее про разъём программирования XS1: его распиновка соответствует разъёму программатора EzoFlash (это аналог Willem для самостоятельной сборки). Я решил так сделать по двум причинам, во первых у меня есть EzoFlash и сохранились адаптеры от него, а во вторых он разведён очень грамотно и соответствует распиновке большинства старых Flash и EEPROM в корпусах DIP,PLCC и др. Разъём XS2 - это дополнительные адресные линии (а их всего 24 А0-А23, что теоретически позволяет программировать микросхемы до 16 Мегабайт). На разъём XS3 выведен старший полубайт шины данных (для программирования 16 битных микросхем памяти - в данной версии софта пока не реализовано, сделал про запас).

Также на разъёмы выведены UART1 и SWD интерфейсы для программирования самого микроконтроллера. Обратите внимание, что линия RX UART1 подтянута к земле через резистор. Это нужно для правильной работы USB, так как в 107 серии STM USB ещё и OTG, то необходимо подтянуть определённую линию к "земле", чтобы выбрать режим работы USB Device. По идее подтяжка не должна мешать работе UART1, который также можно использовать для программирования микроконтроллера, подтянув контакт "BOOT0" к плюсу питания (к сожалению джампер не поместился на основной схеме, но он не обязателен при программировании через SWD интерфейс).

В этой части схемы не удалось уместить конденсаторы фильтров питания, их я нарисовал на второй (высоковольтной) части схемы. Название шин питания на обеих схемах соответствуют.

Высоковольтная часть схемы представляет из себя повышающий преобразователь напряжения на микросхеме mc34063 в практически стандартном включении. Исключение составляет джампер S1 "VOLTAGE", который коммутирует резисторы делителя напряжения и переключает выходное напряжение на 12,5 и 14,5 вольт. Эти напряжения нужны для программирования микросхем EEPROM типа 27CXX, а также стирания и получения ID других EEPROM и Flash микросхем. Высокое напряжение коммутируется через реле на контакты "OE" и "A9" разъёма программирования.

Схема хоть и громоздкая, но довольно простая. Есть возможность её упростить еще больше: в первой версии платы у меня был только один преобразователь логических уровней, установленный на шину данных. Логической единицы в 3,3 вольта вполне достаточно для адресных шин пятивольтовых микросхем памяти, так как порог логической единицы у них обычно находится на уровне 2,5 вольт. Поэтому всё работало и так. К тому же даже во этой версии платы сигналы "CS", "WE", "OE" тоже подведены к разъёму программирования напрямую, так как ради трёх сигналов, мне было просто жалко ставить шестую микросхему преобразователя уровней.

Прошивка микроконтроллера написана в среде SW4STM32. Драйвер USB сгенерирован в MX Cube (Custom HID Device), всё остальное написано на CMSIS. Программа микроконтроллера работает на прерываниях без циклов ожидания (в том числе со стороны софта). Принцип взаимодействия МК и софта - "тебе-мне", то есть пакет запрос от софта - пакет ответ от МК. Так как я использую HID USB, то теоретическая максимальная скорость обмена по USB - 64 Килобайта в секунду. Но по факту, так как пакет данных состоит из служебных и полезный данных, а также обмен идёт в двух направлениях, то фактическая скорость чтения/записи не превышает 2-4 килобайта в секунду. Получается вполне сносно для записи флешек объёмом 2-4 Мегабита. Весь проект я выложу в конце статьи (заранее извиняюсь перед перфекционистами за свой стиль программирования, я самоучка-любитель). При желании, его можно адаптировать под другие камни STM с достаточным количеством портов ввода-вывода.

Для подключения программатора к USB порту компьютера необходимо скачать и установить пакет LibUsbDotNet, установить фильтр на устройство USB. На Win10 и, возможно 8,1 придётся отключить обязательную проверку цифровой подписи драйверов. 

Теперь расскажу о программной части. Софт написан в среде Visual Studio на C#. Поэтому для работы программы необходимо установить пакет .NET Framework (у меня версия 4.7 на Win10). Программа очень простая и интуитивно понятная. 

Для начала работы необходимо подключить программатор к USB разъёму компьютера и нажать кнопку "Connect", если драйвер настроен правильно, то в окошке "Console" появится сообщение "USB Connect Ok". Далее нажимаем кнопку "Test HW" один, иногда два раза, пока не получим сообщение "Программатор подключен". Далее выбираем микросхему памяти, её модель и можно с ней работать: читать кнопкой "READ", стирать кнопкой "ERASE", записывать кнопкой "WRITE", предварительно открыв соответствующий файл для записи. Кнопка "COMPARE" сравнивает открытый файл с содержимым микросхемы памяти, для этого сначала необходимо выполнить команду чтения. "Chip ID" пока работает не со всеми микросхемами памяти. Программа принимает для записи файлы типа INTEL HEX или любые другие. Во втором случае файл будет открыт в виде бинарника. Например можно открыть текстовый файл или или любой другой и записать его в виде сырых данных, при условии, что его размер не превышает объём записываемой микросхемы.

Также в программе есть дополнительная вкладка "TEST HW":

На этой вкладке можно проверить "железо" программатора. Галочками выставляем логическую единицу на соответствующем контакте разъёма программирования и проверяем тестером. Данную функцию я сделал на подобии аналогичной в софте программатора Willem. Очень удобно для проверки не пропаянных контактов. Опять же софт немного сыроват, некоторые функции сделаны под первый вариант платы программатора. Например пока не работает проверка Высоковольтного уровня "OE" и "A9".

Теперь о возможностях программатора на текущий момент. Сейчас поддерживаются микросхемы Flash W29CXXX, AM29FXXX, SST39VFXXX,W49FXXX, EEPROM AT28CXXX, W27CXXX (так как у меня нет 100% рабочей микросхемы, я не смог протестировать алгоритм стирания, запись на стёртых ячейках работает. Также должны работать УФ-стираемые EEPROM), I2C EEPROM (На соответствующем разъёме). Также бонусом добавил работу с восьмибитными SRAM (для проверки ячеек памяти, поддерживается чтение, запись, стирание).

Так как алгоритмы записи параллельных флешек 29,39 и некоторых 49 серий совпадают, то должны работать и другие модели (функции записи, чтения и стирания). Есть небольшое исключение: W29CXXX пишутся постранично, остальные побайтно, поэтому при попытке записи других моделей флеш можно выбрать AM29FXXX. Также есть возможность редактировать XML файлы микросхем в папке программатора и добавлять модели другой ёмкости к уже существующим. При появлении у меня новых моделей микросхем памяти, буду стараться добавлять их поддержку.

В конце статьи я также прилагаю свой вариант платы программатора и несколько адаптеров для микросхем памяти. Мой вариант платы разводился под имеющиеся у меня компоненты, поэтому выкладываю его для примера. Номиналы всех деталей подписаны в их свойствах.

Немного фотографий готового устройства. Возможно, кому-та платка покажется знакомой по другой моей статье.

В итоге у меня получилось вполне работоспособное и полезное устройство. Пока что поддерживается не очень большое количество микросхем памяти. Но я постараюсь добавлять по мере возможности новые. 

PS: Хотя, сейчас в целом не очень часто используются параллельные микросхемы памяти, в радиолюбительских конструкциях они ещё встречаются. Мне, например, очень пригодился данный программатор, когда я делал флеш-картриджи для восьмибитной приставки (Dendy). Очень удобно и быстро: нарезал ROM, воткнул программатор в ноутбук, минута - и готово! Никаких больших компьютеров с LPT, проводов и тому подобное.

Вот вкратце и всё, о чём хотел рассказать. Спасибо за внимание. Если будут вопросы, постараюсь ответить в комментариях.

Список радиоэлементов

Обозначение Тип Номинал Количество ПримечаниеМагазинМой блокнот
Основная схема
U1 МК STM32
STM32F107VC
1 Поиск в магазине ОтронВ блокнот
U7 Линейный регулятор
AMS1117-3.3
1 Поиск в магазине ОтронВ блокнот
U2-U6 Микросхема74LVC8T2455 Поиск в магазине ОтронВ блокнот
Cr1 Кварцевый резонатор8 MHz1 Поиск в магазине ОтронВ блокнот
D1, D2 Выпрямительный диод
1N4148
2 Поиск в магазине ОтронВ блокнот
Q1, Q2 MOSFET-транзистор
2N7002
2 Поиск в магазине ОтронВ блокнот
Rl1, Rl2 Реле5Вольт2 Поиск в магазине ОтронВ блокнот
R2-R4, R8, R10 Резистор
10 кОм
5 Поиск в магазине ОтронВ блокнот
R5, R6 Резистор
4.7 кОм
2 Поиск в магазине ОтронВ блокнот
R1 Резистор
2.7 кОм
1 Поиск в магазине ОтронВ блокнот
R7, R9 Резистор
1 кОм
2 Поиск в магазине ОтронВ блокнот
C1 Конденсатор0.1 мкФ1 Поиск в магазине ОтронВ блокнот
C2, C3 Конденсатор12p2 Поиск в магазине ОтронВ блокнот
Схема преобразователя напряжения
U1 DC/DC импульсный конвертер
MC34063A
1 Поиск в магазине ОтронВ блокнот
R1 Резистор0.22R1 Поиск в магазине ОтронВ блокнот
R2 Резистор180R1 Поиск в магазине ОтронВ блокнот
R3 Резистор
1 кОм
1 Поиск в магазине ОтронВ блокнот
R4 Резистор470R1 Поиск в магазине ОтронВ блокнот
R5 Резистор270R1 Поиск в магазине ОтронВ блокнот
R6 Резистор
12.81 кОм
1 Поиск в магазине ОтронВ блокнот
L1 Катушка индуктивности170uH1 Поиск в магазине ОтронВ блокнот
D1 Диод Шоттки
1N5819
1 Поиск в магазине ОтронВ блокнот
C1, C8, C13 Конденсатор10uFx10V3 Поиск в магазине ОтронВ блокнот
C2 Конденсатор510p1 Поиск в магазине ОтронВ блокнот
C3 Конденсатор100uFx25V1 Поиск в магазине ОтронВ блокнот
C4-C7, C9-C12 Конденсатор0.1 мкФ8 Поиск в магазине ОтронВ блокнот
Добавить все

Скачать список элементов (PDF)

Прикрепленные файлы:

Теги:

Опубликована: 0 4
Я собрал 0 1
x

Оценить статью

  • Техническая грамотность
  • Актуальность материала
  • Изложение материала
  • Полезность устройства
  • Повторяемость устройства
  • Орфография
0

Средний балл статьи: 4.8 Проголосовало: 1 чел.

Комментарии (34) | Я собрал (0) | Подписаться

0
Публикатор #
На форуме автоматически создана тема для обсуждения статьи.
Ответить
+1
vitaliywhite #
Действительно, лень-двигатель прогресса. Работа проделана колоссальная. Сам когда-та давно собирал Willem с LPT. Работает до сих пор, просто в системнике стоит две винды.
Ответить
0
Сергей #
Тут скорее нужда, а не лень.
Вот мне лень, я лучше программатор за счёт конторы куплю,
Ответить
+1

[Автор]
AndrejChoo #
Сейчас ещё активно работаю по добавлению функции высоковольтного (параллельного) программирования avr микроконтроллёров. Благо, что железо переделывать не надо. Только доработка по и прошивки. Если будет интересно, дополню статью позже.
Ответить
0
Евгений #
"...дополню статью позже.".
Учитывая , что сейчас все меньше народа занимается подобными разработками, было бы очень неплохо.
Отдельное спасибо за предоставленный интересный материал.
Ответить
0
Evghenii #
Привет. Супер вариант. Спасибо за работу. Исходнмк на програмку для компа можешь до архива долить?
Ответить
0

[Автор]
AndrejChoo #
Код очень монструозный. Так как я не программист. Мне за него просто стыдно
Ответить
0
Alexander #
Возьмусь облагородить и переписать на Qt framework для пущей кроссплатформенности.
Конфиденциальность оригинала гарантирую, хотя чего стыдного может быть в таком мегапроекте?
Ответить
0
Albert Ziatdinov #
Единственным источником питания служит USB порт компьютера?
И на нем DC/DC конвертор и 2 реле? Там по токам то всё хорошо? Это не критика, просто удостовериться... Я бы лучше от внешнего БП запитал. А так уважуха за работу.
Ответить
0

[Автор]
AndrejChoo #
Я же написал, что у меня проблем на обычном ноутбуке не возникало. В этом же и фишка, чтобы питать чисто по usb и никаких лишних проводов. Не думаю, что потребление превысит 2000mA. Главное, чтобы кабель usb был хороший толстый, а реле - малюсенькие. В идеале есть smd варианты релюшек. Там ток совсем мизерный. Я пробовал шить 27сХХ еепромы, там при стирании одновременно включается два реле и всё хорошо, usb устройство не отваливается. Так что, проблем быть не должно.
Кстати, я пробовал коммутировать три разных уровня на один контакт транзисторным ключами, к сожалению не пошло дело, были ошибки чтения и ключи сильно грелись. Да и падение напряжения тоже было на выходе.
Ответить
0
GHBYW #
Можно прочитать этим прогером Nand K9GAG08U0E? Если , да то как подключать ?
Ответить
0
AndrejChoo #
Нет. Нанды он не поддерживает.
Ответить
0
Евгений #
AT29C010A сможет работать с этим EPROM Flash ? Вообще серию AT29 поддерживает? И если у меня нету 107 камня я смогу перенести на 407 100ногий внешний параллельный интерфейс есть.
Ответить
0
AndrejChoo #
Если переписать прошивку, то 407 камень работать будет. В плане параллельного интерфейса, то fsmc здесь не используется, тут простой ногодрыг, скорости которого вполне достаточно, ввиду низкой скорости hid usb. AT29C должен работать. Он шьётся побайтно, как другие 29е, кроме winbond. Там постраничная запись. Могу выложить исходники. Но там полный треш. Хотите, разбирайтесь.
Ответить
0
Vector_03 #
Собрал программатор по вашей схеме для прошивки Pm39LV512 (аналог SST39VF512). Читает, стирает, ID правильный (ID 9D1B00) но пишет - не то, первая ошибка уже на третьем байте. Пытался найти протокол записи на SST39 для поиска отличий, пока - безуспешно. Можите добавить поддержку данного чипа? Буду весьма признателен. :)
Ответить
0
Vector_03 #
Нашел в чём проблема! Был не пропай сигнала A12. Сейчас всё ок. (правда прога иногда при попытке сохранить дамп, или сравнить с дампом выпадает с ошибкой)
На фото - немного переразведенная версия, и с диаметром отверстий ошибся, и перемычек - многовато, и VPP пока не делал (не требуется).
В общем - как-то так.
Спасибо автору!
Ответить
0
Vector_03 #
ТОП
Ответить
0

[Автор]
AndrejChoo #
Решил полностью переработать программную часть (и прошивку и софт). Перевёл программатор на протокол USB CDC (bulk конечные точки). Теперь скорость чтения параллельной флеш памяти порядка мегабайт за 3-4 секунды, запись мегабайт - 1-2 минуты (в зависимости от типа флешки). Пока что реализовал только несколько функций (чтение, запись, стирание параллельных флеш). Если будет интересно тем, кто уже собрал мой программатор, накидаю продолжение статьи, когда закончу софт.
Ответить
0
Игорь #
Здравствуйте. Есть у меня в загашнике STM32F107VCT6. По ногам вроде то же самое. Да и памяти вроде как столько же.. Вообще данная прошивка встанет на нем?
Ответить
0

[Автор]
AndrejChoo #
Так это он и есть. Смотрите схему.
Ответить
0
Игорь #
Не оттуда скопировал:) stm32f103vet6 у меня
Ответить
0

[Автор]
AndrejChoo #
Скорее всего не заработает USB. Но можно перекомпилировать проект без особых усилий. Остальная основная периферия там практически идентичная (GPIO, SPI, I2C, TIMER). Надумаете собрать, пишите. Сделаю Вам прошивку.
Ответить
0
Игорь #
Таки собрался я собрать данный дЭвайс:) заказал всю рассыпуху. Если вас не затруднит будьте добры скомпилировать прошивку.
Ответить
0

[Автор]
AndrejChoo #
Без проблем.
Ответить
0

[Автор]
AndrejChoo #
Скачайте последнюю версию софта на форуме (ссылка в первом комментарии). Как соберёте, напишите о результатах. Если что, помогу советом в наладке.
Прикрепленный файл: Parallel_Prog_F103.rar
Ответить
0
Sirop4ik #
Таки собрал я данный девайс. При коннекте к компу неопознанное устройство. Если отпаять резистор от шины юсб подтягивающий, то ничего вообще не происходит. Кабель менял и проверял.
Ответить
0

[Автор]
AndrejChoo #
Кварц на сколько стоит?
Пишите в личку.
Отредактирован 30.03.2023 11:17
Ответить
0
LSA #
Под stm32f407vgt6 нет ли случайно прошивки?
Ответить
0

[Автор]
AndrejChoo #
Нет, но можно сделать.
Ответить
0
LSA #
Если не сложно сделать, то буду благодарен (исходников как я понимаю нет?) . О вопросе потребления - про использование бистабильного реле не было мыслей?
Ответить
0

[Автор]
AndrejChoo #
Скомпилю на досуге. Это чуть сложнее, чем на 103й, регистры периферии отличаются.
По поводу реле, были мысли на транзисторных ключах сделать, но меня и так всё вполне устраивает. USB не отваливается при срабатывании реле.
Ответить
0

[Автор]
AndrejChoo #
Я переписал прошивку под 407-й. Работу не проверял. Кварц stm-ки на 8 MHz. Программу скачайте на форуме (первая ссылка в комментариях), та, что прикреплена к статье, работать не будет. Пробуйте.
Отредактирован 25.03.2023 09:44
Прикрепленный файл: ParallelProg.bin
Прикрепленный файл: ParallelProg.hex
Ответить
0
Павел #
Собрал наконец то программатор. На форуме архивы с программами прошивок и программой управления скачиваются с ошибкой, либо это не архивы RAR. можете на почту прислать или приложить здесь файлы.
Ответить
0

[Автор]
AndrejChoo #
Посмотрите на гитхабе, там последняя версия должна быть: https://github.com/AndrejChoo/USB-Programmer-parallel-flash-and-eeprom
Ответить
Добавить комментарий
Имя:
E-mail:
не публикуется
Текст:
Защита от спама:
В чем измеряется сила тока?
Файлы:
 
Для выбора нескольких файлов использйте CTRL

Pickit 2 - USB-программатор PIC-микроконтроллеров
Pickit 2 - USB-программатор PIC-микроконтроллеров
Конструктор: DDS генератор сигналов Квадрокоптер Syma X11
вверх