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

Обновлено: 05.07.2024

Здравствуйте! Я разобрался с базовыми понятиями программаторов, общее для внутрисхемных программаторов является протокол, например ISP. Тут мне все понятно у ISP есть определенные выводы которые также есть на ножках микроконтроллеров. Вся информация которую я нахожу это статьи по прошивке микроконтроллеров.

Про прошивку чипов флэш памяти ничего не могу найти. Насколько я разобрался все чипы флэш памяти (например AT49F040T) имеют ножки
A0 - An Addresses
CE Chip Enable
OE Output Enable
WE Write Enable
I/O0 - I/On Data Inputs/Outputs

где n - различная для различных чипов

Вопрос где найти информацию по сборке программатора который прошивает флэш память?
Прошивается ли флэш память через стандартные интерфейсы ISP,UART, и др. если да то как выводы этого интефейса подключать к ножкам чипа?
Или флэш память прошивается как то по особому?
Спасибо!

Если вас интересуют FLASH из серии AT49F040T то вам нужеи программатор Willem

JLCPCB, всего $2 за прототип печатной платы! Цвет - любой!

Меня интересует конкретно память, EEPROM,Flash неважно какой чип, насколько я понял основной смысл в том что все равное все чипы которые прошиваются внутрисистемно, прошиваются через определенный протокол, просто алгоритмы записи разные. Дело в том что я не хочу исользовать программаторы, я знаю что для этих целей можно было сделать ezoflash программатор который является аналогом программатора willem, но мне хочется разобратся хотябы в основах работы программаторов при прошивке флэш памяти, через какой протокол она прошивается и т.п.

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

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Приглашаем всех желающих 25/11/2021 г. принять участие в вебинаре, посвященном антеннам Molex. Готовые к использованию антенны Molex являются компактными, высокопроизводительными и доступны в различных форм-факторах для всех стандартных антенных протоколов и частот. На вебинаре будет проведен обзор готовых решений и перспектив развития продуктовой линейки. Разработчики смогут получить рекомендации по выбору антенны, работе с документацией и поддержкой, заказу образцов.

Вот это правильная мысль. У самого возникла такая проблема - разработал устройство, в котором есть EEPROM, а как туда изначальные данные писать? Так вот берем МК у которого есть UART и тот интерфейс, по которому работает наш EEPROM, соединяем так: COM-порт-[max232]-МК-EEPROM. Далее читаем даташит на память, а точнее - раздел где описаны команды записи/чтения. Далее разрабатываем протокол обмена данными между PC и МК. Например изобретаем команды - управление линией CS (выбор кристалла), передача байта в EEPROM, чтение EEPROM. Все готово, теперь можно работать с EEPROM прямо с компьютера! Не знаю, насколько такой подход правильный, но я пошел этим путем, и сейчас уже нахожусь на этапе отладки системы команд.

Навигационные модули позволяют существенно сократить время разработки оборудования. На вебинаре 17 ноября вы сможете познакомиться с новыми семействами Teseo-LIV3x, Teseo-VIC3x и Teseo-LIV4F. Вы узнаете, насколько просто добавить функцию определения местоположения с повышенной точностью благодаря использованию двухдиапазонного приемника и функции навигации по сигналам от MEMS-датчиков. Поработаем в программе Teseo Suite и рассмотрим результаты полевого тестирования.

(3557) 4.90 (10) Оценки, комментарии

2021-02-11 Дата последнего изменения: 2021-02-28


Автор: Линьков Е.А. — разработчик программаторов ChipStar .

В статье в предельно доступной форме рассматриваются особенности применения микросхем NAND FLASH.

CОДЕРЖАНИЕ:

NAND не совсем обычные микросхемы, поэтому те инженеры, которые с ними сталкиваются впервые, часто бывают обескуражены. Более подробно, хотя и очень примитивно, особенности NAND описаны в статьях "Программирование NAND FLASH" и "Программирование SPI NAND".

Здесь же я постараюсь изложить суть использования NAND еще проще.

Тому, кто собирается работать с NAND профессионально, материала из этой статьи будет явно недостаточно, но для любителя, который решил отремонтировать 2–3 прибора, в которых используется микросхема типа NAND, это может очень помочь.

1. Коварство NAND. Структура.

NAND организованы следующим образом: страницы > блоки –> логические модули –> кристаллы.

На рисунке ниже показан типичный пример организации микросхемы NAND с одним логическим модулем и одним кристаллом.

структура NAND?

В чем коварство NAND? В адресации.

Даже начинающий радиолюбитель знает, что к любой ячейке микросхемы памяти можно обратиться, указав её адрес. Перебирая по порядку все адреса с первого до последнего, можно считать или записать всю микросхему (именно так поступает программатор).

При считывании NAND всегда происходит чтение всей страницы целиком, страница перемещается во внутренний буфер (page register), а уже из буфера можно прочитать содержимое страницы байт за байтом или в произвольном порядке.

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

2. Коварство NAND. Ошибки.

При работе микросхемы NAND возникновение ошибок — это норма. "Как так? Как можно работать с такой микросхемой?!" — скажете вы. Как можно работать с такой памятью? Способы есть, но об этом позже, а сейчас о типичном заблуждении начинающих:

  • Пользователь ставит микросхему в программатор.
  • Читает её. Читает еще раз.
  • Сравнивает. О ужас! Обнаружено более тысячи ошибок!
  • Паника! Микросхема не работает. Программатор не работает.Ничего не работает.
  • Нужно срочно звонить нам (производителю) и требовать ремонта программатора!

Спокойно, дружище, спокойно. Это NAND, она так работает.

Сейчас типичная страница наиболее распространенных NAND равна двум килобайтам плюс дополнительные байты. Очень многие микросхемы при чтении дают до 16-ти одиночных ошибок на одну страницу. И это нормально. Берем, например, микросхему на 2 гигабайта. Нехитрое вычисление. Получаем, что при считывании микросхемы может быть до 16 777 216 ошибок!

Еще раз: 16 миллионов! Ошибок в микросхеме! Как с этим жить?! Как может что-то работать вообще? Об этом поговорим чуть позже.

А сейчас поясним понятие "одиночные ошибки".

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

3. Магия ЕСС.

Все наверное знают, что такое CRC. Код CRC (еще иногда (ошибочно) называют "контрольная сумма") — это такой специальный код, который позволяет найти ошибку в данных.

Кратко опишем как выглядит работа кодера/декодера ЕСС:

  • Берется порция данных, например, 2048 байт, записывается в страницу NAND.
  • Рассчитывается код ЕСС и тоже записывается (назовем его ECC1) (именно для записи таких кодов страница сделана чуть больше!)
  • Затем читаем страницу 2048 байт.
  • Опять рассчитываем код ЕСС (назовем его ECC2).
  • Читаем записанный код ЕСС1 и сравниваем ECC1 и ECC2.
  • Если коды совпадают, значит ошибок нет.

Вот до этого места коды CRC и ECC не сильно отличаются, магия ЕСС начинается дальше:

Вот и вся магия. Мы просто исправляем ошибки.

4. Коварство NAND. Магия ЕСС есть, но она не работает.

"Так просто?" — скажете вы. "Тогда почему программатор не использует ЕСС для исправления ошибок?! Я из раза в раз читаю микросхему и все время ошибки".

Да. Действительно, почему?

  1. Какими порциями (128, 256, 512, 1024 или 2048) в вашем приборе (не в микросхеме NAND, а именно в приборе. ) разработчик прибора решил записывать данные и вычислять ЕСС.
  2. Какой алгоритм ЕСС он решил использовать.
  3. Какой порождающий полином он решил использовать.
  4. Как разработчик разбил страницу NAND на порции и куда решил записывать сами коды ЕСС.

Как? Вы это не знаете?! Вот и мы не знаем. И, возможно, никто, кроме разработчика прибора, не знает.

Если из этого списка 1-й и 4-й пункты можно попытаться выяснить, анализируя прошивку микросхемы, а порождающий полином (пункт 3) - подобрать, то с пунктом 2 (алгоритм ECC) все очень плохо.

5. Почему алгоритмов расчета ECC так много.

На данный момент самые распространённые коды исправляющие ошибки это:

Математические теории кодов достаточно сложные, но основные приемы работы с кодами известны, порождающие полиномы легко найти. Казалось бы, мы легко сможем подобрать нужный алгоритм ECC, просто анализируя прошивку. Сначала мы тоже так решили, однако всё оказалось сложнее.

Большинство современных встроенных систем базируются на Linux. Linux для работы накопителей на основе FLASH памяти, как правило, использует драйвер MTD. В драйвере MTD реализовано программное кодирование для NAND кодом BCH с вполне известным набором полиномов. Всё будто просто, но в реальной жизни (в реальных прошивках) такое кодирование не встречается. Почему? Всё упирается в деньги. Вернее, в желание производителей аппаратуры их сэкономить.

Почему вместо обычной памяти FLASH, работающей безошибочно, используются NAND, производящие кучу ошибок? Потому что это в разы дешевле. За разработку алгоритма кодирования/декодирования ЕСС заплатить нужно ОДИН раз, за память без ошибок нужно платить КАЖДЫЙ раз в КАЖДОМ устройстве.

Ровно по этой же причине в реальных устройствах (особенно массовых) никогда не используется чисто программное декодирование ЕСС – это декодирование является очень ресурсозатратным. Получается: ставим дешевую память – получаем или медленно работающее устройство, или нужно ставить мощный процессор, стоимость которого сводит на нет выгоды от использования дешевой памяти.

Поэтому декодированием ЕСС в современных системах занимаются специальные сопроцессоры или контроллеры. Придумываются и реализуются более совершенные коды ЕСС. Часто используются комбинированные коды CRC/ECC. Код CRC рассчитывается быстрее, чем ЕСС, это позволяет использовать CRC-часть для обнаружения ошибок, а полное декодирование ЕСС — только при их наличии.

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

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

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

6. Коварство NAND. Магия ЕСС есть, но она не работает. Что делать?

Очень часто нам приходится слышать один и тот же вопрос: "Что делать, если NAND всегда читается с огромным количеством ошибок? Как прочитать без ошибок?"

Проблема может быть успешно преодолена, если вы нам скажете, какой алгоритм ЕСС использует ваше устройство. В этом случае мы сделаем расчет ЕСС по вашему алгоритму и у вас всё будет работать без ошибок при чтении NAND для этого устройства.

Вы не знаете алгоритм? Тогда есть только один способ: толерантность к ошибкам (и этот способ успешно работает).

Просто читаете микросхему. Она будет считана с ошибками. При верификации требуется задать допустимое количество ошибок на страницу микросхемы. (Для всех вновь добавленных микросхем значение по умолчанию уже задано. Если не задано нужно смотреть документацию или просить нас, чтобы мы внесли данные ЕСС в базу).

Программа будет сверять микросхему и подсчитывать количество ошибок. Если количество ошибок не превысит заданное значение — значит всё в порядке. Ошибка сравнения не будет выдана, вы просто будете проинформированы о количестве "исправимых" ошибок.

Но не все так однозначно.

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

Понятно, что пример несколько искусственный, но на нём проще объяснить.

Случай 1:Запись эталона в NAND

Мы записали в микросхему эталонную (точно не содержащую ошибок) прошивку. При верификации получаем 3 ошибки на страницу. Программа предупреждает об исправимых ошибках, но верификация проходит успешно.



Рисунок 1.

Если вы эту микросхему NAND поставите в ваш прибор, он исправно заработает, поскольку встроенный в прибор алгоритм ЕСС обязан(!) исправлять не менее 4-х ошибок на страницу (это паспортные характеристики данной NAND и прибор просто обязан справляться с таким количеством ошибок).

Случай 2:Чтение микросхемы NAND

Мы считали прошивку из исправной микросхемы, стоящей в приборе (напомню, мы получаем по 3 ошибки на страницу). Далее мы еще раз считывали прошивку. Мы опять получили 3 ошибки на страницу.



Рисунок 2.

Но ошибки не возникают в одних и тех же местах! При сравнении результатов 1-го и 2-го считывания может получиться до 6-ти ошибок на страницу. Это превысит допустимые 4 для данной микросхемы, но это вовсе не означает, что микросхема неисправна!

Случай 3:Копирование микросхемы NAND

Мы считали прошивку из исправной микросхемы, стоящей в приборе (получая по 3 ошибки на страницу). Далее записали полученную прошивку в чистую микросхему.



Рисунок 3.

При верификации получим по 3 ошибки на страницу. Это вроде бы меньше 4-х. Но заработает ли прибор? Не факт. Всего ошибок может быть до 6-ти на страницу (3 при считывании образца плюс 3 при работе микросхемы в приборе), но ЕСС прибора исправит только 4.

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

7. Практический совет по выбору порога ошибок.

Можно порекомендовать простой алгоритм выбора количества допустимых ошибок при верификации (настройка порога толерантности):

Случай 1. Очень оптимистичный. У вас есть эталонная прошивка и она точно без ошибок.

Такую прошивку можно писать и верифицировать с порогом ошибок, заданным в документации на микросхему (во всех наших примерах – это 4).

Случай 2. Реальный. У вас нет эталонной прошивки.

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



Рисунок 4.

Чем больше вы ошибок получаете при считывании эталона и верификации записи, тем меньше вероятность того, что алгоритм ЕСС справится с исправлением ошибок и прибор заработает. Здесь уже как повезет. :)

8. "Ваш программатор полный отстой, вот другие программаторы решают эту проблему".

Нет. У других производителей программаторов (во всяком случае у всех, которые нам известны на данный момент) всё точно так же. Те же предложения: "Cкажите какой ЕСС и мы все реализуем".

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

9. "Я все прочитал и ничего не понял.
Вы сможете наконец что-то сделать, чтобы NAND читались "нормально"?"

Мы над этим работаем. До сих пор мы не оставляем надежды на создание способа автоматического восстановления алгоритма ЕСС (хакинга) только на основании анализа прошивки.

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

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

Всё что нас интересует — это название микросхемы, из которой прошивка считана. Для лучшей защиты своих интересов вы можете прислать прошивку не полностью. Если вы опасаетесь — не присылайте. Это только просьба.

Еще очень желательно знать марку контроллера NAND, используемого в системе или марку центрального процессора, то есть название микросхемы, к которой NAND подключена.

Собрав достаточную базу прошивок, я надеюсь, нам удастся "хакнуть" ЕСС и сильно облегчить вам работу с NAND.

Только совместными усилиями мы сможем добиться значительных результатов в работе!

Во время очередной уборки был случайно выключен удлинитель, к которому были подключены работающие системный блок и монитор. Системный блок состоит из:

  • материнская плата — ASRock B75 Pro 3
  • процессор — Intel Core i5-3570
  • блок питания — Corsair CX750M

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

В первую очередь подключил другой старенький БП — комп не запускается.

Для дальнейших проверок принес домой автомобильный комп. Состав:

  • материнская плата — ASRock B75M-ITX
  • процессор — Intel Pentium G640T

Вытащил из автомобильного компа процессор, вставил его в домашний — комп не запускается. Но появилась надежда, что процессор все таки цел, а неисправна материнка, которая немного дешевле (хотя новые на чипсетах не H61 и H67 — дефицит).

Далее домашний процессор вставил в автомобильный комп — комп заработал. Следовательно, процессор живой, а проблема в материнке. Начал грешить на BIOS (Winbond 25Q64BVAIG).

Собственно, программирование

Хорошо, что микросхема BIOS не впаяна, а на обычной панельке DIP-8. Программатора у меня нет, заказывать в Китае и ждать месяц — не выход. Решил сделать программатор из ноутбука жены и имеющейся в наличии Arduino Nano. Покопался в интернете… Везде в основном прошивка заливается через COM-порт, я же решил прошивать с карты памяти (так вроде гораздо быстрее).

Набросал схему подключения:


Собрал все на макетной плате:


Тип и объем карты памяти, способ ее форматирования, имя файла должны соответствовать требованиям библиотеки SD Arduino.

Для начала набросал скетч, который считывает содержимое SPI Flash и записывает его в файл на карту памяти, попутно вычисляя контрольную сумму по методу Checksum-32, т.е. простым суммированием.

Запустил скетч, получившийся файл сравнил с оригинальным BIOS — получилось около 140000 несовпадающих байт.

Далее написал скетч, который читает файл с карты памяти и записывает его на SPI Flash, предварительно стирая чип.

Запустил, подождал, скетч вывел контрольную сумму, она совпала с контрольной суммой оригинального файла. Но это контрольная сумма файла на карте памяти, мне же нужна контрольная сумма содержимого SPI Flash.

Можно было использовать первый скетч, но написал третий, который только считает контрольную сумму содержимого SPI Flash по тому же алгоритму.

Контрольная сумма SPI Flash совпала с контрольной суммой оригинального файла.

После вставки прошитой микросхемы BIOS в домашний комп — он благополучно заработал.

В среде Arduino IDE необходимо установить библиотеку SPIFlash через управление библиотеками.

Контрольную сумму вычислял с помощью HEX-редактора HxD.


PS: Первоначально в качестве SD-модуля использовал вот такой:

Но с ним были частые глюки, не инициализировалась SD-карта. Помогало «горячее» переподключение самой SD-карты при подключенной к компу Arduino.


PPS: Вместо резисторов пробовал подключить двунаправленный конвертер сигналов:

Но с ним схема не заработала.


Собрал недавно программатор NAND Flash памяти.
Программатор разработала организация НТП "Тиком".

"USB программатор ChipStar‑Janus
USB программатор ChipStar‑Janus — простой внутрисхемный программатор для микроконтроллеров (PIC, AVR, MCS51 и других) и микросхем FLASH памяти с возможностью расширения.

Через адаптер расширения позволяет программировать микросхемы NAND FLASH.

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

Таким образом, этот программатор в некоторых случаях будет достаточен для разработки и ремонта современного радиоэлектронного оборудования." — текст описания с сайта производителя.

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

Сайт производителя
Есть 2 варианта печатной платы, для smd(двухсторонняя) и для DIP.
Прошивка и ПО доступны после регистрации на сайте.

МК PIC25k50 я прошивал программатором JDM Extrapic, а ПО picpgm.
Единственная проблема при сборке программатора у меня была с выставлением конфиг. битов, picpgm сама не смогла их корректно распознать :(. В документации на программатор конфиг. битов я не нашел, и начал пробовать вытянуть их из HEX файла. Начал читать, узнавать где они там хранятся и т.д. Попутно задал вопрос в тех. поддержку производителя, а дело было в 22 часа примерно, пятница, ну думаю пока до понедельника далеко, буду пробовать сам из прошивки вытянуть, по итогу через минут 40 вытянул конфиг биты из файла прошивки и вижу письмо пришло новое, открываю, а это к слову было 23 часа, а там подробный ответ на несколько моих вопросов по программатору. Я был приятно шокирован скоростью ответа тех.поддержки, при том что вопрос был по БЕСПЛАТНОМУ программатору, а не купленой версии. Сравнил полученные биты с вытянутыми, все сошлось. Прошил МК и продолжил сборку.
Программатор сразу заработал.
Еще одно приятное впечатление оставила тестовая программа для отладки и проверки программатора. Эта программа вручную выставляет напряжение программирования на выходах питания, выставляет низкий или высокий уровень на линиях данных, прослушивает входы, и для каждого действия обозначены контрольные точки на схеме для проверки, схема с точками показана на вкладке в программе, очень удобно.

Сделал себе сразу 3 адаптера, для 24х, 25х, 93х, NAND(делал под впайку микросхемы в адаптер, пока не куплю панельку)

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

Схема, платы, инструкция по сборке, все доступно БЕЗ регистрации, а регистрация нужна для получения прошивки и ПО под прошивку, там еще дается период бесплатного обновления, и для каждой прошивки он свой, если шить мою прошивку, то вы потеряете то количество дней, которое прошло с момента моей регистрации. Так что крайне рекомендую регистрироваться и скачивать свою прошивку.

Микросхемы памяти серий 24хх (EEPROM), 25хх (Serial Flash) широко используются в электронике. Такие чипы присутствуют в составе практически любой конструкции современной бытовой и промышленной аппаратуры, где есть процессоры и/или микроконтроллеры. Данный программатор имеет возможность работы с обоими типами памяти.




В комплект поставки входят сам программатор и переходная плата с двумя посадочными местами под микросхемы памяти в SOIC корпусе.


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


Так-же на переходнике есть посадочное место для разьема PLD-8 (в комплект не входит, я впаял 2хPLS-4), предназначенного для подключения прищепки или шлейфа программирования.


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

Программатор выполнен на базе микроконтроллера «USB Bus Convert Chip» серии CH341A. Он рассчитан на физическое подключение к порту USB 2.0 компьютера, при подключении через хаб-удлиннитель программатор у меня работал с ошибками (может у меня хаб такой). Модуль программирования памяти собран на плате размерами 63х27мм (без учета USB разьема, с разьемом 84х27мм) из черного стеклотекстолита.


В распоряжении автора есть два экземпляра этого программатора, приобретенные в разное время, визуально их можно отличить по названию, один (более ранний) называется "CH341A Mini Programmer", второй "CH341A MinProgramment". Схемы одинаковые, различаются только цветом светодиода "RUN". На первом зеленый, на втором желтый.
Некоторые схемные обозначения на конкретном программаторе могут немного отличаться, например самовосстанавливающийся предохранитель F1 (fuse) может обозначаться как R1. В инете встречались упоминания, что в эту позицию иногда ставят резистор нулевого сопротивления т.е. перемычку. У меня как и положено на обоих стоят предохранители

400mA, сопротивление 0,92Ом, маркировка на корпусе «5». Также на плате часто отсутствует схемное обозначение резисторной сборки PR1. Более грамотное обозначение схемных элементов программатора можно посмотреть на изображении верхней стороны платы от магазина WAVGAT (на AliExpress):


Особых отличий от даташита схема не имеет, разве что на блокировочных конденсаторах по питанию сильно экономили. Питание 5V от USB подается на вывод 28, на выходе 9 внутреннего стабилизатора блокировочный конденсатор.


Т.к. на выводах ввода/вывода напряжение соответствует 5V уровням, в основном это устройство на 5V, правда в инете много упоминаний и о программировании им микросхем на 3.3V без каких либо ошибок и отрицательных последствий. Выход отдельного стабилизатора AMS1117-3.3 в схеме не задействован и просто выведен на выходной ZIF разьем и на контакт боковой гребенки SPI.
В даташите указан способ сделать уровни на выходах совместимыми с 3.3V. Для этого необходимо соединить выводы 28 и 9 и подать на них 3.3V, при этом внутренний стабилизатор просто не используется. Но при этом 3.3V уровни также будут на на переходнике USB <-> RS232, что иногда не приемлемо. Также на Ali сушествует другая версия этого программатора, скомпонованная немного по другому и выполненая на зеленом текстолите. Читал, что там на вывод 28 подается 3.3V от внешнего стабилизатора, но выводы 28 и 9 не соединены, и это нормально работает. В любом случае, уровни на переходнике USB <-> RS232 и здесь будут 3.3V.
Если планируется программирование флешек 1.8V через основной разьем необходимо дополнительно приобрести модуль 1.8V-adapter. Бонусом является то, что переделать его для поддержки и уровней 3.3V несложно, надо лишь закоротить вход/выход стабилизатора 1.8V дополнительным джампером.


Теперь при наличии джампера адаптер работает с логическими уровнями 3.3V, при отсутствии — 1.8V.
Минус тут в том, что стоимость адаптера не намного меньше, чем самого программатора. Но если он уже есть, почему бы его не использовать по полной?

Если для программирования будет использована боковая гребенка SPI, можно поступить проще. На Ali много предложений 4-канального двунаправленного преобразователя уровней на МОП транзисторах за очень небольшие деньги.


Работа этого преобразователя подробно описана в статье "Согласование логических уровней 5В и 3.3В устройств". Схема отличается от рассмотренной в статье только номиналами резисторов (сопротивление меньше — увеличено быстродействие и энергопотребление). За счет добавления дополнительных джампера J1 и двух кремниевых диодов, можно будет программировать как 3.3V, так и 1.8V флешки.


Программная часть (Software), драйвер.

Перед применением программатора необходимо инсталировать в Windows его драйвер(а), легко находятся в инете, я брал из архива программы AsProgrammer. Программатор поддерживает два режима, они переключаются аппаратно джампером J1. Применен интересный прием, при переключении джампера у чипа меняется Device ID на шине USB. Это вынуждает Windows найти подходящий по VID/PID драйвер и подключить его.
При джампере в положении «1-2» по VID_1A86&PID_5512 подгружается драйвер "USB-EPP/I2C… CH341A". Он создает в диспетчере устройств раздел "Interface" в который и устанавливается.


В этом случае чтение, верификация, запись чипов памяти должны осуществляться непосредственно через ZIF-панель программатора CH341A или через боковой разьем Р2 с интерфейсом SPI.

При джампере в положении «2-3» по VID_1A86&PID_5523 подгружается драйвер "USB-SERIAL CH341A". В диспетчере устройств найти его можно в разделе "Порты (COM и LPT)". Там же можно посмотреть и номер присвоенного СОМ порта.


При этом программирование может производиться только через интерфейс RS232 TTL на разьеме Р1 (там же где и джампер), если целевое устройство поддерживает такой способ (встроенный загрузчик или монитор).

Программная часть (Software), программа прошивальщик.


Программа не требует установки, включает в архив драйверы для обоих режимов программирования СН341А.
Log-файл работы программы с флешкой W25Q128FW, 16Мб, 1.8V через "1.8V-adapter":


Используется программатор: CH341
Sreg: 00000000(0x00), 00000010(0x02), 01100000(0x60)

Используется программатор: CH341
Читаю флэшку…
Готово
Время выполнения: 0:02:49

Используется программатор: CH341
Стираю флэшку…
Готово
Время выполнения: 0:01:03

Используется программатор: CH341
Записываю флэшку с проверкой…
Готово
Время выполнения: 0:24:45

5 вариантов BIOS) ни одного сбоя или ошибки.

Линуксоидам использовать стороннюю программу нет необходимости, стандартный прошивальщик Flashrom полностью поддерживает данный программатор (должен быть собран с поддержкой ключа "-ch341a").

WARNING: If the /WP or /HOLD pins are tied directly to the power supply or ground during standard SPI or Dual SPI operation, the QE bit should never be set to a 1.


Как по мне, проще сделать это на переходнике 1.8V-adapter, если задействовать его вторую незанятую половину разьема. Тем более при применении адаптера переделка на плате программатора становится бесполезной, порты у трансмиттера используются как однонаправленные.

Доработка 2. Увеличение кол-ва блокировочных конденсаторов по питанию.

Участник сообщества «AlexX1810» предложил добавить на плату программатора три блокировочных конденсатора 0.1 мкФ. По его словам улучшается стабильность работы программатора.
Если ориентироваться по схеме, первый конденсатор между 6-7 контактами разьема Р1 (5V), второй между 5-6 контактами разьема Р2 (3.3V), третий между 15-16 контактами ZIF панельки (7-8 контакты разьема I2C, 3.3V). Все впаяны со стороны контактов.


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

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