Когда-то давным-давно я писал пару статей о широко известном в узких кругах чипе 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 — напишите комментарий, буду рад добавить его в статью.

Готовые изделия


Китайская промышленность предлагает миллион и один вариант универсального I2C/SPI-программатора на этом чипе, один другого дешевле.

Доставшийся мне за 3,5 евро вариант, по заверениям его производителя умеет программировать чипы серий 24хх (I2C) и 25xx (SPI), которые предполагается вставлять в ZIF-сокет (если они в корпусе DIP-8-300), либо прижимать/припаивать к посадочной площадке на обратной стороне платы (если они в SOIC-8 или SOIC-16), либо подключать проводами. На гребенку выведены только UART и SPI, а I2C придется брать из ZIF-сокета, если нужен (эта недоработка устранена в более новых версиях, но они дороже).


Схема программатора отличается от референсной из даташита только использованием внешнего LDO-регулятора вместо встроенного, видимо, встроенный оказался не очень надежным. На моем экземпляре сэкономлено на всем подряд, и кроме CH341A на плате 2 светодиода (Power и Run), 2 резистора, 5 конденсаторов (2 для кварца и 3 для LDO-регулятора), кварц на 12 Мгц, LDO-регулятор AMS1117 на 1 А и ZIF-сокет на два чипа в корпусе DIP-8-300. Из настроек имеется единственный джампер, переключающий программатор между I2C/SPI и USB-UART, при этом у него меняется Device ID.


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

Для программирования в Windows используется китайский софт авторства некоего SkyGz, который большинством продавцов с EBAY распространяется нелегально, но работать от этого не перестает. Вот ссылка на него, только не забудьте потом покормить попугая-матершинника и поправить повязку на глазу.

Для 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 в дизайн своих устройств, т.к. его надежность при постоянном применении вызывает некоторые сомнения, а если возникнут вопросы, то задавать их будет некому, ведь даже сайт производителя чипа извне Китая открывается через раз.

Спасибо читателям за внимание, и пусть ваши прошивки никогда не падают.

Комментарии (11)


  1. Gordon01
    16.07.2015 06:29
    +1

    А подскажите софтину, чтобы читать/писать 24cXX с помощью ft232


    1. CodeRush Автор
      16.07.2015 07:41

      Можно попробовать TinyBitBang, но в ней I2C реализован через ногодрыг, и потом работает медленнее, чем аппаратные реализации, но зато даже на FT232RL и прочих копеечных FTDI'шках без MPSSE.


  1. SamKrew
    16.07.2015 09:28

    А что там с драйверами под OS X?


    1. CodeRush Автор
      16.07.2015 09:37

      В наличии с сайта производителя или отдельно (нужно будет включить kext-dev-mode в 10.10), упомянутые в статье утилиты ch341* должны собираться и работать и в OSX, но я этот момент не проверял.


  1. drsmoll
    16.07.2015 09:48

    на x64 системы драйвер без цифровой подписи, поэтому для установки драйверов на x64 в стартовом меню необходимо выбрать соответствующий пункт.


    1. CodeRush Автор
      16.07.2015 10:21

      Драйвер из Windows Update уже подписан, так что это не обязательно, в случае если загрузка драйверов из сети не отключена.


  1. Tihon_V
    16.07.2015 11:54
    +1

    Только вчера такой приобрел :)
    Нужно было на работе удалить пароль с UEFI на ПК (остался от предыдущего админа). Свои 170 грн — он уже оправдал.


  1. DeSharky
    19.07.2015 19:53

    Еще работу с флешками фирмы MX поправили бы — вообще бесценный программатор был.


    1. CodeRush Автор
      19.07.2015 20:05

      А что с ними, номера команд отличаются от общепринятых?
      Если так, что можно модифицировать код проекта ch341prog и выслать pull request. А еще лучше написать ребятам из проекта flashrom о том, что очень хотелось бы видеть этот чип в списке поддерживаемых, есть шанс, что они услышат.


      1. DeSharky
        19.07.2015 21:03

        Чипы поддерживаются, но ооочень долго пишутся, проблема известная, но что-то не исправляют.


  1. krezalis
    04.08.2015 13:03

    Не подскажете где можна скачать CH341A.exe без трояна RDN/Generic.dx!dqv. PS: McAfee на корпоративном компютере.