IMSProg - universal i2c / SPI / MicroWire linux programmer for CH341a devices

Presentation:
I would like to present you IMSProg linux program with graphical interface for CH341a programmers, which allows you to read and write data into 24Cxxx, 25xxx, 93xxx, 95xxx series chips.

The program consists of two independent modules - the programmer itself and the chip base editor.

The program itself detects SPI chip and loads its parameters from the database, any parameter can be changed manually. The program allows you to split the binary image of a chip into parts and write them separately.

The hex editor search form allows you to search the dump not only for numeric and text information, but also for archive headers, images, BIOS, UEFI, etc.

The i key in the program brings up a form showing the slot for installing the chip and adapter into the CH341a programmer.

The program interface supports English, Spanish, German, Chinese, Spanish and Russian languages. It is determined by the language of the current linux locale.

Detailed instructions on how to build the program from source code and how to use the program are available on GitHub and I won’t duplicate them here.

You can also download the DEB-package and RPM-package.

The chip database is regularly updated and today contains about 400 positions. I will be glad to receive any criticism and suggestions for improving the interface of the IMSProg program. Please test the operation of different chips with my program.

History of creation:

For a long time programs for СР341a devices were written only for the Windows platform. Only FlashRom for SPI Flash, ch341aProg for i2c EEPROM were created for the Linux platform.

Then came SNANDer - the first console universal utility for 24xxx/25xxx/93xxx chips. I got excited about the appearance of this program and even wrote a startup script for it.

But a while back I was surprised - I was throwing away every other I2C chip due to the inability to read and write them. It turned out that during reading and writing the SDA pin is less than 1.5 volts. I thought the CH341a programmer was faulty. I put a resistor between the power pin and the SDA pin. The SDA level became higher. The rejected chips began to work. That said, my first i2c chip program worked without any resistor. After that, I found a bug in the SNANDer program. That’s how I knew I’d have to write the program myself.

Here are the steps:

First step: I wrote a chip editor for the EZP2019 - EZP2025 programmer databases.

Next step: I wrote an SPI chip programmer using Setarcos “ch341 SPI c-programmer tools”, EZP2019 chips database format and QHexedit component.
It worked beautifully, but only for SPI NOR Flash chips.

Last step: I wrote the IMSProg program using modified SNANDer code, QHexEdit code, my EZP Chip Editor code and based on my CH341a_spi_programmer.

4 Likes

Thank you and congratulations on you app development, im sure that the community will appreciate your contribution, all the best to you.

Thank you! I want many people to use this program.

Thank you very much! Congratulations for your work! I was looking for software like this for Linux for a long time. I tested it and it worked like a charm!

1 Like

New form added:

1 Like

New function: edit status registers

My Debian/Ubuntu/Mint/MX repository at IMSprog : Mikhail Medvedev

sudo add-apt-repository ppa:bigmdm/imsprog
sudo apt update
sudo apt install imsprog

New in version 1.2.1: Added support for INTEL HEX and ASUS CAP file format. The program can be run from the command line with the binary file name parameter. Linux file manager can be configured to open .bin files with IMSProg.

Version 1.3.1 with support 25xxx SPI EEPROM chips

Added support 25xx SPI EEPROM chips:

  • ATMEL
    AT25010, AT25020, AT25040, AT25080, AT25160, AT25320, AT25640, AT25128, AT25256, AT25F512, AT25F1024
  • MICROCHIP
    25AA010, 25AA020, 25AA040, 25AA080, 25AA160, 25AA320, 25AA640, 25AA128, 25AA256, 25AAF512, 25AAF1024, 25LC010, 25LC020, 25LC040, 25LC080, 25LC160, 25LC320, 25LC640, 25LC128, 25LC256, 25LC512, 25LC1024
  • ONSEMI
    CAT25C01, CAT25C02, CAT25C04, CAT25C08, CAT25C16, CAT25C32, CAT25C64, CAT25C128, CAT25C256, CAT25C512

Hi, can you add read write for gigadevice GD5FGQ4UB91G spi nand ?

I don’t have any immediate plans to support NAND flash memory chips yet.
At the moment I want to add support for the AT45DBxxx series.
Then I will try to add support for the CH347 high-speed programmer.
After that, we can think about NAND flash as well. Only there is a big problem - I don’t have these chips at home. I don’t even know where they are used.

  • Ver. 1.3.6 - Added a third status register to the SFDP form. Fix: after reading, the menu item go to address becomes inactive. Large size chip data in the database corrected.
  • Ver. 1.3.5 - Added function to HEX-editor to move the cursor to the entered address.
  • Ver. 1.3.4 - Bugfix: wrong read/write data in last addresses of M95040, AT25040, 25AA040, CAT25C04 chips.
  • Ver. 1.3.3 - Small refinements to the interface. Added chips to the database. Added status register form for 95xxx, 25xxx chips.
  • Ver. 1.3.2 - Bugfix: the hex editor plugin is not resized when the form is resized. Added dynamic polling of the programmer status (connected / not connected).

Packaging status