Как сделать программатор из флешки

Обновлено: 04.05.2024

В первой части статьи я предоставил схему, прошивку программатора, софт и кратко описал принцип их работы. На тот момент программатор имел не очень впечатляющий функционал и перечень программируемых устройств, возможно поэтому, не вызвал особого интереса. Но проект ещё развивается и я стараюсь добавлять новый функционал, исправлять ошибки, вносить улучшения. Все изменения вносятся исключительно программным путём и добавлением новых съёмных переходников. В этой части статьи я опишу, поддержку каких новых микросхем я добавил, как с ними работать и как их подключать к программатору. В текущей версии софта добавлена поддержка SPI Flash 25-й серии и микроконтроллеров AVR в режиме высоковольтного программирования.

Начну, пожалуй, с более сложного - AVR. Все, кто работал с этими микроконтроллерами, наверняка знают, что такое Fuse биты, и что бывает, если их запрограммировать неверно - можно получить практически окирпиченную микросхему, которая в лучшем случае перестанет программироваться обычным ISP-программатором. Для исправления данной проблемы (и не только) у микроконтроллеров AVR существует ещё один режим программирования - высоковольтный (HVP - параллельный и последовательный). В одной из статей в сети автор называл HVP - режимом Бога. В этом режиме можно практически всё: читать/стирать любые Fuse биты, читать/писать калибровку RC-генератора, читать/писать/стирать Flash,EEPROM независимо от установленных Fuse битов.

Протокол параллельного программирования у AVR стандартизированн практически для всех моделей AVR8, но есть исключения. Например: основная масса микроконтроллёров имеет восьмибитную шину данных и девять управляющих сигналов. У микроконтроллеров Attiny2313 и подобным в 20-выводном корпусе несколько управляющих сигналов объединены (XA1 и BS2, BS1 и PAGEL). Микроконтроллер Atmega2560 и другие с 256Кб памяти имеют трёхбитную адресацию Flash, в отличие от двухбитной в остальных моделях. Микроконтроллеры Attiny в восьминогих, шестнадцатиногих корпусах вообще программируются по последовательному высоковольтному протоколу. Всё это разнообразие я попытался учесть при разработке ПО и микропрограммы программатора. И, естественно, опробовал на нескольких моделях микроконтроллеров.

Интерфейс ПО претерпел небольшие изменения. Для работы с новыми устройствами были добавлены новые вкладки:

В случае работы с AVR - одноимённая вкладка. Как видите, на этой вкладке есть своё окошко выбора модели AVR, кнопки работы с памятью, окна просмотра данных Flash и EEPROM, отдельные кнопки для загрузки прошивки и EEPROM. При этом все кнопки в правой боковой части окна также активны, и их нежелательно нажимать во время работы с AVR. Возможно, позже перенесу их на первую вкладку, чтобы не мозолили глаза.

Хотя микроконтроллеры AVR работают при напряжении до 5 Вольт, я советую их программировать на 3,3 Вольтах, так как при высоковольтном программировании они могут нагреваться при операциях чтения/записи Flash (у меня грелась Atmega8 и Attiny в восьминогих корпусах). А на пониженном напряжении питания нагрев незначительный, а функциональность не изменяется. Для этого необходимо переставить джампер S1 ("Switch V_Prog") на плате программатора в положение 3v3.

Все микроконтроллеры AVR подключаются к основному 32-пиновому разъёму программатора. Схемы подключения разных видов МК на представленном ниже изображении:

Все сигнальные линии микроконтроллеров можно найти в Datasheet на соответствующую модель в разделе "Memory programming". Как видно из схемы, микроконтроллеры Atmega/Attiny с полным набором сигналов управления подключены к питанию (VCC) напрямую, а остальные - через ключ на pnp транзисторе. Этот ключ используется для предотвращения нагрева МК во время простоя, а также для правильного алгоритма входа в режим программирования. Но, думаю, без него тоже должно работать (я не пробовал). Мои платы переходников для некоторых МК в DIP корпусах в формате SprintLayout будут в папке с программой. Там же будет и данная схема.

Список моделей AVR изначально в программе небольшой. Но его можно увеличивать самостоятельно. Для этого в корневом каталоге с программатором есть папка "Devices". В ней находятся xml файлы с соответствующими названиями. Открываем файл с названием "AVR.xml" с помощью обычного блокнота и видим там список однотипных структур:

< page_size >32</ page_size >

< page_count >128</ page_count >

< ee_size >512</ ee_size >

< ee_psize >4</ ee_psize >

< dev_type >3</ dev_type >

< l_fuse >63</ l_fuse >

< h_fuse >DF</ h_fuse >

< e_fuse >FF</ e_fuse >

< l_bits >FF</ l_bits >

< page_size >128</ page_size >

< page_count >512</ page_count >

< ee_size >4096</ ee_size >

< ee_psize >8</ ee_psize >

< dev_type >0</ dev_type >

< l_fuse >C1</ l_fuse >

< h_fuse >99</ h_fuse >

< e_fuse >FD</ e_fuse >

< l_bits >FF</ l_bits >

Из имеющихся у меня камней я протестировал Atmega8, Atmega16, Atmega32, Attiny2313, Attiny13a, Attiny45. На них же есть схемы переходников. Позже проверю работу с Atmega128a и Atmega2560 (просто на них я не делал переходники, подключу на проводах и отпишусь в комментариях).

Об AVR - всё. Теперь опишу, как работать со SPI Flash 25-й серии. Для данных микросхем памяти также есть соответствующая отдельная вкладка в программе:

Работа со Spi Flash в данной вкладке аналогична таковой во вкладке AVR. Поясню лишь, что означают окошки Sreg1 и Sreg2. У Spi Flash 25-й серии есть два Status-регистра, в которых есть флаги состояний и биты защиты. В некоторых б/у микросхемах, особенно выпаянных из материнских плат, могут быть установлены биты защиты от записи верхних блоков памяти (например для предотвращения порчи bootloader). Такие флешки будут читаться правильно, а при записи или стирании верхние блоки памяти изменяться не будут. Чтобы снять такую защиту необходимо записать нули в регистры Sreg (чаще - в Sreg2). Для этого можно написать по два нуля в соответствующие окошки и нажать кнопку "Write SR". Биты будут сброшены. После этого для корректной работы надо отключить питание от флешки и снова включить. Если флешку планируется вернуть после записи, например, в материнскую плату, то надо будет установить биты защиты обратно. Для этого их надо предварительно прочитать и запомнить (или записать на листик), затем стереть биты защиты, стереть/записать флешку и записать биты защиты обратно кнопкой "Write SR".

Spi Flash подключаются к восьми-контактному разъёму на плате программатора (XS4 на схеме). Схема подключения следующая:

SPI Flash XS4
CS -> CS
DI -> MOSI
DO -> MISO
CLK -> SCK
WP -> VCC
HOLD -> VPP

Положение джамперов на плате программатора не имеет никакого значения, так как на этот разъём напрямую выведены сигналы SPI2 от STM32 и его питание в 3.3 Вольта.

В случае со Spi Flash также возможно добавление новых моделей. Аналогичный AVR xml-файл под названием "25XXX.xml" хранится также в папке "Devices" и имеет сходную структуру:

< name model = "W25Q80" >
< page_size >256</ page_size >
< page_count >4096</ page_count >
< f_size >1048576</ f_size >
< id >EF4014</ id >
</ name >

В данном случае, тег "page_size" это размер страницы памяти Spi Flash в байтах (чаще всего 256 байт), "f_size" - объём памяти всей флешки в байтах, "id" - три байта сигнатуры чипа (первый байт - код производителя, второй - модель, третий - объём памяти), "page_count" - количество страниц памяти (можно получить делением объёма флешки на размер страницы в байтах). Все данные можно найти в datasheet на соответствующую модель чипа. ID - можно прочитать программатором и затем вписать в xml файл, работоспособность от этого не изменится.

В случае со Spi Flash микросхемами скорость чтения/записи не слишком большая. Флешка на 1 Мегабайт (например W25Q80) читается приблизительно 1-1,5 минуты. А если флешка на 8Мегабайт - можете смело пойти попить чаю, это минут на десять. Но запись обычно проходит без сбоев. Проверял, когда записывал звуковые файлы и картинки. Кстати, программатор позволяет записать практически любой файл соответствующего размера в виде "сырых данных". Кроме hex-файлов, они предварительно конвертируются в массив байт.

Кроме AVR и Spi Flash программатор также поддерживает работу с параллельными Flash и EEPROM, I2C EEPROM, восьмибитными SRAM (смотрите первую часть статьи).

Общие советы по использованию программатора:

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

- При длительных операциях чтения/записи нельзя нажимать никакие кнопки, иначе собьётся цикл чтения или записи и программатор ("железная часть") просто зависнет в ожидании правильного USB пакета. Пока что я еще не реализовал "защиту от дурака". Но у меня уже есть идеи по этому поводу.

PS: проект пока ещё развивается. Память STM32 заполнена приблизительно только на 1/5, поэтому я буду стараться добавлять поддержку новых устройств. В ближайших планах добавить поддержку параллельной Flash с 16-битной шиной данных (mx29lv320), FWH (Pm49FL004) микросхемы bios материнских плат, microwire eeprom. И всё, что будет попадать мне в руки.

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

Информация Неисправность Прошивки Схемы Справочники Маркировка Корпуса Сокращения и аббревиатуры Частые вопросы Полезные ссылки

Справочная информация

Этот блок для тех, кто впервые попал на страницы нашего сайта. В форуме рассмотрены различные вопросы возникающие при ремонте бытовой и промышленной аппаратуры. Всю предоставленную информацию можно разбить на несколько пунктов:

  • Диагностика
  • Определение неисправности
  • Выбор метода ремонта
  • Поиск запчастей
  • Устранение дефекта
  • Настройка

Неисправности

Все неисправности по их проявлению можно разделить на два вида - стабильные и периодические. Наиболее часто рассматриваются следующие:

  • не включается
  • не корректно работает какой-то узел (блок)
  • периодически (иногда) что-то происходит

О прошивках

Большинство современной аппаратуры представляет из себя подобие программно-аппаратного комплекса. То есть, основной процессор управляет другими устройствами по программе, которая может находиться как в самом чипе процессора, так и в отдельных микросхемах памяти.

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

Схемы аппаратуры

Начинающие ремонтники часто ищут принципиальные схемы, схемы соединений, пользовательские и сервисные инструкции. Это могут быть как отдельные платы (блоки питания, основные платы, панели), так и полные Service Manual-ы. На сайте они размещены в специально отведенных разделах и доступны к скачиванию гостям, либо после создания аккаунта:

Справочники

На сайте Вы можете скачать справочную литературу по электронным компонентам (справочники, таблицу аналогов, SMD-кодировку элементов, и тд.).

Marking (маркировка) - обозначение на электронных компонентах

Современная элементная база стремится к миниатюрным размерам. Места на корпусе для нанесения маркировки не хватает. Поэтому, производители их маркируют СМД-кодами.

Package (корпус) - вид корпуса электронного компонента

При создании запросов в определении точного названия (партномера) компонента, необходимо указывать не только его маркировку, но и тип корпуса. Наиболее распостранены:

  • DIP (Dual In Package) – корпус с двухрядным расположением контактов для монтажа в отверстия
  • SOT-89 - пластковый корпус для поверхностного монтажа
  • SOT-23 - миниатюрный пластиковый корпус для поверхностного монтажа
  • TO-220 - тип корпуса для монтажа (пайки) в отверстия
  • SOP (SOIC, SO) - миниатюрные корпуса для поверхностного монтажа (SMD)
  • TSOP (Thin Small Outline Package) – тонкий корпус с уменьшенным расстоянием между выводами
  • BGA (Ball Grid Array) - корпус для монтажа выводов на шарики из припоя

Краткие сокращения

При подаче информации, на форуме принято использование сокращений и аббревиатур, например:

Сокращение Краткое описание
LEDLight Emitting Diode - Светодиод (Светоизлучающий диод)
MOSFETMetal Oxide Semiconductor Field Effect Transistor - Полевой транзистор с МОП структурой затвора
EEPROMElectrically Erasable Programmable Read-Only Memory - Электрически стираемая память
eMMCembedded Multimedia Memory Card - Встроенная мультимедийная карта памяти
LCDLiquid Crystal Display - Жидкокристаллический дисплей (экран)
SCLSerial Clock - Шина интерфейса I2C для передачи тактового сигнала
SDASerial Data - Шина интерфейса I2C для обмена данными
ICSPIn-Circuit Serial Programming – Протокол для внутрисхемного последовательного программирования
IIC, I2CInter-Integrated Circuit - Двухпроводный интерфейс обмена данными между микросхемами
PCBPrinted Circuit Board - Печатная плата
PWMPulse Width Modulation - Широтно-импульсная модуляция
SPISerial Peripheral Interface Protocol - Протокол последовательного периферийного интерфейса
USBUniversal Serial Bus - Универсальная последовательная шина
DMADirect Memory Access - Модуль для считывания и записи RAM без задействования процессора
ACAlternating Current - Переменный ток
DCDirect Current - Постоянный ток
FMFrequency Modulation - Частотная модуляция (ЧМ)
AFCAutomatic Frequency Control - Автоматическое управление частотой

Частые вопросы

Как мне дополнить свой вопрос по теме Программатор из USB флешки??

После регистрации аккаунта на сайте Вы сможете опубликовать свой вопрос или отвечать в существующих темах. Участие абсолютно бесплатное.

Кто отвечает в форуме на вопросы ?

Ответ в тему Программатор из USB флешки? как и все другие советы публикуются всем сообществом. Большинство участников это профессиональные мастера по ремонту и специалисты в области электроники.

Как найти нужную информацию по форуму ?

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

По каким еще маркам можно спросить ?

По любым. Наиболее частые ответы по популярным брэндам - LG, Samsung, Philips, Toshiba, Sony, Panasonic, Xiaomi, Sharp, JVC, DEXP, TCL, Hisense, и многие другие в том числе китайские модели.

Какие еще файлы я смогу здесь скачать ?

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

Полезные ссылки

Здесь просто полезные ссылки для мастеров. Ссылки периодически обновляемые, в зависимости от востребованности тем.


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

Микроконтроллеры решил использовать фирмы Atmel — их у нас можно свободно купить на радиорынке по вполне приемлемым ценам. Можно конечно гораздо дешевле и из китая их заказать — но я пока не планирую штамповать устройства в промышленных масштабах)

После непродолжительного "гугления" пришел к выводу — самые простые и популярные программаторы используют порты COM, LPT или USB. Программаторы для COM или LPT порта можно сварганить буквально "на коленке" из рассыпухи. Элементная база совсем простая. Но поскольку я уже примерно год использую в своей работе исключительно ноутбук и на нем нету ни COM порта, ни LPT — решил собирать программатор использующий USB.

Можно конечно было заказать готовый программатор и на ибэе, и на алиэкспрессе и обошелся бы он всего в 5$… Или купить на том же радиорынке такой же но за "немного" другие деньги — порядка 25-35$. — Но это не мой путь! )) По мне — гораздо интереснее все сделать самому, своими руками)

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

Автор статьи предлагает к скачиванию архив, в котором уже находится схема печатной платы, прошивка, драйвера для операционной системы, а также материал необходимый для правильной прошивки управляющего микроконтроллера в нашем программаторе.

После скачивания и распаковки видим кучу файлов, из которых нам нужен один — с расширением .lay Это и есть схема нашей печатной платы. Открыть ее можно в программе SprintLayout. Найти эту программу можно в интернете без труда. Я использовал 6ю версию.

Плату решил изготавливать по методу ЛУТ. Сам рисунок печатной платы распечатал на лазерном принтере на лощеной бумаге из какого то журнала. Есть рекомендации — использовать для этого подложку от самоклеящейся пленки.


На всякий случай распечатал несколько дублей. Как оказалось — не зря)

Далее очищаем заранее подготовленный по размеру кусочек стеклотекстолита.
Кто то использует для этого стирку, кто то очень мелкую наждачную бумагу. Я для этого использовал такое средство.


Далее обезжириваем поверхность и переносим рисунок на будущую плату.


Мне удалось почти отлично перенести рисунок на плату только со второго раза. Первый раз получилось криво) Да и часть дорожек плохо перенеслась) Недогрел, или слишком активно снимал бумагу после переноса. Почему почти — на фото видна одна подкорректированная перманентным маркером дорожка, да и надписи пришлось стереть, т.к. половина букв куда то убежало) Зато сам рисунок получился замечательно.

Травим!) Я использовал раствор хлорного железа. Я так и не понял, что значит 5ти водный, 6ти водный. Продавцы на радиорынке тоже пожимали плечами. Можно также использовать медный купорос — но при его использовании нужно быть предельно аккуратным, химическая реакция начинает протекать при температурах близких к кипению воды, да и легко можно случайно передержать и тогда раствор успеет "съесть" часть дорожек.


Есть также еще куча способов протравить печатную плату.

Развел примерно 250г хлорного железа на 0.5л воды температуры 35-45 градусов. При такой температуре оптимально протекает химическая реакция. У меня травление платы заняло меньше 5 минут.

Вытащил, промыл проточной водой. Высушил.


Видим чистое травление. Все дорожки и площадки целые.

Снимаем оставшийся после травления рисунок с поверхности печатной платы. Я для этого использовал такую штуку и обычную губку для мытья посуды.)


Можно конечно использовать 646й растворитель, но я изготавливал плату в квартире — поэтому резкие запахи очень нежелательны, особенно вечером)


Теперь по технологии, для предотвращения окисления нашу печатную плату необходимо покрыть тонким слоем припоя, т.е. — залудить. Можно конечно и не лудить, я же делал устройство как положено и на века! )) Так же лужение будет способствовать более удобной пайке.

Для лужения я использовал сплав Розе (легкоплавкий сплав). У кого такового не имеется — можно обойтись и дедовским способом — паяльничком и флюсом)

Технология лужения этим сплавом стара как мир. Все видно на фотографиях.

Скажу только для чего нужна лимонная кислота.
Она нужна для лучшей адгезии — ощищает поверхность от оксидной пленки. Таким образом получим более качественное лужение.

На разработку этого устройства меня подтолкнула банальная лень. У меня есть в загашнике небезызвестный универсальный программатор 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 придётся отключить обязательную проверку цифровой подписи драйверов.

Также в программе есть дополнительная вкладка "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, проводов и тому подобное.

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

Читайте также: