Несколько лет назад я полностью перешел на Linux, и все меня устраивало за исключением отсутствия некоторых просто необходимых программ.
Взять к примеру народный программатор CH341a. Для Windows 5 различных программ, для Linux были созданы только FlashRom для SPI Flash, ch341aProg для i2c EEPROM.
Затем появилась SNANDer - первая консольная универсальная утилита для микросхем 24xxx/25xxx/93xxx. Я обрадовался появлению этой программы и даже написал для нее скрипт запуска с элементами графического интерфейса.
Но некоторое время назад я был удивлен - я выбрасывал каждую вторую микросхему I2C (24сXXX) из-за невозможности их чтения и записи. В тот момент мне казалось, что я перегреваю их при демонтаже феном. Оказалось, что во время чтения и записи на вывод SDA подаются импульсы напряжением менее 1,3 вольта (вместо ожидаемых 3,3). Я подумал, что неисправен программатор CH341a и поставил резистор в 10 кОм между выводом питания (VCC) и выводом SDA. Уровень SDA стал выше. Отказавшие микросхемы стали работать. При этом моя первая программа для i2c-чипов работала и без резистора с этим программатором и забракованной микросхемой. Значит виноват SNANDer. Покопавшись в коде я обнаружил ошибку в программе SNANDer при инициализации программатора в режиме работы с микросхемами серии 24Сxxx. Потом я нашел еще одну ошибку с порядком следования байт при записи и чтении микросхем MicroWire - 93xxx в 16-битном режиме. Так я понял, что придется писать программу самому.
Первым делом я написал редактор микросхем для баз данных программаторов EZP2019 - EZP2025 под Linux и Windows, поскольку мне очень понравился простой формат базы микросхем у них.
Hidden text
Chip string lenght: 0x44 (68) bytes;
offset Size Value
00 - 2F ASCII Chip type, Name and Manufacture, 0x00 filling
30 1 NOR FLASH Chip Size code / 0x00 - other chips
31 1 NOR FLASH Chip ID Code / 0x00 - other chips
32 1 NOR FLASH Manufacture code / 0x00 - other chips
33 0x00
34 4 Chip Size
35
36
37
38 2 Block size
39
3A 1 0x00 - NOR FLASH FLAG / 0x01 - 24xxx FLAG / 0x02 - 93xxx FLAG / 0x04 - 95xxx
3B 1 Algoritm code number
3C 2 Timing parameter:
3D 3000/1000/500/300/200/100 - NOR FLASH, 4000/2000 - 24xxx, 100 - 93xxx
3E 2 Extend 0x00
3F 1 0x00
40 1 EEPROM 0B/2B/4B - 0B - SPI, 2B - 93xxx, 24xxx, 25xxx
41 1 0x00
42 1 EEPROM pages 0x01 - 0x04
43 1 VCC 00=>3.3V 01=>1.8V 02=>5.0V
The end record is 0x44 (68) zero bytes.
Следующим шагом было написание SPI программатора микросхем, используя ch341 SPI c-programmer tools от Setarcos, формат базы данных микросхем EZP2019 и компонент шестнадцатеричного редактора QHexedit2. Все хорошо получилось, но только для микросхем SPI NOR Flash. Хотелось бы чего-то универсального.
Далее я написал программу IMSProg, используя модифицированный код SNANDer, код QHexEdit, код моего EZP Chip Editor и основываясь на моем CH341a_spi_programmer.
Представляю вашему вниманию программу IMSProg для Linux с графическим интерфейсом для программаторов CH341a, которая позволяет читать и записывать данные в микросхемы серий 24Cxxx, 25xxx, 93xxx, 95xxx.
Программа состоит из двух независимых модулей - собственно программатора и редактора базы микросхем.
Программа сама определяет SPI-чип по трем байтам информации JEDEC (0x9F) и загружает его параметры из базы данных, любой параметр может быть изменен вручную. Для остальных типов микросхем автоопределение не поддерживается аппаратно и модель микросхемы выбирается только вручную. Программа позволяет разбить бинарный образ микросхемы на части и записать их по отдельности.
Форма поиска в шестнадцатеричном редакторе позволяет искать в дампе не только числовую и текстовую информацию, но и заголовки архивов, образы, BIOS, UEFI и т.д.
Клавиша i выводит форму с отображением слота установки микросхемы и используемого адаптера.
Интерфейс программы поддерживает английский, испанский, немецкий, китайский, испанский и русский языки. Это определяется языком текущей локали linux.
Подробные инструкции по сборке программы из исходных текстов и использованию программы доступны на GitHub (по английски), и на моем сайте (по русски).
Вы также можете скачать DEB-пакет, RPM-пакет и Appimage.
База данных микросхем регулярно обновляется и на сегодняшний день содержит около 400 позиций. Буду рад любой критике и предложениям по улучшению интерфейса программы IMSProg. Пожалуйста, протестируйте работу различных микросхем с помощью моей программы.
Комментарии (33)
CodeRush
07.10.2023 14:59+1Полезный софт, спасибо.
Тоже пользовался QHexEdit2 у себя в UEFITool, но он, к сожалению, очень слабо дружит с HiDPI-режимами. В итоге поискал альтернативы, и наткнулся на QHexView5, на который и перешел. Там тоже есть небольшие косяки, но зато с масштабированием проблем нет.
aystarik
07.10.2023 14:59а может перейти на ch347 -- там SPI побыстрее? https://github.com/aystarik/ch347_vcp
VT100
07.10.2023 14:59+4Поищите в сети описание "serial flash discoverable parameters" (SPI sfdp). Сможете наполнять базу информацией о секторах и т.п. прямо из ИМС.
iamkisly
07.10.2023 14:59+1Собранные пакеты это хорошо, но может быть возможно засунуть это дело в ppa или snap?
big-mdm Автор
07.10.2023 14:59Про ppa думаю, под Red Hat / Fedora / Centos можно использовать репозиторий РЕД ОС http://repo.red-soft.ru/redos/7.3/x86_64/updates/
iamkisly
07.10.2023 14:59+1Не знаю, может поможет. Я когда-то по этой инструкции делал https://assafmo.github.io/2019/05/02/ppa-repo-hosted-on-github.html менин там что-то пришлось переделывать, но незначительно
ZigFisher
07.10.2023 14:59+1Большое спасибо автору за проделанную работу
Будем пробовать применять в нашем проекте https://openipc.orgZigFisher
07.10.2023 14:59Попробовал установить как пакет на Debian и бысто не получилось.
Что-то хочет, а непонятно что.. ;)./IMSProg: /usr/lib/x86_64-linux-gnu/libQt5Core.so.5: version `Qt_5.12' not found (required by ./IMSProg) ./IMSProg: /usr/lib/x86_64-linux-gnu/libQt5Core.so.5: version `Qt_5' not found (required by ./IMSProg) ./IMSProg: /usr/lib/x86_64-linux-gnu/libQt5Gui.so.5: version `Qt_5' not found (required by ./IMSProg) ./IMSProg: /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5: version `Qt_5' not found (required by ./IMSProg) linux-vdso.so.1 => (0x00007ffc6afb5000) libQt5Widgets.so.5 => /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5 (0x00007fcac899e000) libusb-1.0.so.0 => /lib/x86_64-linux-gnu/libusb-1.0.so.0 (0x00007fcac8786000) libQt5Gui.so.5 => /usr/lib/x86_64-linux-gnu/libQt5Gui.so.5 (0x00007fcac823e000) libQt5Core.so.5 => /usr/lib/x86_64-linux-gnu/libQt5Core.so.5 (0x00007fcac7d68000) libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007fcac79e6000) libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fcac77d0000)
big-mdm Автор
07.10.2023 14:59Qt_5.12' not found - Странно. Я прописывал в требованиях к пакету предварительную установку QT5. Попробуйте sudo apt-get install qtbase5-dev
big-mdm Автор
07.10.2023 14:59Если не трудно, наберите в терминале qmake --version
Очень интересно знать версию QT в системе.
ZigFisher
07.10.2023 14:59zig@dolphin:/opt/IMSProg$ qmake --version QMake version 2.01a Using Qt version 4.8.7 in /usr/lib/x86_64-linux-gnu zig@dolphin:/opt/IMSProg$ qmake -qt5 -v QMake version 3.0 Using Qt version 5.5.1 in /usr/lib/x86_64-linux-gnu
big-mdm Автор
07.10.2023 14:59+2Без гуев есть SNANDer - https://github.com/McMCCRU/SNANDer и ch341a Prog https://github.com/setarcos/ch341prog для SPI
disik
07.10.2023 14:59Раз уж предлагаете скачивать бинарники, предлагайте и AppImage
big-mdm Автор
07.10.2023 14:59Appimage лежит здесь: https://github.com/bigbigmdm/IMSProg/tree/main/release/build
Lampus
07.10.2023 14:59Покопавшись в коде я обнаружил ошибку в программе SNANDer при
инициализации программатора в режиме работы с микросхемами серии 24Сxxx.
Потом я нашел еще одну ошибку с порядком следования байт при записи и
чтении микросхем MicroWire - 93xxx в 16-битном режиме. Так я понял, что
придется писать программу самому.Плюс вам за то, что отправили Pull Request-ы с обновлением базы данных чипов в SNANDer, но вот обоснование необходимости писать свою программу какое-то слабенькое. То есть в существующем решении проблема была найдена и локализована, было понятно как её поправить. Признайтесь честно, реальная причина "потому что могу", тут никто не осудит %)
big-mdm Автор
07.10.2023 14:59Согласен, обоснование слабенькое. Просто очень хотелось иметь программу с графическим интерфейсом и внешней редактируемой базой микросхем, лишенную недостатков того, что есть в наличии. Возможно, неточно выразился.
truthseeker
Ого, какой большой труд вы проделали! Спасибо вам, за труд. И за то, что сделали программу открытой.
А я ради подключения этого программатора windows запускал периодически. Так ещё он капризный, нужно отключать проверку цифровых подписей, чтобы программатора драйвер корректно установился в Windows 10, иначе программатор после установки драйвера не работает. Каждый раз приходится в Windows извращаться, как нужно где-то драйвер для программатора накатить.
big-mdm Автор
На 4pda можно найти китайские подписанные драйвера, кажется. Хотя, возможно, я с EZP2019 путаю.
truthseeker
Действительно, нашёл только что. Спасибо вам за наводку! А я мучался с не подписанными, несколько лет, и даже не знал о подписанных дровах, хотя на 4pda периодически захожу. Не внимательный, дрова с подписью как-то упустил из виду...
SalityGEN
Я встречал чипы 25 серии с двумя секторами памяти, основной и OTP, вроде это было в чипах en25qh64 и qh64a-104hip
Шьются они через программу - Neo Programmer
Ваша программа сможет так же? У меня просто под рукой нету этих чипов, так бы сам попробовал. Спасибо.
big-mdm Автор
Надо проверять. Пока не знаю.
big-mdm Автор
Я тоже windows запускал только ради программатора и разлочки USB-4G-свистков от оператора. Кстати HUAWEI calculator я также перетащил в Linux. Сейчас жду с Али программатор на CH347 - по виду такой-же, но обещают гораздо выше скорость чтения/записи.
YDR
на CH352 тоже неплохо работает, если что.
big-mdm Автор
EZP2019 - EZP2025 полностью закрыт, исходников нет. Связывался с китайскими производителями с просьбой дать код, сказали, что подумают и пропали. А описание CH552 без программы, залитой в него бесполезно.