Программатор SPI и I2C микросхем памяти Minpro I V1.3 на CH552G

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




  В комплект поставки входят сам программатор и переходная плата с двумя посадочными местами под микросхемы памяти в SOIC корпусе. Чипы на переходник нужно или припаивать, или попробовать прижать микросхему прищепкой или держателем для бумаг.



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



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

  Печатная плата программатора имеет немного деталей и простую топологию печатной платы.



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



  На схеме не обозначены внутренние подтяжки в контроллере, pull-up резистор 1,5к между выводами UDP USB и V33, и pull-down резистор между выводами RST и GND. Выход отдельного стабилизатора 3,3V в схеме не задействован и выведен только на контакты панельки ZIF. По схеме сразу видно отличие от программатора на CH341, для программирования микросхем памяти обоих типов (25хх (SPI Flash) и 24хх (I2C EEPROM)) используется только одна половина ZIF панельки, ближняя к ручке:



  Становится понятным и значительное ускорение программирования чипов SPI относительно CH341, микросхемы памяти этого типа напрямую подключаютcя к аппаратному SPI интерфейсу контроллера. Для чипов I2C EEPROM ускорения не произойдет, аппаратного блока интерфейса I2C в контроллерах CH55x нет, а значит его реализация выполнена программно и управляется через bitbang.
  Схема подключения питания соответствует даташиту, питание 5V от USB подано на зашунтированный конденсатором вход внутреннего стабилизатора (вывод 15, VCC), его выход (вывод 16, V33) тоже зашунтирован конденсатором.



  Здесь необходимо учитывать, что на I/O каскады контроллера подается питание 5V, а значит и на входах микросхем памяти оно будет соответствовать 5V за вычетом падения напряжения на I/O каскадах контроллера. Это падение будет двойным, т.к. вывод GND микросхем памяти также подключен к выводу I/O. Обычно падение на МОП ключе составляет 0,1-0,4V, а значит на входах микросхем памяти будут присутствовать сигналы с уровнем в пределах 4,2-4,8V. Для микросхем памяти большинства производителей это некритично, т.к. у них входы 5V толерантны, но лучше все-таки сверять по даташитам.
  В даташите описан способ приведения уровней ввода/вывода к 3,3V, для этого надо соединить выводы 15 и 16 контроллера и подать на них 3,3V от внешнего стабилизатора. При этом небходимо учитывать, что для перепрошивки контроллера напряжение на выводе 15 должно быть равным 5V, и при таком включении возможность обновления firmware теряется.
  Если планируется программирование флешек 1.8V через основной разьем необходимо дополнительно приобрести модуль 1.8V-adapter. Бонусом является то, что переделать его для поддержки и уровней 3.3V несложно, надо лишь закоротить вход/выход стабилизатора 1.8V дополнительным джампером.



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

Программная часть (Software)

  В программную часть программатора входят драйвер и программа-прошивальщик «Minpro I USB High Programmer». На сайте изготовителя можно скачать программу вместе с драйвером в ZIP архиве. Сайт на китайском, справа зеленая стрелка для загрузки.
  После распаковки архива в рабочую папку программы сначала нужно установить драйвер. Для этого вставьте программатор в USB порт, в диспетчере устройств появится устройство «MinPro» с неустановленным драйвером. Щелкнуть по устройству правой кнопкой, «обновить драйвер», выбрать вручную, указать свежесозданную папку программы. Драйвер установится и в диспетчере устройств в разделе «libusb-win32 devices» появится ваш программатор «MinPro».



Внимание, драйвер не имеет цифровой подписи!



Теперь можно запустить саму программу-прошивальщик, файл MinproI.exe.



  Если программа запускается в первый раз, язык интерфейса будет на китайском. В строке меню найдите второе справа меню и выберите последний пункт для переключения на английский. Если программатор подключен, в окне сообщений будет написано об этом, State — Connected.

  Номенклатура прошиваемых микросхем памяти довольно большая, и расширяется с каждой новой версией программы:

список микросхем который поддерживает данный программатор:
********************************** 25 SPI FLASH ********************************
AMIC:
A25L05P A25L05PT
A25L512 A25L10P A25L010 A25L020
A25L20P A25L40P A25L040 A25L080 A25L80P
A25L16P A25L016 A25L032

ATMEL:
AT25F512 AT25F512B AT25F512A AT25F1024 AT25FS010
AT25F1024A AT25F2048 AT25DF021 AT25DF041A AT25F4096
AT26F004 AT26DF041A AT25FS040 AT26DF081A AT26DF161A
AT25DF161 AT26DF161 AT26DF321 AT25DF321A AT25DF321
AT25DF641

EON:
EN25B05 EN25F05 EN25B05T EN25P05 EN25LF05
EN25F10 EN25P10 EN25D10 EN25LF10 EN25D20
EN25LF20 EN25F20 EN25F40 EN25D40 EN25LF40
EN25T80 EN25D80 EN25Q80 EN25F80 EN25P80
EN25Q16 EN25H16 EN25B16T EN25F16 EN25D16
EN25T16 EN25B16 EN25F32 EN25P32 EN25B32
EN25Q32 EN25B32T EN25B64T EN25Q64 EN25F64
EN25B64 EN25F128 EN25Q128

ES:
ES25P40
ES25P80 ES25P16

ESMT:
F25L04UA F25L004A F25L08PA F25L008A F25L016A
F25L16PA F25L32PA F25L32QA F25L64QA

GIGADEVICE:
GD25Q512 GD25Q10 GD25Q20 GD25Q20
GD25D40 GD25Q41 GD25F40 GD25Q40
GD25D80 GD25F80 GD25Q80 GD25T80
GD25Q16 GD25Q32 GD25Q64 GD25Q128

KH:
KH25L4006E KH25L8036D KH25L8006E KH25L1606E

MSHINE:
MS25X40

MXIC:
MX25V512 MX25L512 MX25L1005 MX25L2005 MX25L2026
MX25U4035 MX25V4035
MX25L4005A MX25V4005 MX25L8005
MX25V8006E MX25V8005 MX25U8033E MX25L8036E MX25V8035
MX25L8035E MX25U8035
MX25L8006E MX25L1636E MX25L1606E
MX25L1633E MX25L1608D MX25L1635E MX25U1635E MX25L1605D
MX25L1608E MX25L1636D MX25L3225D MX25L3237D MX25L3236D
MX25L3206E MX25L3205D MX25U3235E MX25L3208D MX25L3235D
MX25U3235F MX25L3208E MX25L6455E MX25L6408D MX25L6465E
MX25L6408E MX25L6406E
MX25L6445E MX25L6405D MX25L6436E MX25L6406
MX25L12865E MX25L12835E MX25L12836E MX25U12835F MX25L12835F
MX25L12855E MX25L12845E
MX25L12805D MX25L25635E/F
MX25L25639F MX25L25735E/F
MX25U25635F
MX25L2573 MX66L51235F
MX66U5123F

PMC:
PM25LV512A PM25LV010A PM25LV020 PM25LV040 PM25LV080B

SPANSION:
S25FL001 S25FL040 S25FL002 S25FL004 S25FL008
S25FL160 S25FL016 S25FL032 S25FL064 S25FL128

SST:
SST25VF512A SST25VF512 SST25VF010A SST25VF010 SST25VF020
SST25VF020A SST25VF040B SST25VF040 SST25VF040A SST25VF080B
SST25VF016B SST25VF032B SST25VF064C

ST:
M25P05A M25P10A M25P20 M25P40 M25PX80 M25PE80 M25P80
M25PE16 M25P16 M25PX16 M25PX32 M25P32
M25PE32 M25P64 M25PE64 M25PX64 M25P128

WINBOND:
W25P10 W25X10A W25X10AL W25X10L W25X10
W25X20A W25X20L W25X20 W25X20AL W25P20
W25Q40BV W25X40 W25X40AL W25X40L W25X40A
W25P40 W25P80 W25Q80BV W25X80L W25X80A
W25X80AL W25Q80V W25X80 W25X16 W25Q16BV
W25Q16V W25P16 W25P32 W25Q32V W25X32
W25Q32BV W25Q64BV W25X64 W25P64 W25Q128FV
W25Q128BV W25Q256FV

********************************** 24 EEPROM ***********************************
ATMEL:
AT24C01; AT24C01A; AT24C01B;
AT24C02; AT24C02A; AT24C02B; AT34C02D;
AT24C04; AT24C04A; AT24C04B; AT34C04;
AT24C08; AT24C08A; AT24C08B; AT24RF08C;
AT24C16; AT24C16A; AT24C16B;
AT24C32; AT24C32A; AT24C32B;
AT24C64; AT24C64A; AT24C64B;
AT24C128; AT24C128A; AT24C128B;
AT24C256; AT24C256A; AT24C256B;
AT24C512; AT24C512A; AT24C512B;
AT24C1024; AT24C1024A; AT24C1024B;

CATALYST:
CAT24C01; CAT24C02; CAT24C04; CAT24C08;
CAT24C16; CAT24C32; CAT24C64; CAT24C128;
CAT24C256; CAT24C512; CAT24C1024;

CORIGHT:
24C01; 24C02; 24C04; 24C08; 24C16;
24C32; 24C64; 24C128; 24C256; 24C512; 24C1024;

FAIRCHILD:
FM24C01; FM24C02; FM24C03; FM24C04;
FM24C05; FM24C08; FM24C09; FM24C16;
FM24C17; FM24C32; FM24C64; FM24C128;
FM24C256; FM24C512; FM24C1024;

HOLTEK:
HT24C01; HT24LC01; HT24C02; HT24LC02;
HT24C04; HT24LC04; HT24C08; HT24LC08;
HT24C16; HT24LC16; HT24C32; HT24LC32;
HT24C64; HT24LC64; HT24C128; HT24LC128;
HT24C256; HT24LC256; HT24C512; HT24C1024;

ISSI:
IS24C01; IS24C02; IS24C04; IS24C08;
IS24C16; IS24C32; IS24C64; IS24C128;
IS24C256; IS24C512; IS24C1024;

MICROCHIP:
24AA01; 24FC01; 24LC01; 24AA02; 24FC02; 24LC02;
24AA04; 24FC04; 24LC04; 24AA08; 24FC08; 24LC08;
24AA16; 24FC16; 24LC16; 24AA32; 24FC32; 24LC32;
24AA64; 24FC64; 24LC64; 24AA128; 24FC128; 24LC128;
24AA256; 24FC256; 24LC256; 24AA512; 24FC512; 24LC512;
24AA1026; 24FC1026; 24LC1026;

NSC:
24C02; 24C02L; 24C64;

NXP:
PCA24S08;

RAMTRON:
FM24C04A; FM24CL04; FM24C16A; FM24CL16;
FM24C64; FM24CL64; FM24C256; FM24CL256; FM24C512;

ROHM:
BR24C01; BR24L01; BR24T01; BR24C02; BR24L02; BR24T02;
BR24C04; BR24L04; BR24T04; BR24C08; BR24L08; BR24T08; BUL08;
BR24C16; BR24L16; BR24T16; BR24C32; BR24L32; BR24T32; BR24C64; BR24L64; BR24T64;
BR24T128; BR24T256; BR24T512; BR24T1M;

SANYO:
LE26CAP08;

ST:
M24C01; ST24C01; M24C02; ST24C02; M24C04; ST24C04;
M24C08; ST24C08; M24C16; ST24C16; M24C32; ST24C32;
M24C64; ST24C64; M24128; M24256; M24512; M24M01; M24M02;

XICOR:
X24C01; X24C02; X24C04; X24C08; X24C16;
  Схема данного программатора похожа на схему популярного программатора EZP (эта попроще), особенно версий EZP2019, EZP2020 в которых применяется тот-же контроллер CH552G.
  EZP имеет более долгий путь развития и соответственно более широкую номенклатуру прошиваемых микросхем памяти. В инете встречались упоминания о переносе недостающих типов чипов памяти из номенклатуры обслуживаемых, из чип-листа EZP в чип-лист данного программатора MinproI.Dat. Программа EZP поддерживает данный формат файлов, можно редактировать MinproI.Dat.

Перепрошивка программы контроллера (Firmware)

  Для перепрошивки необходимо ввести контроллер в режим DFU (device firmware update) — специальный режим, предназначенный для полной переустановки прошивки устройства. Для входа в этот режим по умолчанию необходимо соединить на контроллере ножки V33 (16) и UDP (12) через резистор ≥ 10k (10-22k). На программаторе сделать это несложно, т.к. эти ножки выведены непосредственно на неиспользуемую часть ZIF панели. Резистор, переключающий в режим программирования, распознаётся микроконтроллером только в момент подачи питания (ресета), когда внутренний резистор 1.5K ещё не подключен (подключается он при программном включении блока USB), а потом просто шунтирует внутренний резистор (поэтому и требование ≥ 10k). Резистор можно оставить постоянно подключенным на все время программирования.



  Я пробовал резисторы 10к и 22к, с обоими уверенно переключается в режим DFU, при этом загорается зеленый светодиод «RUN». Попробовал подключить резистор по другому, к выходу дополнительного стабилизатора 3,3V:



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

  Когда контроллер в режиме DFU у чипа меняется Device ID на шине USB и ему требуется другой драйвер, он есть в комплекте программы-прошивальщика. Без него устройство не распознается.

Для перепрошивки firmware контроллеров CH55x предназначена утилита «WCHISPTool»:



Утилита требует установки в Windows. После установки надо зайти в каталог утилиты и вручную запустить установщик Setup.exe драйвера USB CH375WDM.INF.



После этого в диспетчере устройств подключенный контроллер в режиме DFU будет виден так:



Идентификатор устройства — VID 4348, PID 55E0. Класс USB устройства — vendor specific class.

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

P.S. Отличия в интерфейсе последней на момент написания статьи версии 2.90 утилиты WCHISPTool. Их не много:



  Добавилась вкладка программирования чипов CH32F1, и что более интересно, теперь при определении контроллера утилита выводит в Log-окне его UID и версию бутлоудера.

P.P.S. Возможно у кого-то, как и у меня может возникнуть вопрос, допустим программатор мы перепрошили, поигрались, как теперь вернуть прошивку обратно? К сожалению доступ к контроллеру CH552G мы получаем с помощью утилиты WCHISPTool и бутлоадера. Ни тот ни другой не предусматривают доступа к Flash памяти программ для чтения, а значит официально сделать upload программы нельзя.
  Но как говорится, если нельзя но очень хочется, то можно. Считыватель firmware через загрузчик написал участник немецкого форума Thomas. Их там 2 варианта, для загрузчика старой версии 1.1 (freader.zip, с исходниками), и для новой 2.31 (freader2.zip, один ехешник). Оба работают через 5 функций из ch375dll.dll, алгоритм работы следующий. Снимается полный дамп 16-килобайтной области Flash, считывание начинается с конца. Перебором 0..255 по нисходящей идет поиск загрузчика, и потом попытка считывания каждого байта (через верификацию). В программе есть ошибка, последний байт (адрес 0х0000) всегда считывается как 0хFF. Учитывая что это адрес вектора сброса, и там почти всегда стоит команда LJMP, байт 0хFF надо поменять на 0х02.
  Чтобы не возиться с путями лучше просто скопировать флеш-дампер в папку установленного WCHISPTool, подключить программатор в режиме DFU (с резистором), запустить freader.exe, после отработки он создаст 2 файла firmware.hex и firmware.bin.

Microsoft Windows [Version 6.1.7601]
(C) Корпорация Майкрософт (Microsoft Corp.), 2009. Все права защищены.

C:\WinSoft\WCHISPTool>freader.exe
CH552 Flash Dumper
... Bootloader V2.3 found.
... starting point found at 0x3FE4
... now reading the flash. This may take some time. If bored cancel with ESC
................................................................................
................................................................................
................................................................................
................
C:\WinSoft\WCHISPTool>

  Алгоритм простого перебора быстрым не бывает, у меня на ноутбуке чтение заняло 9:21 сек. Т.к. моя цель была получить и сохранить на будущее только прошивку программатора, нужно открыть firmware.bin в HEX-редакторе (я использовал HxD). Код разделен на 2 части, прошивка (firmware, начало 0x0000) и загрузчик (bootloader, начало 0x3800), между ними 0xFF. По адресу 0x0000 надо заменить байт 0хFF на 0х02, выделить весь код до начала блока 0хFF и сохранить как MinPro_I.bin.
  Осталось проверить, подключаем программатор в режиме DFU (с резистором), загружаем WCHISPTool, в качестве User-файла указываем свежесозданный MinPro_I.bin, запускаем верификацию, отчет:

Device#0 UID:B9-64-4D-43-00-00-00-00, BTVER:02.31
** User file name:D:\TEMP\MINPRO_I.BIN
** Download bytes:10432 B
User file HASH: 9B16D6FF3303C0F029074C4E1E5E7E4E18938872
Via usb download CH552 firmware
Device No.90700408 is started to download
BTVER:02.31
Verifying…
complete
1#device device download is complete
Total verified:1, 1 succeed, 0 failed
time used:0.405s
Запаковал MinPro_I.bin в ZIP, приложил к статье.
  • +8
  • 04 февраля 2021, 19:44
  • anakost
  • 1
Файлы в топике: MinPro_I.zip

Комментарии (10)

RSS свернуть / развернуть
Сначала я хотел дать ссылку на программу WCHISPTool в тексте статьи. На сайте производителя лежит версия 2.90, но скачать ее я так и не смог. Скачка начинается, затем в разных местах замирает и все. Вот страница для скачки, пробуйте.
0
Это скорее «Инструмент», чем «Деталька». Речь же о программаторе, а не о чипе CH552 и как на нем светодиодиком поморгать.
Программа качается без проблем. Инсталлятор на NSIS, можно распаковать 7-zip'ом.
0
  • avatar
  • Vga
  • 04 февраля 2021, 20:18
Действительно получилось. Не скачивал инсталированный Chrome х64, запустил с флешки portable Opera x32, скачал на раз.
0
Кстати, а где взять этот самый файл прошивки для обновления?
0
  • avatar
  • Vga
  • 04 февраля 2021, 20:35
Имелось в виду не обновление прошивки программатора, а замена стандартной прошивки для получения новых возможностей. Например в разделе форума 8051 приводилась прошивка, превращающая данный программатор в прошивальщик и J-Link совместимый дебагер чипов N76E003.
0
А поделись линком.
0
Искать надо, в топике «Заготовки с Ali на nuvoton N76E003at20» нашел свой ответ selevo, стр. 4, 24 фев 2020, 13:21. А сам HEX приводил кажется vt340, завтра после работы поищу.
0
В общем дело было так, как известно N76E003 идет без бутлоадера, чтобы прошить предлагают недешевый отладчик Nu-Link. Год назад vt340 предложил прошивку для СН552 для заливки бутлоадера в N76E003 в HEX виде. К сожалению не могу найти этот пост, файл прошивки Jay CH55x.hex. Я его декомпилировал и на нытье Selevo привел прошивку загрузчика в формате ассемблера для Keil A51 (N76E003_Loader.zip). В августе прошлого года vt340 собрал уже JLink совместимый дебагер на СН552. На тот момент я обрадовался, я подумал что этот дебагер можно будет подключить к Keil как обычный JLink, начал потихоньку разбираться. Разобрался:
1. Дебагер не JLink совместимый, а libjaylink совместимый, Через libjaylink его надо подключать к OpenOCD.

2. Keil c OpenOCD работать не умеет, нет соответствующего плагина, в отличии от JLink.
Получилось что погнавшись за дешевизной адаптера мне придется освоить OpenOCD и соответствующую IDE (Exlipse, VSCode и др.). Подумал, и решил что это черезчур, легче купить клон JLink на Ali и продолжать пользоваться Keil.
Это был просто пример того, как неожиданно можно модифицировать прошивку.
0
Недоговорил, вот здесь пример перешитого программатора загрузчиком N76E003. Там кстати упоминается о мелких различиях в схеме программатора.
0
Добавил описание Upload прошивки программатора.
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.