Flashrom ch341a как пользоваться linux

Обновлено: 03.07.2024

23 апр 2020, 21:16

Приветствую друзья! Сначала небольшая предистория. Я не сказать,что бы очень продвинутый пользователь linux, но уже созрел для понимания его преимущества перед виндой. В общем, давно хотел на ноуте с работы установить LM, но то времени не хватает, то еще что то. Но вот славакарантину время появилось, решил заняться. Но, проблема в том, что по работе я очень часто вынужден считывать/прошивать микросхемы 24сХХ. На домашнем компе через wine прогнал весь основной рабочий софт, все отлично работает, кроме одного. Это софт китайского программатора ch341. К сожалению, графических приложений для линукса нет, на этот программатор, было решено запускать софт через wine. Софт запускается, но программатор не видит. Насколько я понял он в винде работает по параллельному порту, начал копать в сторону драйверов для LM. Единственный вариант драйверов который нашел, не могу собрать. Очень надеюсь на вашу помощь, ребят. Не хочется оставаться на винде только из за какого то программатора.


/home/dexx/Загрузки/ch341-parport-master/CH341PAR_LINUX/driver/ch34x_pis.c:248:4: note: in expansion of macro ‘err’
err("%s - nonzero write bulk status received: %d", __func__, urb->status );
^


/home/dexx/Загрузки/ch341-parport-master/CH341PAR_LINUX/driver/ch34x_pis.c:286:2: note: in expansion of macro ‘dbg’
dbg("count %d,->bytes_read %d,->mNewlen %d,->mBuffer[0] %d,->[1] %d,->[2]%d,->[3]%d",count,bytes_read,mNewlen,mBuffer[0],mBuffer[1],mBuffer[2],mBuffer[3]);
^


/home/dexx/Загрузки/ch341-parport-master/CH341PAR_LINUX/driver/ch34x_pis.c:286:14: note: format string is defined here
dbg("count %d,->bytes_read %d,->mNewlen %d,->mBuffer[0] %d,->[1] %d,->[2]%d,->[3]%d",count,bytes_read,mNewlen,mBuffer[0],mBuffer[1],mBuffer[2],mBuffer[3]);


/home/dexx/Загрузки/ch341-parport-master/CH341PAR_LINUX/driver/ch34x_pis.c:286:2: note: in expansion of macro ‘dbg’
dbg("count %d,->bytes_read %d,->mNewlen %d,->mBuffer[0] %d,->[1] %d,->[2]%d,->[3]%d",count,bytes_read,mNewlen,mBuffer[0],mBuffer[1],mBuffer[2],mBuffer[3]);
^


/home/dexx/Загрузки/ch341-parport-master/CH341PAR_LINUX/driver/ch34x_pis.c:286:30: note: format string is defined here
dbg("count %d,->bytes_read %d,->mNewlen %d,->mBuffer[0] %d,->[1] %d,->[2]%d,->[3]%d",count,bytes_read,mNewlen,mBuffer[0],mBuffer[1],mBuffer[2],mBuffer[3]);


/home/dexx/Загрузки/ch341-parport-master/CH341PAR_LINUX/driver/ch34x_pis.c:286:2: note: in expansion of macro ‘dbg’
dbg("count %d,->bytes_read %d,->mNewlen %d,->mBuffer[0] %d,->[1] %d,->[2]%d,->[3]%d",count,bytes_read,mNewlen,mBuffer[0],mBuffer[1],mBuffer[2],mBuffer[3]);
^


/home/dexx/Загрузки/ch341-parport-master/CH341PAR_LINUX/driver/ch34x_pis.c:286:43: note: format string is defined here
dbg("count %d,->bytes_read %d,->mNewlen %d,->mBuffer[0] %d,->[1] %d,->[2]%d,->[3]%d",count,bytes_read,mNewlen,mBuffer[0],mBuffer[1],mBuffer[2],mBuffer[3]);


/home/dexx/Загрузки/ch341-parport-master/CH341PAR_LINUX/driver/ch34x_pis.c:302:3: note: in expansion of macro ‘err’
err("bulk_in_buffer malloc error");
^


/home/dexx/Загрузки/ch341-parport-master/CH341PAR_LINUX/driver/ch34x_pis.c:325:4: note: in expansion of macro ‘err’
err("usb_bulk_msg out error");
^


/home/dexx/Загрузки/ch341-parport-master/CH341PAR_LINUX/driver/ch34x_pis.c:333:14: error: passing argument 5 of ‘usb_bulk_msg’ from incompatible pointer type [-Werror=incompatible-pointer-types]
Bytes, &Returnlen, 10000 );
^
In file included from /home/dexx/Загрузки/ch341-parport-master/CH341PAR_LINUX/driver/ch34x_pis.c:28:0:
./include/linux/usb.h:1783:12: note: expected ‘int *’ but argument is of type ‘long unsigned int *’
extern int usb_bulk_msg(struct usb_device *usb_dev, unsigned int pipe,
^


/home/dexx/Загрузки/ch341-parport-master/CH341PAR_LINUX/driver/ch34x_pis.c:339:4: note: in expansion of macro ‘err’
err("usb_bulk_msg in error");
^


/home/dexx/Загрузки/ch341-parport-master/CH341PAR_LINUX/driver/ch34x_pis.c:373:3: note: in expansion of macro ‘err’
err("Data Overlimited,Must Under MAX_BUFFER_LENGTH");
^


/home/dexx/Загрузки/ch341-parport-master/CH341PAR_LINUX/driver/ch34x_pis.c:454:4: note: in expansion of macro ‘err’
err("%s - failed submitting write urb,line:%d",
^


/home/dexx/Загрузки/ch341-parport-master/CH341PAR_LINUX/driver/ch34x_pis.c:509:3: note: in expansion of macro ‘err’
err( "%s -failed to write submit urb,line:%d",
^


/home/dexx/Загрузки/ch341-parport-master/CH341PAR_LINUX/driver/ch34x_pis.c:611:3: note: in expansion of macro ‘err’
err("%s - failed to submit writing urb,error %d,line %d",
^


/home/dexx/Загрузки/ch341-parport-master/CH341PAR_LINUX/driver/ch34x_pis.c:611:3: note: in expansion of macro ‘err’
err("%s - failed to submit writing urb,error %d,line %d",
^


/home/dexx/Загрузки/ch341-parport-master/CH341PAR_LINUX/driver/ch34x_pis.c:652:2: note: in expansion of macro ‘dbg’
dbg("iLength is %d\n",iLength );
^


/home/dexx/Загрузки/ch341-parport-master/CH341PAR_LINUX/driver/ch34x_pis.c:652:19: note: format string is defined here
dbg("iLength is %d\n",iLength );


/home/dexx/Загрузки/ch341-parport-master/CH341PAR_LINUX/driver/ch34x_pis.c:655:3: note: in expansion of macro ‘err’
err(" The length input error");
^


/home/dexx/Загрузки/ch341-parport-master/CH341PAR_LINUX/driver/ch34x_pis.c:663:3: note: in expansion of macro ‘err’
err("copy error");
^


/home/dexx/Загрузки/ch341-parport-master/CH341PAR_LINUX/driver/ch34x_pis.c:734:3: note: in expansion of macro ‘err’
err("%s-failed submitting write urb in write_read", __func__);
^


/home/dexx/Загрузки/ch341-parport-master/CH341PAR_LINUX/driver/ch34x_pis.c:740:2: note: in expansion of macro ‘dbg’
dbg("mSave : %d, readtimes : %d, totallen : %d\n", mSave, readtimes, totallen);
^


/home/dexx/Загрузки/ch341-parport-master/CH341PAR_LINUX/driver/ch34x_pis.c:740:47: note: format string is defined here
dbg("mSave : %d, readtimes : %d, totallen : %d\n", mSave, readtimes, totallen);


/home/dexx/Загрузки/ch341-parport-master/CH341PAR_LINUX/driver/ch34x_pis.c:753:2: note: in expansion of macro ‘dbg’
dbg("The actual length of Read is %d", totallen);
^


/home/dexx/Загрузки/ch341-parport-master/CH341PAR_LINUX/driver/ch34x_pis.c:753:37: note: format string is defined here
dbg("The actual length of Read is %d", totallen);


/home/dexx/Загрузки/ch341-parport-master/CH341PAR_LINUX/driver/ch34x_pis.c:809:3: note: in expansion of macro ‘err’
err( "%s-error,cannot find device for minor :%d",
^


/home/dexx/Загрузки/ch341-parport-master/CH341PAR_LINUX/driver/ch34x_pis.c:818:3: note: in expansion of macro ‘err’
err("Get interface data error");
^


/home/dexx/Загрузки/ch341-parport-master/CH341PAR_LINUX/driver/ch34x_pis.c:893:6: note: in expansion of macro ‘err’
err("CH34x_FUNCTION_SETPARA_MODE Error");
^


/home/dexx/Загрузки/ch341-parport-master/CH341PAR_LINUX/driver/ch34x_pis.c:894:5: note: in expansion of macro ‘dbg’
dbg("------>SetParaMode - ch34x_arg %x", ch34x_arg);
^


/home/dexx/Загрузки/ch341-parport-master/CH341PAR_LINUX/driver/ch34x_pis.c:894:42: note: format string is defined here
dbg("------>SetParaMode - ch34x_arg %x", ch34x_arg);


/home/dexx/Загрузки/ch341-parport-master/CH341PAR_LINUX/driver/ch34x_pis.c:929:5: note: in expansion of macro ‘dbg’
dbg("------> length :%d",bytes_write);
^


/home/dexx/Загрузки/ch341-parport-master/CH341PAR_LINUX/driver/ch34x_pis.c:929:27: note: format string is defined here
dbg("------> length :%d",bytes_write);


/home/dexx/Загрузки/ch341-parport-master/CH341PAR_LINUX/driver/ch34x_pis.c:940:5: note: in expansion of macro ‘dbg’
dbg("Input number is %d\n",*((long *)ch34x_arg));
^


/home/dexx/Загрузки/ch341-parport-master/CH341PAR_LINUX/driver/ch34x_pis.c:940:27: note: format string is defined here
dbg("Input number is %d\n",*((long *)ch34x_arg));


/home/dexx/Загрузки/ch341-parport-master/CH341PAR_LINUX/driver/ch34x_pis.c:947:6: note: in expansion of macro ‘err’
err("Read Error");
^


/home/dexx/Загрузки/ch341-parport-master/CH341PAR_LINUX/driver/ch34x_pis.c:950:5: note: in expansion of macro ‘dbg’
dbg("Read bytes is %d", bytes_read);
^


/home/dexx/Загрузки/ch341-parport-master/CH341PAR_LINUX/driver/ch34x_pis.c:950:25: note: format string is defined here
dbg("Read bytes is %d", bytes_read);


/home/dexx/Загрузки/ch341-parport-master/CH341PAR_LINUX/driver/ch34x_pis.c:960:6: note: in expansion of macro ‘err’
err("Init Parallel Error");
^


/home/dexx/Загрузки/ch341-parport-master/CH341PAR_LINUX/driver/ch34x_pis.c:854:6: warning: unused variable ‘err’ [-Wunused-variable]
int err = 0;
^


/home/dexx/Загрузки/ch341-parport-master/CH341PAR_LINUX/driver/ch34x_pis.c:1012:3: note: in expansion of macro ‘err’
err("Out of Memory");
^


/home/dexx/Загрузки/ch341-parport-master/CH341PAR_LINUX/driver/ch34x_pis.c:1064:3: note: in expansion of macro ‘err’
err( "usb_get_dev error,disable to use this device" );
^


/home/dexx/Загрузки/ch341-parport-master/CH341PAR_LINUX/driver/ch34x_pis.c: In function ‘ch34x_fops_ioctl’:
/home/dexx/Загрузки/ch341-parport-master/CH341PAR_LINUX/driver/ch34x_pis.c:673:8: warning: ‘i’ may be used uninitialized in this function [-Wmaybe-uninitialized]
if( i * readtimes > MAX_BUFFER_LENGTH || mSave == 0 || readtimes == 0 )


/home/dexx/Загрузки/ch341-parport-master/CH341PAR_LINUX/driver/ch34x_pis.c:649:6: note: ‘i’ was declared here
int i, mSave; // the number of data in a block
^
cc1: some warnings being treated as errors
scripts/Makefile.build:288: recipe for target '/home/dexx/Загрузки/ch341-parport-master/CH341PAR_LINUX/driver/ch34x_pis.o' failed
make[2]: *** [/home/dexx/Загрузки/ch341-parport-master/CH341PAR_LINUX/driver/ch34x_pis.o] Error 1
Makefile:1655: recipe for target '_module_/home/dexx/Загрузки/ch341-parport-master/CH341PAR_LINUX/driver' failed
make[1]: *** [_module_/home/dexx/Загрузки/ch341-parport-master/CH341PAR_LINUX/driver] Error 2
make[1]: выход из каталога «/usr/src/linux-headers-5.3.0-46-generic»
Makefile:5: recipe for target 'default' failed
make: *** [default] Error 2

Уже третий день плюхаюсь. Если не получится, то так уж и быть придется на винде сидеть, пока не найду подходящего решения.


Когда-то давным-давно я писал пару статей о широко известном в узких кругах чипе FTDI FT232H и различных его применениях. Всем хорош был FT232H для DIY, но и у него нашлось несколько недостатков — относительно неприятный для ручной пайки корпус LQFP48 (для истинных любителей хардкора есть еще вариант в QFN48, паяй — не хочу, DIHALT не даст соврать), цена за оригинальный чип от 250 рублей, вероятность проблем с драйверами на поддельных чипах и некоторая функциональная избыточность, к примеру, поддержка JTAG нужна далеко не всем.

Решение, как обычно, пришло из Поднебесной, в которой после нескольких лет тупого передирания творческой адаптации чужих чипов наконец выпустили свой собственный конвертер USB-TTL — WinChipHead CH341A в корпусе SOP-28 (не DIP, но тоже паяется без проблем).

Производство чипа было начато году приблизительно в 2006, но в поле моего зрения он попал только в 2014, когда I2C/SPI-программаторы на этом чипе наводнили европейский EBAY, причем продавцы предлагали цену от 3,5 евро вместе с доставкой, что при средней стоимости хорошего китайского программатора вроде MiniPro TL866A в 50 евро оказалось настолько заманчивым предложением, что устоять не получилось.

Если вам все еще интересно, что умеет этот китайский чип за 1$ и стоит ли платить больше, если не видно разницы — прошу под кат.

CH341 — мультифункциональный конвертер из USB 2.0 в UART, EPP, I2C и SPI.
В режиме UART поддерживаются не только RX/TX, но и остальные сигналы управления, поэтому на чипе можно сделать USB-модем. В режиме параллельного порта реализован интерфейс EPP и эмуляция принтера (позволяющая подключать принтеры с интерфейсом LPT напрямую к USB без написания дополнительных драйверов). В последовательном режиме поддерживаются интерфейсы I2C и SPI.

Чип требует минимальной дополнительной обвязки (внешний кварц и несколько конденсаторов). Возможно использование внешней EEPROM для хранения пользовательских Vendor ID, Device ID и некоторых настроек чипа. Питание от 5 В (через встроенный LDO-регулятор), либо от 3.3 В напрямую.

Кроме CH341A в корпусе SOP-28 имеются два варианта в SSOP-20 — CH341T и CH341H, первый лишен поддержки SPI, в второй — I2C, поэтому рассматривать их в этой статье я не стану.

Описаны в статье про FT232H, повторяться не стану, только замечу, что на CH341A я проверял только работоспособность TX и RX, а не всего UART-интерфейса целиком, если вдруг найдутся какие-то внезапные подводные грабли, как это было с I2C на FT232H — напишите комментарий, буду рад добавить его в статью.

Для Linux имеются открытые проекты ch341prog (SPI) и ch341eepromtool (I2C), оба работают достаточно хорошо, но весьма неплохо было бы добавить поддержку обоих режимов в flashrom (гляди, xvilka, народные программаторы по цене грязи, а FR их до сих пор не умеет).

Я проверял работу программатора в Windows 8.1 x64 и Xubuntu Core 15.04 x64 на I2C-чипе OnSemi 24C16 и SPI-чипе Winbond W25Q64CV, работа с I2C занимает секунды (т.к. на чипе 2 Кб памяти и его, при желании, можно читать и писать чуть ли не руками), а вот восьмимегабайтный SPI-чип читается за минуту, а пишется за две, что, конечно, далеко не рекорд, но и не слишком долго для устройства за 5 долларов.

Если вам не нужна поддержка JTAG, десятков тысяч различных чипов и ICSP, зато нужно средство быстрого резервного копирования/восстановления прошивок различных устройств от роутеров до ПК и серверов — рекомендую программатор на CH341A к приобретению, свои 5 баксов он отрабатывает сполна. А когда его поддержку добавят в flashrom — станет совсем хорошо.

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

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




В комплект поставки входят сам программатор и переходная плата с двумя посадочными местами под микросхемы памяти в SOIC корпусе.


Они дублируют имеющиеся на нижней стороне платы программатора, и если на плату программатора микросхемы памяти нужно обязательно припаивать, на переходнике можно попробовать прижать микросхему прищепкой или держателем для бумаг.


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


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

Программатор выполнен на базе микроконтроллера «USB Bus Convert Chip» серии CH341A. Он рассчитан на физическое подключение к порту USB 2.0 компьютера, при подключении через хаб-удлиннитель программатор у меня работал с ошибками (может у меня хаб такой). Модуль программирования памяти собран на плате размерами 63х27мм (без учета USB разьема, с разьемом 84х27мм) из черного стеклотекстолита.


В распоряжении автора есть два экземпляра этого программатора, приобретенные в разное время, визуально их можно отличить по названию, один (более ранний) называется "CH341A Mini Programmer", второй "CH341A MinProgramment". Схемы одинаковые, различаются только цветом светодиода "RUN". На первом зеленый, на втором желтый.
Некоторые схемные обозначения на конкретном программаторе могут немного отличаться, например самовосстанавливающийся предохранитель F1 (fuse) может обозначаться как R1. В инете встречались упоминания, что в эту позицию иногда ставят резистор нулевого сопротивления т.е. перемычку. У меня как и положено на обоих стоят предохранители

400mA, сопротивление 0,92Ом, маркировка на корпусе «5». Также на плате часто отсутствует схемное обозначение резисторной сборки PR1. Более грамотное обозначение схемных элементов программатора можно посмотреть на изображении верхней стороны платы от магазина WAVGAT (на AliExpress):


Особых отличий от даташита схема не имеет, разве что на блокировочных конденсаторах по питанию сильно экономили. Питание 5V от USB подается на вывод 28, на выходе 9 внутреннего стабилизатора блокировочный конденсатор.


Т.к. на выводах ввода/вывода напряжение соответствует 5V уровням, в основном это устройство на 5V, правда в инете много упоминаний и о программировании им микросхем на 3.3V без каких либо ошибок и отрицательных последствий. Выход отдельного стабилизатора AMS1117-3.3 в схеме не задействован и просто выведен на выходной ZIF разьем и на контакт боковой гребенки SPI.
В даташите указан способ сделать уровни на выходах совместимыми с 3.3V. Для этого необходимо соединить выводы 28 и 9 и подать на них 3.3V, при этом внутренний стабилизатор просто не используется. Но при этом 3.3V уровни также будут на на переходнике USB <-> RS232, что иногда не приемлемо. Также на Ali сушествует другая версия этого программатора, скомпонованная немного по другому и выполненая на зеленом текстолите. Читал, что там на вывод 28 подается 3.3V от внешнего стабилизатора, но выводы 28 и 9 не соединены, и это нормально работает. В любом случае, уровни на переходнике USB <-> RS232 и здесь будут 3.3V.
Если планируется программирование флешек 1.8V через основной разьем необходимо дополнительно приобрести модуль 1.8V-adapter. Бонусом является то, что переделать его для поддержки и уровней 3.3V несложно, надо лишь закоротить вход/выход стабилизатора 1.8V дополнительным джампером.


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

Если для программирования будет использована боковая гребенка SPI, можно поступить проще. На Ali много предложений 4-канального двунаправленного преобразователя уровней на МОП транзисторах за очень небольшие деньги.


Работа этого преобразователя подробно описана в статье "Согласование логических уровней 5В и 3.3В устройств". Схема отличается от рассмотренной в статье только номиналами резисторов (сопротивление меньше — увеличено быстродействие и энергопотребление). За счет добавления дополнительных джампера J1 и двух кремниевых диодов, можно будет программировать как 3.3V, так и 1.8V флешки.


Программная часть (Software), драйвер.

Перед применением программатора необходимо инсталировать в Windows его драйвер(а), легко находятся в инете, я брал из архива программы AsProgrammer. Программатор поддерживает два режима, они переключаются аппаратно джампером J1. Применен интересный прием, при переключении джампера у чипа меняется Device ID на шине USB. Это вынуждает Windows найти подходящий по VID/PID драйвер и подключить его.
При джампере в положении «1-2» по VID_1A86&PID_5512 подгружается драйвер "USB-EPP/I2C… CH341A". Он создает в диспетчере устройств раздел "Interface" в который и устанавливается.


В этом случае чтение, верификация, запись чипов памяти должны осуществляться непосредственно через ZIF-панель программатора CH341A или через боковой разьем Р2 с интерфейсом SPI.

При джампере в положении «2-3» по VID_1A86&PID_5523 подгружается драйвер "USB-SERIAL CH341A". В диспетчере устройств найти его можно в разделе "Порты (COM и LPT)". Там же можно посмотреть и номер присвоенного СОМ порта.


При этом программирование может производиться только через интерфейс RS232 TTL на разьеме Р1 (там же где и джампер), если целевое устройство поддерживает такой способ (встроенный загрузчик или монитор).

Программная часть (Software), программа прошивальщик.


Программа не требует установки, включает в архив драйверы для обоих режимов программирования СН341А.
Log-файл работы программы с флешкой W25Q128FW, 16Мб, 1.8V через "1.8V-adapter":


Используется программатор: CH341
Sreg: 00000000(0x00), 00000010(0x02), 01100000(0x60)

Используется программатор: CH341
Читаю флэшку…
Готово
Время выполнения: 0:02:49

Используется программатор: CH341
Стираю флэшку…
Готово
Время выполнения: 0:01:03

Используется программатор: CH341
Записываю флэшку с проверкой…
Готово
Время выполнения: 0:24:45

5 вариантов BIOS) ни одного сбоя или ошибки.

Линуксоидам использовать стороннюю программу нет необходимости, стандартный прошивальщик Flashrom полностью поддерживает данный программатор (должен быть собран с поддержкой ключа "-ch341a").

WARNING: If the /WP or /HOLD pins are tied directly to the power supply or ground during standard SPI or Dual SPI operation, the QE bit should never be set to a 1.


Как по мне, проще сделать это на переходнике 1.8V-adapter, если задействовать его вторую незанятую половину разьема. Тем более при применении адаптера переделка на плате программатора становится бесполезной, порты у трансмиттера используются как однонаправленные.

Доработка 2. Увеличение кол-ва блокировочных конденсаторов по питанию.

Участник сообщества «AlexX1810» предложил добавить на плату программатора три блокировочных конденсатора 0.1 мкФ. По его словам улучшается стабильность работы программатора.
Если ориентироваться по схеме, первый конденсатор между 6-7 контактами разьема Р1 (5V), второй между 5-6 контактами разьема Р2 (3.3V), третий между 15-16 контактами ZIF панельки (7-8 контакты разьема I2C, 3.3V). Все впаяны со стороны контактов.


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

CH341A Programmer
версия: 1.3.4

Последнее обновление программы в шапке: 25.07.2020

Прикрепленное изображение

Прошивка мультиконтроллеров серий: KB9012,KB90xx,KB9022 Если у вас возникает ошибка при разархивировании архивов (7zip,zip

Прикрепленное изображение


Так же, в «Диспетчер устройств», Windows определил его как «Неизвестное USB-Устройство (сбой запроса дескриптора устройства)»,
а в свойствах, пишет об ошибке «Система Windows остановила это устройство, так как оно сообщило о возникновении неполадок.
(Код 43)» и конечно же, неправильно определен VID и PID (VID_0000&PID_0002).

Прикрепленное изображение


Открыв документацию на CH341A и посмотрев примеры принципиальных схем, можно увидеть что везде используется кварц на 12 МГц.

Прикрепленное изображение


А на самом программаторе CH341A, установлен кварц на 27.120 MГц

Прикрепленное изображение


Берем паяльник и выпаиваем неправильный кварц 27.120 МГц и впаиваем, новый на 12 МГц.

Прикрепленное изображение

Подключаем программатор CH341A к компьютеру и видим, что в ОС появилось новое устройство с вином VID и PID (VID_1A86&PID_5512)

Как подключить Atmega контроллер на примере USBAsp Если у вас не записывается чип но при этом считывается
Прошивает микросхемы 24 серии
Прошивает микросхемы 25 серии
Прошивает микросхемы 26 серии Поддерживаемые программатором CH341A Pro микросхемы 24 серии

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

CATALYST
CAT24C01 CAT24WC01 CAT24WC02 CAT24C02 CAT24C04 CAT24WC04 CAT24WC08 CAT24C08 CAT24WC16 CAT24C16 CAT24WC32 CAT24C32 CAT24WC64 CAT24C64 CAT24WC128 CAT24C128 CAT24WC256 CAT24C256 CAT24C512 CAT24WC512 CAT24C1024 CAT24WC1024

COMMON
24C01 3V 24C01 5V 24C02 3V 24C02 5V 24C04 5V 24C04 3V 24C08 3V 24C08 5V 24C16 5V 2406 3V 24C32 5V 24C32 3V 24C64 5V 24C64 3V 24028 5V 24C128 3V 24C256 5V 24C256 3V 24C512 5V 24C512 3V 240024 3V 24C1024 5V 24C2048 5V 24C2048 3V 24C4096 5V 24C4096 3V

FAIRCHILD
FM24C01L FM24C02L FM24C03L FM24C04L FM24C05L FM24C08L FM24C09L FM24C17L FM24C16L FM24C32L FM24C64L FM24C128L FM24C256L FM24C512L FM

HOLTEK
HT24C01 HT24LC01 HT24CD2 HT24LC02 HT24C04 HT24LC04 HT24C08 HT24LC08 HT24C16 HT24LC16 HT24LC32 HT24C32 HT24LC64 HT24C64 HT24C128 HT24LC128 HT24C256 HT24LC256 HT24LC512 HT24C512 HT24C1024 HT24LC1024

ISSI
IS24O01 IS24C02 IS24C04 IS24C08 IS24C16 IS24C32 IS24C64 IS24C128 IS24C256 IS24C512 IS24C1024

MICROCHIP
MIC24LC014 MIC24AA01 MIC24AA014 MIC24LC01B MIC24LC02B MIC24AA02 MIC24C02C MIC24AA025 MIC24AA04 MIC24LC04B MIC24LC024 MIC24AA024 MIC24LC025 MIC24LC08B MIC24AA08 MIC24LC16B MIC24AA16 MIC24LC32 MIC24AA32 MIC24LC64 MIC24FC64 MIC24AA64 MIC24FC128 MIC24AA128 MIC24LC128 MIC24AA256 MIC24LC256 MIC24FC256 MIC24AA512 MIC24LC512 MIC24FC512 MIC24AA1024

NSC
NSC24C02L NSC24C02 N5C24C64

RAMTRON
FM24CL04 FM24C04A FM24CL16 FM24C16A FM24CL64 FM24C64 FM24C256 FM24CL256 FM24C512

ROHM
BR24L01 BR24C01 BR24L02 BR24C02 BR24L04 BR24C04 BR24L08 BR24C08 BR24L16 BR24C16 BR24L32 BR24C32 BR24C64 BR24L64

ST
ST24C01 ST24C32 ST24C02 ST24C64 ST24C04 ST24C08 ST24C16

XICOR
X24O01 X24C02 X24C04 X24C08 X24C16

Поддерживаемые программатором CH341A Pro микросхемы 25 серии

AMIC
A25L512 A25L05P A25L10P A25L010 A25L020 A25L20P A25L40P A25L040 A25L080 A25L80P A25L016 A25L16P A25L032

ATMEL
AT25F512 AT25F512B AT25F512A AT25FS010 AT25F1024 AT25F1024A AT25F2048 AT25DF021 AT25F4096 AT25FS040 AT25DF041A AT25DF321A AT26DF321 AT25DF321 AT25DF641

COMMON
25X005 25X05 25X10 25X20 25X40 25X80 25X16 25X32 25X64 25X128 25X256 25X512 25X1024 25X2048

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

ES
ES25P10 ES25P20 ES25M40A ES25M40 ES25P40 ES25M80 ES25P16 ES25M80A ES25P32 ES25P80 ES25M16 ES25M16A

ESMT (только чтение)
F25L04UA F25L16PA F25L004A F25L32QA F25L08PA F25L32PA F25L008A F25L016A

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

MXIC
MX25V512 MX25L4005A MX25L1635D MX25L3237D MX25L6455E MX25L12845E MX25L512 MX25V4035 MX25L1605D MX25L3225D MX25L6408D MX25L1005 MX25V4005 MX25L1608D MX25L3205D MX25L6406E MX25L2005 MX25V8005 MX25L3235D MX25L3206E MX25L6445E MX25L8035 MX25L8005 MX25L3208D MX25L6405D MX25L12805D

NEXFLASH
NX25P10 NX25P20 NX25P40 NX25P80 NX25P16 NX25P32

NSHINE
MS25X05 MS25X16 MS25X10 MS25X32 NS25X20 MS25X64 NS25X40 MS25X128 MS25X80

PMC
PM25LV512A PM25LV016B PM25LV010A PM25LV020 PM25LV040 PM25LV080B

SAIFUN
SA25F005 SA25F160 SA25F010 SA25F320 SA25F020 SA25F040 SA25F080

SPANSION
S25FL004A S25FL032A S25FL040A S25FL064A S25FL008A S25FL128P S25FL160 S25FL129P S25FL016A S25FL128A

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

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

Читайте также: