Несколько лет назад я полностью перешел на 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)


  1. truthseeker
    07.10.2023 14:59
    +6

    Ого, какой большой труд вы проделали! Спасибо вам, за труд. И за то, что сделали программу открытой.

    А я ради подключения этого программатора windows запускал периодически. Так ещё он капризный, нужно отключать проверку цифровых подписей, чтобы программатора драйвер корректно установился в Windows 10, иначе программатор после установки драйвера не работает. Каждый раз приходится в Windows извращаться, как нужно где-то драйвер для программатора накатить.


    1. big-mdm Автор
      07.10.2023 14:59
      +3

      На 4pda можно найти китайские подписанные драйвера, кажется. Хотя, возможно, я с EZP2019 путаю.


      1. truthseeker
        07.10.2023 14:59

        Действительно, нашёл только что. Спасибо вам за наводку! А я мучался с не подписанными, несколько лет, и даже не знал о подписанных дровах, хотя на 4pda периодически захожу. Не внимательный, дрова с подписью как-то упустил из виду...


      1. SalityGEN
        07.10.2023 14:59

        Я встречал чипы 25 серии с двумя секторами памяти, основной и OTP, вроде это было в чипах en25qh64 и qh64a-104hip

        Шьются они через программу - Neo Programmer

        Ваша программа сможет так же? У меня просто под рукой нету этих чипов, так бы сам попробовал. Спасибо.


        1. big-mdm Автор
          07.10.2023 14:59

          Надо проверять. Пока не знаю.


    1. big-mdm Автор
      07.10.2023 14:59
      +4

      Я тоже windows запускал только ради программатора и разлочки USB-4G-свистков от оператора. Кстати HUAWEI calculator я также перетащил в Linux. Сейчас жду с Али программатор на CH347 - по виду такой-же, но обещают гораздо выше скорость чтения/записи.


      1. YDR
        07.10.2023 14:59

        на CH352 тоже неплохо работает, если что.


        1. big-mdm Автор
          07.10.2023 14:59

          EZP2019 - EZP2025 полностью закрыт, исходников нет. Связывался с китайскими производителями с просьбой дать код, сказали, что подумают и пропали. А описание CH552 без программы, залитой в него бесполезно.


  1. CodeRush
    07.10.2023 14:59
    +1

    Полезный софт, спасибо.

    Тоже пользовался QHexEdit2 у себя в UEFITool, но он, к сожалению, очень слабо дружит с HiDPI-режимами. В итоге поискал альтернативы, и наткнулся на QHexView5, на который и перешел. Там тоже есть небольшие косяки, но зато с масштабированием проблем нет.


    1. big-mdm Автор
      07.10.2023 14:59

      Спасибо за наводку про QHexView5


  1. big-mdm Автор
    07.10.2023 14:59

    /


  1. big-mdm Автор
    07.10.2023 14:59

    Да, он уже ползет из Китая. Жду.


  1. aystarik
    07.10.2023 14:59

    а может перейти на ch347 -- там SPI побыстрее? https://github.com/aystarik/ch347_vcp


  1. big-mdm Автор
    07.10.2023 14:59

    Да, он уже ползет из Китая. Жду.


  1. VT100
    07.10.2023 14:59
    +4

    Поищите в сети описание "serial flash discoverable parameters" (SPI sfdp). Сможете наполнять базу информацией о секторах и т.п. прямо из ИМС.


  1. big-mdm Автор
    07.10.2023 14:59

    Очень интересно, спасибо!


  1. iamkisly
    07.10.2023 14:59
    +1

    Собранные пакеты это хорошо, но может быть возможно засунуть это дело в ppa или snap?


    1. big-mdm Автор
      07.10.2023 14:59

      Про ppa думаю, под Red Hat / Fedora / Centos можно использовать репозиторий РЕД ОС http://repo.red-soft.ru/redos/7.3/x86_64/updates/


      1. iamkisly
        07.10.2023 14:59
        +1

        Не знаю, может поможет. Я когда-то по этой инструкции делал https://assafmo.github.io/2019/05/02/ppa-repo-hosted-on-github.html менин там что-то пришлось переделывать, но незначительно


  1. ZigFisher
    07.10.2023 14:59
    +1

    Большое спасибо автору за проделанную работу
    Будем пробовать применять в нашем проекте https://openipc.org


    1. ZigFisher
      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)
      


      1. big-mdm Автор
        07.10.2023 14:59

        Qt_5.12' not found - Странно. Я прописывал в требованиях к пакету предварительную установку QT5. Попробуйте sudo apt-get install qtbase5-dev


        1. big-mdm Автор
          07.10.2023 14:59

          Если не трудно, наберите в терминале qmake --version

          Очень интересно знать версию QT в системе.


          1. ZigFisher
            07.10.2023 14:59

            zig@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
            


        1. ZigFisher
          07.10.2023 14:59

          Именно qtbase5-dev меня попросила система установить, при установке пакета


          1. big-mdm Автор
            07.10.2023 14:59

            У меня

            qmake --version
            QMake version 3.1
            Using Qt version 5.12.8 in /usr/lib/x86_64-linux-gnu

            Похоже, старый qmake использует qt4 а не qt5. Попробуйте его обновить sudo apt upgrade cmake



  1. LF69ssop
    07.10.2023 14:59
    +1

    А без гуев оно умеет?


  1. big-mdm Автор
    07.10.2023 14:59
    +2

    Без гуев есть SNANDer - https://github.com/McMCCRU/SNANDer и ch341a Prog https://github.com/setarcos/ch341prog для SPI


  1. disik
    07.10.2023 14:59

    Раз уж предлагаете скачивать бинарники, предлагайте и AppImage


    1. big-mdm Автор
      07.10.2023 14:59

  1. Lampus
    07.10.2023 14:59

    Покопавшись в коде я обнаружил ошибку в программе SNANDer при
    инициализации программатора в режиме работы с микросхемами серии 24Сxxx.
    Потом я нашел еще одну ошибку с порядком следования байт при записи и
    чтении микросхем MicroWire - 93xxx в 16-битном режиме. Так я понял, что
    придется писать программу самому.

    Плюс вам за то, что отправили Pull Request-ы с обновлением базы данных чипов в SNANDer, но вот обоснование необходимости писать свою программу какое-то слабенькое. То есть в существующем решении проблема была найдена и локализована, было понятно как её поправить. Признайтесь честно, реальная причина "потому что могу", тут никто не осудит %)


    1. big-mdm Автор
      07.10.2023 14:59

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