IMSProg — программатор для CH341a в Linux
Несколько лет назад я полностью перешел на 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, поскольку мне очень понравился простой формат базы микросхем у них.
Скрытый текст
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-пакет.
База данных микросхем регулярно обновляется и на сегодняшний день содержит около 400 позиций. Буду рад любой критике и предложениям по улучшению интерфейса программы IMSProg. Пожалуйста, протестируйте работу различных микросхем с помощью моей программы.
P.S.
Большое спасибо за ваши отзывы. Особенно интересно было предложение VT100 об использовании области Serial Flash Discoverable Parameter (SFDP) для добавления информации из микросхемы сразу в редактор базы данных.
К сожалению, эта область есть далеко не у всех микросхем и у разных фирм-производителей наблюдается большое разнообразие стандартов на ее содержание. Пока добавил в программатор форму, отображающую содержимое области SFDP в шестнадцатеричном формате и небольшой парсинг некоторых параметров.
Вызывается форма через меню <Программатор> -> <Информация о МС> (либо <Ctrl+P>).
Поскольку у меня весьма скромный набор микросхем, поддерживающий SFDP, буду рад комментариям с результатами тестирования этой функции.
С 24 ноября доступен репозиторий UBUNTU-Launchpad:
sudo add-apt-repository ppa:bigmdm/imsprog
sudo apt update
sudo apt install imsprog
С 22 ноября доступна установка на Arch:
sudo pacman -S imsprog
Программа размещена в репозиториях Fedora, ALT Linux и RED OS.
sudo dnf install imsprog