惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

S
Schneier on Security
F
Fortinet All Blogs
B
Blog
GbyAI
GbyAI
P
Proofpoint News Feed
量子位
The Register - Security
The Register - Security
宝玉的分享
宝玉的分享
大猫的无限游戏
大猫的无限游戏
云风的 BLOG
云风的 BLOG
V
Visual Studio Blog
B
Blog RSS Feed
WordPress大学
WordPress大学
Recorded Future
Recorded Future
Recent Announcements
Recent Announcements
V
Vulnerabilities – Threatpost
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
S
Secure Thoughts
雷峰网
雷峰网
Stack Overflow Blog
Stack Overflow Blog
C
Cybersecurity and Infrastructure Security Agency CISA
Webroot Blog
Webroot Blog
AWS News Blog
AWS News Blog
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
The GitHub Blog
The GitHub Blog
爱范儿
爱范儿
O
OpenAI News
月光博客
月光博客
H
Hacker News: Front Page
S
Security Affairs
W
WeLiveSecurity
The Hacker News
The Hacker News
aimingoo的专栏
aimingoo的专栏
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Help Net Security
Help Net Security
MongoDB | Blog
MongoDB | Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
D
Docker
T
The Blog of Author Tim Ferriss
Spread Privacy
Spread Privacy
Blog — PlanetScale
Blog — PlanetScale
J
Java Code Geeks
S
Securelist
Microsoft Azure Blog
Microsoft Azure Blog
TaoSecurity Blog
TaoSecurity Blog
T
Threat Research - Cisco Blogs
M
MIT News - Artificial intelligence
A
About on SuperTechFans

Все публикации подряд на Хабре

Ловим музу за клавиатуру: как айтишнику стать автором Что умеет Midjourney в 2026? Мой немного грустный разбор этого шикарного инструмента Никто не любит писать тесты, но ИИ может исправить это IPv8 выглядит как мечта. Поэтому почти наверняка не взлетит Производители вернули в продажу материнки с DDR3. Что происходит? Управление агентом с телефона через Telegram теперь в KodaCode От координации к лидерству: как меняется роль руководителя разработки Я сделала родителям бизнес вместо пенсии: зарабатываем 70 тысяч, мама не даёт продать В три раза быстрее приемка товара и оптимизация трудозатрат на 73%: как «РСТ-Инвент» помог Gulliver Group ИИ-шечный мир победил? О влиянии искусственного интеллекта на игропром Кремль снижает давление на Телеграмм пока Европа строит интернет по паспорту Как CEO, CTO и CIO за 8 часов собрали ИИ-директора, который умеет держать позицию под давлением Как (не) потерять домен за выходные Вместо 8 разных VPS: как я организовал практику студентам на одном сервере Почему твой Open Source проект не замечают? R&D: искусство управления неопределенностью в разработке AI-дефляция: вакансий для разработчиков больше, а рост зарплат — худший за 15 лет Мы отдали управление роботами OpenClaw. Что из этого вышло Галактический ID: система идентификации для всех форм разумной жизни Шесть основ бизнес-анализа: начинаем с вопроса «Кто в игре?» Код-ревью, в котором дело не в коде Данные переехали. Команда — нет Системной подход к сдаче OSWE в 2025 Почему комната управления реактором покрашена в цвет морской пены 4 YAML-файла вместо PySpark: как аналитикам строить пайплайны без разработчиков LLM-агент для поиска свободных доменов: автоматизируем подбор Когда, зачем и как правильно начинать новую сессию в Claude Code? Как я заставил нейросеть писать макросы для FreeCAD Анатомия ИИ‑агента для подбора персонала. От тысячи резюме к топ‑10 за минуты Опыт разработчика как экономика внимания Автономность как точка невозврата: кто будет субъектом в цифровом будущем Обучение ИИ в «диких» условиях: как рутинные действия превращаются в датасеты Как измерить LLM для задач кибербеза: обзор открытых бенчмарков Где хранить код? Сравнение GitHub, GitLab и Bitbucket Математика объясняет, почему нормальное распределение встречается повсюду Почему ваш FinOps не работает: 12 тезисов от практиков Как подписать проектную документацию УКЭП с использованием бесплатных лицензий Pilot Адаптивное администрирование Sigla Vision Я грузил уран в бочки, а потом 20 лет строил ИТ в атомной отрасли Чем позвонить с Эвереста? История и обзор спутниковой связи. Часть 2 Как языковая модель помогает контролировать качество инструктажей по охране труда в металлургии Как не передать на desktop свой IP в РКН Анатомия SAP Privileges: как устроено управление правами в macOS MoneyDev: Сказка про три главных слова Обновлённый токенизатор видео K-VAE 2.0 от Сбера Как сделать диспетчеризацию дома на 1284 квартиры почти бесплатно Как мы разогнали железную дорогу Мы дали агентам рутину. Теперь надо решить — что делать с освободившимся временем Токсичный контент, промпт-хакинг и защита ИИ — всё о Guardrails для LLM Умный город начинается с точного взгляда: как «Фалькон Тех» меняет пространство к лучшему Навайбкодил приложение для анализа графов Почему Дюну так интересно читать? Упрощаем работу с рутиной или как стать Гендальфом Белым Деконструкция Go: CPU, RAM и что там происходит. Go Assembler база. Часть 1.1 Какие профессии исчезнут из-за ИИ, а какие появятся? И что с этим делать Как мы построили IT-отдел, где хочется расти: архитектурные встречи, прозрачные метрики и книжные подарки Rufler: Делаем из Claude Code автономный рой через один YAML-конфиг Sing-box и белый список приложений Как построить надёжный обмен сообщениями в микросервисах: лучшие практики для enterprise OpenAI строит MLM-пирамиду, а McKinsey и Accenture помогают ей в этом Дом, который не построил Фишер (Часть 2) «Сверхзвуковой математик» против «Вдумчивого логиста»: битва алгоритмов 3D-упаковки Мультимодальные модели – грубый и дорогой инструмент Разговоры ничего не стоят. Код тоже Проверки физических лиц: с кого начнет ФНС Топ-10 бесплатных нейросетей для создания видео в 2026 году Первые слои кода: как наши решения сегодня определяют архитектуру ИИ на десятилетия Разработка нового статического анализатора: PVS-Studio JavaScript Поиск уязвимостей ПО: базовый минимум или роскошный максимум Почему оценка персонала не работает как инструмент управления Как мы разработали ИИ-ассистента и сократили рутину продуктовой команды на 50% Как я ушел из найма, нажарил косточек и продал на маркетплейсах на 168 млн в год Когда 1С:ERP уже внедрена, а нормального производственного плана всё ещё нет Как я сделал Claude мультимодальным, подключив к нему Qwen Omni Как приглашение на вакансию мечты превращается в атаку Infrastructure as Code: философия и лучшие практики IaC Тестируем Yandex Code Assistant на задаче, в которой нужно хранить секреты nxs-universal-chart v3.0: новое поколение универсального Helm-чарта Callback Injection: Техника, которая отправила Microsoft Defender в глухой нокаут «Все идеи на стол»: митап как способ вывести проект из тупика Сегодня я узнал нечто новое о GPU благодаря багу в своей игре Как заставить LLM ̶ ̶г̶а̶л̶л̶ю̶ ̶ эволюционировать Карта событий как фундамент аналитики: практический кейс для E-commerce Что выбрать для AI: x86, ARM или RISC-V? Дайджест железа за март Роль соматических мутаций в развитии аутоиммунных заболеваний: путь к избирательной терапии Mythos от Anthropic — тревожный сигнал для всех, а не только для банков Guardrails для LLM на Java: как приручить промпт‑инъекции и токсичные ответы Green-VLA: как мы собрали VLA-модель для реального антропоморфного робота и не потеряли обобщение Финансовая гонка вооружений: почему умные люди добровольно в ней участвуют Эра ИИ-агентов наступила: выбираем лучшего цифрового сотрудника # Практический опыт внедрения WinCC Redundancy на производственном предприятии Сделал MVP за 3 дня, а потом неделю прикручивал оплату. Оно того стоило? Физика против Маска: почему Starship V3 может оказаться ещё одной катастрофой Нефть Венесуэлы: крупнейшие запасы в мире, но не крупнейшая нефтяная держава JPA 4. Переосмысление Hibernate Почему зеркальная фотокамера Nikon D5 десятилетней давности идеально подошла для миссии «Артемида-2» Проект «Уровень-Спутник» или как мы сделали платформу для гидрологов «Замедлиться, чтобы ускориться»: почему ИИ повышает цену ошибок в требованиях и архитектуре Как с нуля поднять трафик IT-компании на 1657% при бюджете 55 тыс. и выжить Pixel-perfect Downsampling — идеальная отрисовка 50 миллионов точек без потерь
Программирование микросхем GAL и им подобных
Viktand · 2026-05-26 · via Все публикации подряд на Хабре

10 мин

17K

Это будет рассказ о технологиях предков.

Статья скорее всего не будет иметь большой практической пользы для большинства читателей. Я начал ее писать только потому, что этой информации просто нет в Интернете. Я в этом уверен совершенно, потому что когда потребовалось сделать программатор, я потратил пару недель на поиски, но в итоге разобрался сам.  Просто хотел оставить след в Интернете. Но тут еще в комментариях к моей другой статье оказалось, что эта тема не совсем тухлая и небольшой интерес есть. В годы популярности GAL программаторы проходили сертификацию у производителя микросхем. Вероятно чтобы конечный пользователь не разочаровался в новой технологии. Примерно так объясняется закрытость этой информации.

Итак, микросхемы GAL. Здесь, на Хабре, уже были статьи про них. например эта. Хорошая статья, но как и все подобные, вопрос программирования микросхемы ограничен фразой “потребуется специальный программатор “. Эта статья именно про программирование. Но сначала все-таки немного про сами микросхемы.

Наверно лет 25 - 30 назад, когда GALы были популярны, покупка специального программатора имела смысл. Купить его можно и сейчас, на всяких маркетах достаточно предложений. Однако сами микросхемы продаются от 400 рублей за десяток, а программатор стоит от тысячи за конструктор до нескольких тысяч за готовый. Покупать такой, чтобы прошить одну-две микросхемы и забыть - совершенно нецелесообразно. Поэтому было принято решение сделать свой. Вот тут и оказалось, что это не так просто.  Официальные даташиты на микросхемы не содержат описаний процесса прошивки. Я нашел только одну достойную статью про это. Но информации в ней недостаточно для самостоятельной сборки программатора. Есть еще два проекта самодельных программаторов. Один на Ардуино и второй более древний GALBlast, который просто подключается и управляется через LPT-порт. Там целое семейство вариантов. Нет смысла глубоко изучать.

Ардуиновский совершенно явно написан по мотивам GALBlast. Код во всем его повторяет. Собственно изучение этого кода и позволило мне разобраться в этом вопросе.

Дальше все будет описано в отношении GAL16V8B. Другие GALки отличаются количеством ног и немного другой разводкой сигналов программирования по ним, но суть прожига одинаковая. Кроме того, есть еще древние одноразовые PAL и современные ATF. Функционально они не полностью аналогичные, но для программатора это не имеет значение.

Структурно для программатора микросхема GAL представляет собой матрицу фьюзов (плавких перемычек).  В GAL16V8 это матрица 64 строки на 64 бита (фьюза). Кроме строки 60, где длина 82 бита.

Пара слов про сами фьюзы. Название сложилось исторически от самых первых логических матриц (PAL), в которых это были реальные металлические перемычки, пережигаемые (расплавляемые) высоким напряжением. Точно как предохранитель в радиоаппаратуре. По сути это просто разрывало связь между “ножками” логических элементов внутри микросхемы так что в итоге оставалось только те, что требуются для реализации задуманной логики.

PAL были одноразовыми, поэтому им на смену пришли GAL, в которых ничего не плавилось. Фьюзы стали многоразовыми, но терминология уже закрепилась. Ресурс фьюзов в GAL невелик - гарантируется только 100 циклов восстановления. Сейчас им на смену пришли ATF. У них количество циклов может сильно отличаться в бОльшую сторону, но для ATF16V8 это те же 100 циклов.

У каждого фьюза есть свой номер или линейный адрес, если все фьюзы расположить в одну линию. Для GAL16V8 это диапазон от 0 до 2194.

Не все строки реально присутствуют в “адресном пространстве”. Часть строк зарезервирована, т.е. физически не существует. А те, что есть, распределены следующим образом:

32 - UES - строка для произвольной информации от пользователя.
58 - PES - строка с информацией о микросхеме.
54 - CLEARALL - стирание, т.е. восстановление фьюзов
60 - CFG - строка конфигурации, здесь описываются вспомогательные 
соединения между выводами матрицы.
61 - SECURITY - бит защиты информации от обратного прочтения.
63 - CLEAR  - тоже стирание.

Матрица логических элементов представляет собой поле элементов И. Каждый элемент И в матрице имеет 32 входа. Вообще входных линий для элемента 16, но каждая имеет вариант входа через инвертор. Выход каждого элемента подключен к одному из входов большого макроэлемента, в котором есть прежде всего 8ИЛИ на входе и еще всякое по мелочи:

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

Всего таких макроэлементов 8 штук по числу пинов, которые могут быть выходами.

Таким образом, получается, что микросхема может реализовать произвольную функцию И от сигналов на входных пинах, а потом сделать функцию ИЛИ с результатом работы матрицы И. Сигнал с выхода макроячейки не только идет к выходу из корпуса, но также возвращается обратно в матрицу для использования в более сложных логических функциях.

Можно упрощенно сказать, что в исходном состоянии (до прошивки) каждый элемент в матрице соединен со всеми входами и выходами прямо и через инверторы, а потом со всеми выходами через ИЛИ. Прошивка обрывает ненужные соединения и в итоге матрица и выходные макроячейки вместе приобретают вид необходимой логической схемы. Кроме того, часть фьюзов в строке 60 может включать или выключать D-триггер или инвертор (XOR), которые видно на картинке и некоторые другие соединения.

Но вообще, эта теория не особо важна, потому что это знание никак не помогает создавать прошивку. Просто для информации.

В чем разница строк 63 и 54, я так и не понял. Обе стирают все.

Для строк 64, 61 и 63 данные не требуются. Важен сам факт записи в эти строки.

Теперь о главном. Как программируется микросхема. Здесь описан полный алгоритм для сертифицированного программатора. На практике для личного применения можно многое пропустить.

Сама прошивка создается в специализированных программах, которые “знают” описанную выше структуру GAL (ATF) и умеют применять это знание к разным видам микросхем. Проще всего использовать web-редактор прошивки - нормально работает и не требует установки. Есть еще десктопные, например, WinCUPL, но мне они как-то не понравились.

Вот пример реальной прошивки GAL16V8 для galasm-web  из моего самодельного XT:

GAL16V8
UMB_DECODER

NC A19 A18 A17 A16 A15 A14 A13 RW GND
NC NC NC NC NC NC VE WP NC VCC

WP = A19 & A18 & /A17 & /A16 & /A15 & RW 
     # A19 & A18 & /A17 & /A16 & A15 & /A14 & /A13 & RW
     # A19 & A18 & A17 & A16 & RW;                
VE = A19 & /A18 & A17;

DESCRIPTION
Write protect for ROM areas only (C0000-CBFFF and F0000-FFFFF)
UMB area CC000-EFFFF is unprotected (WP=0)
VE = 1 if video VGA select

Сначала идет понятный заголовок, потом описание ножек микросхемы с 1 по 10 и с 11 по 20, потом сама логика. Синтаксис тут достаточно очевидный, как мне кажется. Символ # - это функция ИЛИ. Символ / - функция НЕ. Обратите внимание на “;” после строк с логикой. В других строках этого нет.

Потом еще необязательный блок описания.

Этот исходник компилируется в такую прошивку:

GAL-Assembler:  GALasm 2.1
Device:         GAL16V8

*F0
*G0
*QF2194
*L0256 01110111101110111011111111110111
*L0288 01110111101110110111101110110111
*L0320 01110111011101111111111111110111
*L0512 01111011011111111111111111111111
*L2048 01100000
*L2056 0101010101001101010000100101111101000100010001010100001101001111
*L2120 00000000
*L2128 1111111111111111111111111111111111111111111111111111111111111111
*L2192 1
*L2193 0
*C1c00
*
5c61

Это текстовый файл, но имеет расширение jedec. Он передается программатору для прошивки.

Как программатор должен понимать этот файл:

  1. Прочитать модель микросхемы (Device) и соответственно перекоммутировать панельку микросхемы по выбранный корпус. Для самоделки под одну микросхему это не важно. Там уже все скоммутировано.

  2. *F0 (или *F1) - состояние фьюзов по умолчанию. Т.е. прожигать (0) или нет (1) те фьюзы, про которые не будет указания дальше.

  3. *G0 - не активировать защиту от обратного чтения после прошивки, или активировать, если *G1.

  4. *QF2194 - всего в микросхеме 2194 фьюза. Для самоделки не имеет значения.

  5. *L - сама прошивка.

  6. 5c61 - контрольная сумма прошивки. Для самоделки не имеет значения.

Теперь сам процесс. Если у вас самоделка для личного использования под один тип микросхем, то можно сразу переходить к пункту 6.

  1. Перевести микросхему в режим чтения прошивки. Для этого подать на вход EDIT (2) напряжение VPP 12 Вольт.

  2. Сделать такую конфигурацию сигналов:

    • Вход режима переключить на чтение: ножка P/V(19) - 0.

    • Вход стробирования прожига /STB (11) установить в 1.

    • Вход тактирования (стробирования) данных SCLK (8) установить в 0;

  3. На входах RA0 - RA5 (18, 3 - 7) установить двоичный адрес строки PES (58).

  4. Подать короткий импульс 0 на вход STB, около 10 мс. Выбранная строка загрузится во внутренний буфер, на выходе данных SDOUT (12) появится первый бит строки 58 (самый левый). Этот бит надо прочитать и далее короткими импульсами SCLK (лог 1 около 2 мкс, но точность тут не важна) проталкивать строку на выход и забирать биты. Повторять 64 раза.

  5. Разобрать строку PES. В ней зашифрован алгоритм прошивки, т.е. величина VPP для прожига и длительность прожигающего импульса /STB, количество предыдущих прожигов. Для некоторых моделей GAL могут быть указаны дополнительные параметры прошивки. Настроить программатор по этим данным. Формат данных в строке может отличаться у разных моделей. Можно посмотреть все там же.

  6. Перевести микросхему в режим записи:

    • VPP = 14.5 В (для ATF 12 В),

    • Вход режима переключить на запись: ножка P/V(19) - 1

    • Вход тактирования (стробирования) данных SCLK (8) установить в 0;

  7. Стереть микросхему: Установить адрес 63, P/V = 1, подать импульс прожига: /STB = 0 длительностью из настроек PES или просто на 40 мс, если у вас самоделка.

  8. Записать матрицу. Т.е. последовательно выставлять адреса от 0 до 31 и через вход SDIN (9) загрузить буфер данных битами соответствующей строки, стробируя биты импульсами SCLK. После чего прожечь строку импульсом на /STB = 0.

  9. Записать cтроку UES - *L2056, если есть в прошивке.

  10. Записать строку CFG - здесь 82 бита в отличии от предыдущих, где 64.

  11. Записать обратно строку PES, но счетчик циклов записи в ней увеличить на 1.

  12. Если в прошивке был указан бит защиты, то записать строку 61.

  13. Снять VPP.

  14. Там есть еще вычисление контрольной суммы по ходу прошивки. Должно сойтись.

  15. Для чтения любой строки из микросхемы достаточно повторить пункты 1,2,3,4 выставляя нужный адрес.

На практике для личных проектов можно не читать и не писать PES. VPP для GAL16V8B и аналогичных равно 14.5 Вольт как для записи, так и для чтения, а прожигающий импульс 40 мс. Для микросхем ATF VPP = 12 В. Заниматься битом защиты и контрольной суммой тоже нет смысла. Строка UES тоже не имеет значения.

Теперь самое важное. Прошивка фьюзов передается в файле формата jedec. Принципиальное значение для прошивки имеют только строки *L. Это строки формата “*LAAAA bbbbbb…”:

*L2048 00100000
*L2056 0101010101001101010000100101111101000100010001010100001101001111
*L2120 00000000

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

Пример реальной строки: “*L0256 01110111101110111011111111110111”. Здесь первый фьюз имеет адрес 256, состояние 0, второй 257-1 и т.д.

Первые 32 строки основной матрицы самые хитрые. Эту часть матрицы можно представить в виде таблицы 32 строки на 64 столбца. Фьюзы по порядку номеров расположены не в строках, а в столбцах - именно этот факт стал основным поводом для статьи. Этой информации я просто нигде не встретил. Дошел до нее сам. Чтобы было понятнее, если посмотреть на верхний левый угол этой матрицы, то там будет такое расположение фьюзов:

Соответственно при парсинге файла jedec нужно сначала залить всю матрицу состояниями фьюзов по умолчанию (*F0), а потом брать фьюзы по их номеру из строк *L и располагать их состояние в нужной ячейке этой таблицы, получая в конечном итоге строки для заливки в микросхему.

Строка 32, если есть желание, прошивается по порядку начиная от фьюза 2048 и далее вправо (единственная нормальная из всех).

Фьюзы строки 60 имеют следующий порядок слева направо:

2193,
2120,2121,2122,2123,
2128,2129,2130,2131,2132,2133,2134,2135,2136,2137,2138,2139,2140,2141,2142,2143,2144,2145,2146,2147,2148,2149,2150,2151,2152,2153,2154,2155,2156,2157,2158,2159,2160,2161,2162,2163,2164,2165,2166,2167,2168,2169,2170,2171,2172,2173,2174,2175,2176,2177,2178,2179,2180,2181,2182,2183,2184,2185,2186,2187,2188,2189,2190,2191,
2124,2125,2126,2127,
2192,
2052,2053,2054,2055

Вот так бессистемно. В других GAL, не GAL16V8B, строка 60 будет иметь другую структуру и длину. Здесь есть подробности.

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

Директива “*G0” или “*G1” выключает или включает защиту от чтения. Если включить, то все строки будут читаться как сплошные единицы. Думаю, что опция не актуальна, если вы не планируете какой-то эксклюзивный бизнес на этом, поэтому можно просто игнорировать эту строку. Снять защиту от чтения невозможно. Нужно стирать всю микросхему целиком и прошивать без защиты от чтения.

Все остальные строки в файле jedec носят служебный характер и на логику работы GAL после прошивки не влияют.

Реализация.

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

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

В моем случае почти все у меня было в наличии, именно поэтому были выбраны конкретные модели модулей. А не потому что они лучше других подходят для задачи. Вот полный список с картинками с Алиэкспресса:

  1. Микроконтроллер STC8G1K08

  2. Повышающий преобразователь напряжения MT3608

  3. Панелька для микросхемы

  4. Вольтметр (не обязательно)

  5. USB-COM (любой)

  6. Макетная плата на свой вкус.

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

Это контакт управления EN. К нему надо припаять проводок и залить это все любым компаундом, чтобы не отвалилось.

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

Схема всего устройства очень простая:

Подключение к COM-порту тут не нарисовано, оно происходит через стандартные контакты на платке микроконтроллера.

Две гребенки контактов здесь сделаны для отладки, когда я разбирался с тем , как оно работает. Можно не обращать внимания.

Код прошивки микроконтроллера лежит здесь. Его можно пересобрать под любую другую модель STC, реализующую 8-битный C51.

Для управления этим программатором написана еще программа для ПК (C#). Скачать можно здесь.

Здесь все просто.

  • Установить правильный COM-порт.

  • Включить VPP и настроить регулятором на MT3608 нужный уровень: 14.5 Вольт для GAL или 12 Вольт для ATF. Сверхточность тут не требуется.

  • Выключить VPP.

  • Теперь можно установить микросхему.

  • В программе открыть прошивку, нажать “Прошить”.

  • Дождаться завершения процесса.

Здесь же можно посмотреть карту фьюзов, как они будут прошиваться.

Вот в общем-то и все. В программе есть много разных кнопочек, которые появились в процессе изучения алгоритма. Можно поиграть с ними, но помнить, что ресурс прошивок в GAL очень мал.