Программатор для прошивки биоса своими руками usb
Привет, Дзен! В этой короткой заметке хочу рассказать о двух самых простых программаторах, которые позволят перепрошить микросхему Bios на материнской плате ноутбука или системного блока.
Кроме того, один подписчик просил выкладывать фото каких-нибудь самодельных, сделанных своими руками, устройств. Выкладываю.
Энное количество времени назад, мне впервые потребовалось прошить микросхему биоса ноутбука. Естественно, я без проблем смог найти у друзей и коллег программатор. Но мне очень захотелось сделать для себя подобный и нужный гаджет самостоятельно.
Почитав различные форумы, пообщавшись с теми, кто успешно смог собрать такой программатор, мой выбор пал на BlackcatUSB.
Два самых простых USB программатора для прошивки BIOSПочему? Да все потому, что он довольно прост в изготовлении и про него было довольно много информации. Сразу отвечу некоторым комментаторам, которые тут же начнут хаять, что мол зачем собирать, выдумывать, можно за пару сотен взять с Али и не заморачиваться. Да, действительно, можно. И о таком программаторе я расскажу ниже. Но есть одно объяснение, которое многим диванным экспертам не понять. Это хобби, интерес и возможность решить поставленную задачу своими руками и мозгами.
После сборки и настройки вот что у меня получилось.
Два самых простых USB программатора для прошивки BIOSДа, вид не презентабельный, согласен, но этот программатор работает до сих пор и без проблем прошивает SPI 25 серии и некоторые другие. К тому же, его единственная задача это стабильно работать и выполнять свою функцию, а не красоваться на полке под стеклом.
Два самых простых USB программатора для прошивки BIOSОсновой для такого программатора служит микроконтроллер AT90USB162. Эта микросхема уже содержит в себе USB-загрузчик, что позволяет сделать его первоначальную прошивку по шине USB.
А вот теперь, для тех, кто не хочет собирать самостоятельно, немного расскажу о недорогом программаторе CH341A, стоимость которого составляет не более 300 рублей.
Два самых простых USB программатора для прошивки BIOSДанный программатор поддерживается операционными системами Windows и позволяет работать с микросхемами 25, 26 серии SPI FLASH и 24, 25 EEPROM.
Два самых простых USB программатора для прошивки BIOSЕстественно, что для закрепления микросхем в программаторе, требуется докупить дополнительные колодки под разные типы, ведь припаиваться проводками не совсем удобно).
Хотелось бы отметить еще один момент. Во многих современных ноутбуках используются SPI FLASH с пониженным напряжением питания. Поэтому, для прошивки требуется переходник с 3,3 вольта на 1,8 вольта. Все это есть в продаже, и стоит копейки.
Надеюсь, что начинающим ремонтерам и просто интересующимся будет интересно).
Понадобилось мне тут вычитать eeprom приборки VDO, то что он легко вычитывается KKL шнурком я в курсе :-) Программатора для этих флешек у меня не было. Полазив по сусекам нашел программатор USBASP, это программатор AVR микроконтроллеров, стоит всего 90 руб. Вспомнил что где то читал что его легко превратить в программатор spi, i2 и microwire флешек банально сменой прошивки. Эти флешки используются в приборках и практически во всех блоках управления двигателем. То что надо, перекрывает почти все мозги и приборки.
Вообще считать – записать eeprom обычно надо для того что б вытянуть пароль иммо, отключить иммо, скорректировать в мозгах вин номер и логин иммо, восстановить eeprom после не удачной прошивки и окирпичивании устройства… В общем полезный зверек, тем более не везде можно это сделать софтово.
Для начала берем вот такой программатор.
Смотрим что он поддерживает в интересующем меня диапазоне машин. А поддерживает практически все :-) Все приборки и почти все блоки управления… Имею ввиду установленные в них микросхемы памяти.
Вот допустим модели мозгов Audi, зелеными галочками пометил что поддерживает.
Приступим к работе с ним.
У меня задача вытянуть eeprom из приборки VDO, узнать пароль иммо и при необходимости залить вытянутый дамп в другую сохранив калибровки стрелок и привязанные ключи. Почему я не делаю это софтово? Очень просто, приборка радостно сгорела с дымком и все такое. Кирпич в общем :-) В таких вот случаях без программатора не обойтись.
Берем приборку. Как разобрать писать не буду и так все знают :-)
Вон она. Флешка с eepromом. 93С86…
Выпаиваем ее по быстрому…
Подключаем в соответствии со схемой. Схема разнится от типа флешки. У меня в VDO стоит microwire 93LС86… Значит по второй схеме…
Так как панельки у меня под SMD8 нет (заказал), то сделаю по быстрому переходник.
Возьму кусочек шлейфа, разделаю, нанесу цветовые метки.
И банально подпаяю, благо делов на минуту… Не очень фотогенично зато надежно :-)
Напряжение питания выбираем в соответствии с даташитом на микросхему. Программатор выдает или 3.3v или 5v, переключается перемычкой. В моем случае любое, так как микросхема может работать в диапазоне 2.5-5.5 вольт.
Теперь можно подсоединить к компу и начать процесс считывания.
Запускаем программу. Смотрим что б был выбран программатор usbasp. Выбирает тип микросхемы с которой будем работать.
Далее все просто. Нажимаем считать. Идет процесс. Все считано.
Вот почти и все. EEPROM считан. Но есть одна тонкость, считан он правильно но не совсем. При чтении прошивки из EEPROM 93с86 байты в словах перевернуты. Например первое слово 02 03 а должно быть 03 02. Так как проект этого софта не коммерческий то он очень простой и в нем нет опции intel/motorola с которой сразу правильно. Но это не беда :-) Сохраняем файл.
Теперь запускаем редактор WinHex, открываем нем файл нашего eeprom и делаем ему свап.
Вот так:
Правка – Модифицировать данные
В менюшке выбираете «Обратный порядок байт», блин, у меня кота байтом зовут :-) Ставим 2 байта и жмем «ОК»
Вот и все, наш eeprom в нужном нам виде предстает :-)
Ну и сохраняете его. В случае с приборкой VDO иммо3 можете на вин номер ориентироватся, если он стал правильно отображается то все правильно мы сделали
Теперь пароль на иммо вытянуть надо. Тут можно руками и все такое но на много проще сделать это с помощью всеми любимой программы, а именно VAG EEPROM Programmer.
Открываете полученный файл eeprom и в нем и сразу все что надо видите :-)
Можно или ручками перенести данные в новую приборку а можно этот дамп залить со всеми калибровками и шкаламии ключами. Ну и пробег можете подкрутить пока законом не запретили ;-)
Вот так все просто :-)
Написать данный разжеванный материал меня сподвиг собственный недавний опыт, а так же довольно скудная и размазанная по интернетам инфа по необходимому вопросу
Существует 3 основных способа восстановления запоротого BIOS
1. Восстановление программными средствами самой мат.платы.
Современные модели материнок (у Гигабайта последние 3 года на мейнстримовых и топовых точно) на плате распаяно сразу 2 микросхемы BIOS, в случае неудачного обновления BIOS загрузится с резервной микрухи, а позже зальет копию в поврежденный. У некоторых моделей нет возможность восстановления поврежденного BIOS и в случае смерти первого просто начинает работать второй за место него, соответственно после смерти второго мать уже не запустится
Еще есть возможность восстановления из bootblock'а, но работает если BIOS умер не окончательно и бутблок все еще жив и попытке запустить систему он обнаруживает кривую сумму биоса. В таком случае он пытается считать BIOS с HDD, или флоппа. Некоторые платы (у Гигабатов такая фича встречается) пишут дубль BIOS на HDD, который к ним подключают самым первым, соответственно для восстановления этот диск можно подключить. Для восстановления с флоппа достаточно записать прошивку с правильным названием на дискету, она будет обнаружена и восстановлена. Жизнеспособность бутблока можно определить по сигналам (световым и звуковым) с подключенного флоповода, если флоп подает признаки жизни, значит мы легко отделались
2. Восстановление методом горячей замены иди hotswap. Работает только на мамках, где BIOS не впаян, а сидит в сокете и его можно подцепить. Т.е. надо найти другую рабочую плату с подобным BIOS, т.е. чтобы кровать была такая же и желательно чипы были общего или одного из аналогичных семейств, тогда процедура точно прокатит. На плате с живым BIOS заранее делаются удобства для вырывания чипа с кровати - нитки, изолированная проволока и т.п. если нет специальных щипцов, плата включается заходим в DOS (или фирмовую утилиту платы) для обновления BIOS, вырываем BIOS, вставляем мертвый и зашиваем BIOS, если появляются предупреждения о несовпадении контрольных сумм, то их игнорим, т.к. бояться нечего - родной BIOS лежит отдельно. Затем система отключается, в каждую плату возвращаем свою микросхему и проверяем работоспособность. Данный метод разве что не прокатит, если микросхемы впаяны в платы, горячая замена не получится, можно конечно рискнуть и отпаять BIOS на работающей плате - но это очень рискованно - можно остаться с 2мя уже окончательно мертвыми платами, причем дохлая уже будет электроника, а не программная часть
3. Восстановление на программаторе. Этот способ универсальный, т.е. прошить можно любую микросхему в любом типе корпуса. Если микруха припаяна к плате, то снимаем ее и напаиваем на плату программатора или используем специальные панельки. Безусловно на одном программаторе можно прошить ограниченное число микросхем, но это обычно касается простых программаторов, более "взрослые" являются действительно универсальными, но стоят они уже не 5 копеек и приобретаются в основном для потокового ремонта, а не домашнего использования с целью восстановления пары плат. Тем не менее данный способ универсальный, он полностью заменяет и расширяет первые 2 способа, а когда они не работают, то это единственный выход. Способ горячей замены это даже искусственный метод, который был обнаружен опытным путем благодаря унификации производителями элементов плат. Об одном из простых "домашних" программаторах я и хочу рассказать.
Суть процесса
На мою удачу микросхемой BIOS была MX25L4005APC-12G - 4 мегабитная микруха в DIP корпусе. Т.е. ее даже отпаивать не пришлось. BIOS версии 1.0 лежал на сайте производителя отдельным файлом как раз на 512kb (4Mbit/8=512Kb), т.е. задача до банальности проста - сваять программатор, поставить на него микруху и зашить! К чему я и решил приступить
Данная микросхема SPI типа, что позволяет прошить ее элементарным программатором через LPT порт. В нете был найден соответствующий программатор сразу с ПО для его использования, называется он SPIpgm, т.е. SPI Programmator, скачать можно здесь. Элементарнейшая схема из 4х резисторов, конденсатора и сокета на 8 пин по желанию. Ограничением его является собственно ограниченный список поддерживаемых микросхем - они должны быть 8pin и быть SPI типа
Программатор поддерживает очень много микрух, вот что заявлено для последней на момент написания материала версии 2.1:
AMIC
A25L05PU/PT (64kB), A25L10PU/PT (128kB), A25L20PU/PT (256kB), A25L40PU/PT (512kB), A25L80PU/PT (1MB), A25L16PU/PT (2MB), A25L32PU/PT (4MB), A25L64PU/PT (8MB), A25L512 (64kB), A25L010 (128kB), A25L020 (256kB), A25L040 (512kB), A25L080 (1MB)
Atmel
AT25F512B (64kB), AT25DF021 (256kB), AT26DF041 (512kB), AT25DF041A (512kB), AT26F004 (512kB), AT26DF081 (1MB), AT25/26DF081A (1MB), AT25DF081 (1MB), AT26DF161 (1MB), AT26DF161A (2MB), AT25DF161 (2MB), AT25DQ161 (2MB), AT25/26DF321 (4MB), AT25DF321A (4MB), AT25DQ321A (4MB), AT25DF641(A) (8MB)
EON
EN25B10 (128kB), EN25B20 (256kB), EN25B40(T) (512kB), EN25B80 (1MB), EN25B16 (2MB), EN25P32 (4MB), EN25P64 (8MB), EN25P128 (16MB), EN25F10 (128kB), EN25F20 (256kB), EN25F40 (512kB), EN25F80 (1MB), EN25F16 (2MB), EN25F32 (4MB), EN25F64 (8MB), EN25F128 (16MB)
ESMT
F25L004A (512kB), F25L008A/08PA (1MB), F25L016A/16PA (2MB), F25L32PA (4MB), F25L64PA (8MB), F25S04PA (512kB), F25L08PA (1MB), F25L016QA (2MB), F25L32QA (4MB), F25L64QA (8MB)
GigaDevice
GD25Q512 (64kB), GD25Q10 (128kB), GD25Q20 (256kB), GD25Q40 (512kB), GD25Q80 (1MB), GD25Q16 (2MB), GD25Q32 (4MB), GD25Q64 (8MB)
Intel
QB25F016S33B8 (2MB), QB25F032S33B8 (4MB), QB25F064S33B8 (8MB)
Macronix
MX25L512E (64kB), MX25L1005/1006E (128kB), MX25L2005/2006E (256kB), MX25L4005/4006E (512kB), MX25L8005/8006E (1MB), MX25L1605/1606E (2MB), MX25L3205/3206E (4MB), MX25L6405/6406E (8MB), MX25L12835E/12836E (16MB), MX25L25635E/25735E/25835E (32MB)
PMC
Pm25LV512(A) (64kB), Pm25LV010(AB) (128kB), Pm25LV020 (256kB), Pm25LV040 (512kB), Pm25LV080B (1MB), Pm25LV016B (2MB), Pm25LV032B (4MB), Pm25LV064B (8MB)
Spansion
S25FL004A (512kB), S25FL008A (1MB), S25FL016A (2MB), S25FL032A (4MB), S25FL064A (8MB), S25FL128P/129P (16MB), S25FL256S (32MB), S25FL512S (64MB), S25FL01GS (128MB)
ST Microelectronic/Numonyx
M25P05 (64kB), M25P10 (128kB), M25P10AV (128kB), M25P20 (256kB), M25P40 (512kB), M25P80 (1MB), M25P16 (2MB), M25P32 (4MB), M25P64 (8MB), M25P128 (16MB), M45PE10 (128kB), M45PE20 (256kB), M45PE40 (512kB), M45PE80 (1MB), M45PE16 (2MB), M25PX80 (1MB), M25PX16 (2MB), M25PX32 (4MB), M25PX64 (8MB), N25Q032A13E (4MB), N25Q032A11E (4MB), N25Q064A13E (8MB), N25Q064A11E (8MB), N25Q128A13E (16MB), N25Q128A11E (16MB), N25Q256A13E (32MB), N25Q256A11E (32MB), N25Q512A13G (64MB), N25Q512A11G (64MB), N25Q00AA13GB (128MB)
SST
Winbond
W25Q10B (128kB), W25Q20BV (256kB), W25Q40BV (512kB), W25Q80BV (1MB), W25Q16BV (2MB), W25Q32BV (4MB), W25Q64BV (8MB), W25Q128BV (16MB), W25Q256FV (32MB), W25X10 (128kB), W25X20 (256kB), W25X40 (512kB), W25X80 (1MB), W25X16 (2MB), W25X32 (4MB), W25X64 (8MB)
Материнские платы, которые имеют на себе BIOS в виде вышеназванных микросхем я не буду указывать по ясным причинам. Намного проще глянуть модель микрухи и посмотреть в этот список
Аппаратная часть
В моем случае нужная мне память оказалась в этом списке и я приступил к изготовлению прогера. Устройство очень простое (по схеме видно) и многие не заморачиваются в таких случаях с травлением платы, а собирают навесным монтажом "на коленке", т.к. программатор понадобится от силы пару раз. Я тоже не стал заморачиваться и сделал навесным. В итоге у меня не заработало) Хотя вроде бы ни где не ошибся, возможно капризничало из-за длины проводов или их сечения
Во второй раз уже решил "чтобы наверняка" запилить себе нормально, т.е. развел плату в SprintLayot 5.1 и сделал по технологии ЛУТ. Лудил сплавом Розэ. Последнее время мне нравиться его использовать, т.к. получается довольно быстро, просто и лужение происходит равномерным тонким слоем - высверленные отверстия не закрываются. Еще давно в посудном магазине по уценке купил за 30р эмалированную миску - удачное приобретение для таких дел) Наливаю в нее на половину воды, довожу до кипения, добавляю 1-2 ложки лимонной кислоты (работает как флюс и повышает температуру кипения, затем опускаю плату и 1-2 кусочка сплава. "Управляю" процессом 2мя палочками от мороженного, обёрнутыми с одной из сторон в ткань для растирания сплава по плате и удержания платы. После окончания процесса остатки сплава можно вынуть для последующего использования. Стоит сплав копейки (около 150р вроде), а хватает его при подобных затратах на годы). В общем это было такое лирическое отступление, теперь непосредственно скрин разведенной платы. Саму разводку платы в формате *.lay можно скачать здесь
Плату зеркалить не нужно, она уже "правильно" нарисована. Я когда делаю разводку, то представлю текстолит как бы прозрачным - так намного проще, по крайней мере мне
Необходимые ингредиенты:
- Резисторы 150 ом 0,125Вт x 4шт
- Емкостный конденсатор 1mF 16-63v x 1шт
- Сокет 8pin 7,62мм x 1шт или специальные зажимные панели под SMD чипы, в общем в зависимости от пациента
- Немного проводов, я использовал провода примерно 24AWG длинной 12см
- Макетная плата или текстолит и все необходимые принадлежности для его вытравки и лужения
- Штырьковые разъемы x 5шт
1. Мало контактов, всего 5шт, для того, чтобы тратить 20р на этот разъем и ставить его на такую крохотную плату. Намного проще вывести эти 5 контактов и воткнуть их в сам разъем
2. На современных платах уже не ставят полноценный LPT разъем, производители выводят штырьки на плате, к которому можно подключить внешний/внутренний адаптер и получить тем самым DM25-F, т.е. LPT. Таким образом сделав полноценный программатор на борту с DB25-M нам придется делать соответствующий разъем для платы или покупать адаптер отдельно, как советуют производители плат. У меня конечно есть такой адаптер ↓↓↓ , я его не покупал, делал сам из шлейфа под флопп и разъема DB25-F снятого со старого кабеля от принтера. Но тем не менее я не стал городить на программатор данный разъем просто потому что у меня его не было под рукой и еще по причинам п.1
Самодельный адаптер LPT для современных плат. IDE разъем флоппа отлично подходит под пинауты плат, вставил кусок зубочистки как ограничитель, чтобы наверняка не промахнуться
В итоге у нас должно получиться примерно следующее устройство:
Для питания программатора необходимо постоянное питание 3.3v, а так же внешняя масса. Я использую для этих целей внешний полноценный БП Gembird 400Вт. Он у меня вроде лабораторного БП, живую конфигурацию ему я бы не доверил в силу его качества) Достался он мне от одного хорошего человека - данный БП видимо не имеет достаточно реальной мощности и прежнему владельцу его не хватало, система работала очень не стабильно. Мне же этого бедняги для подобный вещей вполне достаточно)
У БП на разъеме 24пин замкнут зеленый провод на землю, что дает возможность его запускать в холостой ход, из этого же разъема я и беру 3.3v (оранжевый провод) и массу (черный) для программатора
Можно еще как вариант использовать батарейку BIOS она как раз на 3.3v, а землю (массу) взять с самого корпуса работающего БП
Еще один вариант - поставить какой-нибудь стабилизатор на 3.3v, например LM1117, на крайние контакты подаем 5v с USB и массу (точную распиновку не помню, данный стаб я использовал в другой своей статье про коннектор привода для X'360), из центрального у нас будет 3.3v. Nаким способом получаем питание с самого СБ, на котором прошиваем - можно подключить разъем USB или вывести 2 штырька для подключения опять же к контактам USB На самой плате предварительно посмотрев распиновку
Программная часть
После изготовления устройства можно приступить к тому, ради чего все это затевалось - к прошивке
Текущая версия SPIpgm 2.1 поддерживает все семейство настольных ОС Windows, linux и еще DOS. Я очень сомневался, что на Win7/Vista все заработает, уж очень прихотливы LPT программаторы к этой ОСи. тем не менее все совпало с заявлением разработчика. не забываем, что UAC необходимо отключить (у меня отключен и так "по умолчанию"). Выключаем полностью ПК, подключаем программатор, включаем и используем командную строку. С помощью оператора cd переходим в нужную директорию, где находится программатор. Т.к. мы находимся в среде Windows, то использовать надо spipgmw, spipgm используется в DOS и Win9x, однако spipgmw можно тоже использовать в Win9x. По скрину ниже видно, что проблем нет, программатор и софт прекрасно работают в современной среде, что встречается крайне редко в подобных задачах
Однако отмечу, что я шил в DOS, мне так привычнее) Чем проще ОС, тем она надежнее. Но я не агитирую переходить на нее полностью) Просто для таких вот делишек использовать DOS мне как-то интеерснее. По опыту работы с другими самопальными программаторами могу сказать, что в WinXP этот программатор без сомнения будет работать
Если же программатор не сможет опознать микросхему (смотрим скрин ниже), то она либо мертва, либо программатор собран не верно или не поступает питание, нет массы. Более вероятен второй вариант
Вот что ответит командная строка, если программатор собран не верно. Чип не опознается, т.е. неудача
Мутим DOS или "я не ищу легких путей"
DOS запилить себе не так сложно. Можно банально сделать загрузочную дискету средствами самой ОС Windows через форматирование дискеты и положить туда папку с программатором и новой прошивкой, загрузившись после BIOS (на рабочем ПК) в консоль используем программатор
Второй вариант - сделать DOS на диске или воспользоваться уже готовым образом DOS 6.22. Вот только сам программатор надо будет записать на отдельную флешку, т.к. если мы будем снимать дамп, то на диск он записаться не сможет, хотя если чтение не требуется, можно закатать прямо на диск с образом DOS
Третий вариант - создать загрузочную флешку, это самый удобный и современный на сегодня вариант. Хороший способ описан, например, здесь
Я еще могу порекомендовать воспользоваться проектом MultiBoot - мультизагрузочная флешка. В конце мы получаем очень функциональный инструмент на все случаи жизни, мощный такой реаниматор. DOS там тоже есть с поддержкой NTFS, длинных имен и прочего. Инструкция по созданию там присутствует, все очень удобно и легально
Будем считать, что DOS мы запустили (владельцам Linux это не нужно, для них есть SPIPGM файл без разширения) Заходим в командную строку, переходим в папку программатора. Чтобы узнать основные команды выполняем просто spipgm
В DOS все опозналось тоже без проблем
Основные программы, которые нам понадобятся:
spipgm /i - идентификация микросхемы в программаторе. Если программатор сделан и подключен верно, то микросхема (если она в списке выше) опознается и соответственно с ней можно будет дальше работать
spipgm /d dump.rom - чтение содержимого микросхемы в файл dump.rom
spipgm /e - полное стирание содержимого микросхемы, рекомендуется сделать перед записью
spipgm /p new.rom - прошивка, запись в микросхему данных из файла new.rom - целого и правильного файла прошивки для конкретной материнский платы, можно взять с сайта производителя или снять с другой микросхемы аналогичной платы
spipgm /u - анлок, т.е. разблокировка микросхемы для записи, если такая защита имеется
Итого для совершения задуманного с целью восстановления BIOS нам необходимо выполнить последовательность команд:
1. spipgm /i - идентифицируемся
2. spipgm /u - разблокируемся
3. spipgm /e - стираем микросхему с кривым содержимым
4. spipgm /p new.rom - зашиваем правильную прошивку
! Обращаю внимание, что если мы все делаем в среде Windows, то вместо spipgm пользуемся командой spipgmw
После этого вырубаем ПК через кнопку выключения и отключаем программатор
Внимание! Все манипуляции с портом LPT необходимо производить только с отключенным питанием платы. Т.е. перед тем как подключить или отключить что-нибудь от LPT необходимо полностью выключить БП, поставить переключатель БП в положение Off (или вынуть кабель) подождать 10сек (разрядятся конденсаторы) и только потом что-то подключать или отключать. Если не следовать этому простому правилу, то велик шанс остаться без LPT, он очень капризен к подобным вещам в силу своей незащищенности
Послесловие
Так же обращаю внимание, что данный метод подходит и для восстановления BIOS не только на мат.платах, но и на видеокартах, как ATI/AMD так и nVidia. Многие микросхемы, что указаны выше в списке совместимости устанавливаются так же и на видеокарты, вот только они всегда припаяны к видеокарте, поэтому для восстановления видях понадобится навык пайки SMD. Здесь обычно 2 варианта - отпайка микрухи и установка ее на заранее вытравленную площадку программатора или подпайка проводами на саму плату видеоадаптера
Надеюсь мой опыт поможет кому-нибудь сэкономить деньги и железки, ведь обращаться за подобными услугами в СЦ будет не совсем разумно - подобная плата на вторичном рынке сопостовима как раз со стоимостью ремонта, и поэтому надо либо восстанавливать самому, либо идти в магазин за новой. Если у меня появится возможность поковырять программатор и BIOS'ы с чипами 20 пин( в квадратных кроватях находятся), то материал будет дополнен. Благодарю за внимание
Когда-то давным-давно я писал пару статей о широко известном в узких кругах чипе 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 в дизайн своих устройств, т.к. его надежность при постоянном применении вызывает некоторые сомнения, а если возникнут вопросы, то задавать их будет некому, ведь даже сайт производителя чипа извне Китая открывается через раз.
Читайте также: