Замори секретаршуДолин Сергей (dlinyj@real.xakep.ru) Хакер, номер #114, стр. 102 Клавиатурное западлоТебя бесит твой начальник или училка информатики? Полагаю, ты многократно думал над тем, как бы похитрее прикольнуться над кем-нибудь из своих знакомых, работающих за компьютером. Боянистая тема с рабочим столом уже неинтересна. Но есть вариант более действенный и болезненный – при котором долго можно созерцать «жертву», пытающуюся хоть как-то исправить ситуацию. КонцепцияИтак, что же за хитроумное устройство мы будем ваять? По сути, эмулятор клавиатуры. Помнишь, в свое время я писал о снифере клавы – так вот, это будет обратный девайс. Все осложняется тем, что в разрыв клавиатуры устройство поставить достаточно сложно, поэтому мы будем использовать самый распространенный на сегодняшний день интерфейс – USB. Благо, производители данного стандарта предусмотрели подключение к нему HID-устройств (HID – Human Interface Devices – дословно можно перевести, как устройства сопряжения с человеком). Как известно к компьютеру можно подключить громадное количество мышек и клавиатур, и конечный пользователь этого не заметит.
Поскольку все лучшее придумано за нас, я начал рыскать на просторах инета в поисках инфы и наткнулся на весьма любопытный ресурс: http://macetech.com/blog/node/46, где как раз и собрано такое устройство. Забегая вперед, скажу, что автор девайса мило умолчал про некоторые моменты и повторить действия по английской версии у тебя не выйдет. Но в статье я приподниму завесу тайны и расскажу все тонкости создания этого устройства. Оно получится миниатюрным – в виде маленькой флешки, состоять будет из одного контроллера и минимума обвеса. И главной его задачей будет периодически, раз в несколько минут, активировать клавишу <Caps Look>. «Почему именно капслука?» - спросишь ты. Отвечу: ты вполне можешь дописать в прошивку, написанную на языке Си, необходимые сканкоды некоторых клавиш или даже целые комбинации – например <Alt-F4>. Сами сканкоды можно почерпнуть из моей статьи про логгер клавиатуры. ИсходникиПро детали, необходимые к проекту, стоит сказать отдельно. Все упирается в твои навыки. Если ты великолепно владеешь лазерно-утюжной технологией, о которой мы тоже неоднократно писали, и прекрасно паяешь, то я тебе порекомендую сделать плату как на том сайте, дабы получить максимальную миниатюрность. Однако никто не гарантирует работоспособности (поскольку все сделано не совсем по стандарту), и на некоторых компьютерах устройство может и не работать. Я решил идти по пути наименьшего сопротивления и наиболее быстрой сборки.
Схему я несколько модифицировал, ознакомившись с комментариями к статье и посмотрев аналогичные схемы, которые работают более надежно. В общем, чтобы повторить мою реализацию тебе понадобятся:
Если ты не уверен в своих силах или твои руки дрожат от спиртного в крови, можно использовать и выводные резисторы мощностью 0,125 ват, но тогда наш чудо-девайс выйдет уж слишком громоздким и брутальным, поэтому я порекомендовал бы потренироваться в пайке SMD-компонентов. Стабилитроны желательны – без них, конечно, будет работать, но работа будет зависеть от фазы луны, пятен на солнце и станет весьма нестабильной. Если ты очень крутой, то можешь отказаться и от резисторов в 68 Ом, а вместо резистора на 2,2 кОм поставить на полтора. Однако тут велик риск, что работать ничего не будет. На деле, из всего перечисленного тебе нужно купить только микроконтроллер. Резисторы, хоть и выводные, можно найти в старой USB-клавиатуре, и пусть тебя не смущает тот факт, что номиналы их могут отличаться от заявленных мною в два раза. Например, мне попались резисторы вместо 68 Ом – 32 Ома и вместо 2,2 – 1,5 кОм. Производители клавиатур тоже не всегда блюдут стандарты. Для монтирования всей схемы тебе понадобится провод. Кстати, идеально подходит моя любимая витая пара.
Из инструмента тебе, естественно, потребуется паяльник, пинцеты для резисторов, флюс-гель, ножницы по металлу и обычная зажигалка. РеализацияНу-с, перейдем от слов к делу. Для начала мы отпаяем разъем USB от старой флешки. Это можно сделать с помощью промышленного фена или газового паяльника, но за неимением оных подойдет и обычная зажигалка. Аккуратно держим флешку плоскогубцами и греем ее пламенем зажигалки с двух сторон. Лично я держал прямо в огне. Только нужно быть внимательным, чтобы в самом разъеме флешки не потекла пластмасса. Как только припой расплавится, легким встряхиванием руки отделяем плату флешки от разъема. После прикидываем расположение деталей на нашей макетной плате.
Берем ножницы по металлу и легко, прямо по дырочкам, вырезаем нужный кусок. У меня он получился размером примерно 18х35 мм. По длине – оказалось с избытком. Но мельчить я тоже не рекомендую, особенно если паяльник берешь в первый раз. Теперь разгибаем широкие края разъема, чтобы они не мешали лечь ему прямо на плату, и запаиваем все четыре контакта на каждую дырочку макетки. Возможно, придется снизу напильником подпилить пластмассовые выступающие части. Думаю, ты сам догадаешься, какие. Затем заливаем широкие контакты припоем и получаем плату, уже очень похожую на разобранную флешку. После этой процедуры впаиваем панельку под наш микроконтроллер. В принципе, можно пожмотиться и впаять сразу контроллер. Но в случае неудачной прошивки его придется выпаивать заново. Да и как оказалось, гораздо проще собрать отдельный программатор, чем каждый раз припаиваться к микросхеме. Обрати внимание, как расположится контроллер. Его ключ (обычно обозначен точкой или выемкой), который показывает нахождение первой ножки, направлен в противоположную сторону относительно разъема USB. Нумерация выводов микросхемы, если смотреть сверху, начинается от ключа и идет против часовой стрелки. Вообще, такие вещи лучше всегда уточнять в мануалах на микросхему.
Резистор на 2,2 кОм впаивается между первой и второй ножкой разъема. Уже после впайки этого резистора, если воткнуть платку в комп, винда будет тщетно пытаться определить, что же за устройство ей хотят скормить. Дальше идем по схеме, впаиваем резисторы 68 Ом и заводим их на 5 и 7 ножки контроллера и, соответственно, на 2 и 3 пины разъема. Конденсатор будет у нас фильтровать высокочастотные помехи по питанию, – я его поставил с противоположной стороны платы между 4 и 8 ногой контроллера. Эти контакты заводим на пины разъема ЮСБ 1 (+5 вольт) и 4 (общий). Теперь стабилитроны. Как я говорил выше, их наличие необязательно, но лучше следовать стандартам, дабы избежать неприятных косяков. Документацию на конкретный тип стабилитрона, ты найдешь в интернете. Еще раз пробегись внимательно по плате, не пожалей времени, рекомендую даже прозвонить мультиметром. Нужно убрать все «сопли» и сделать плату конфеткой. Если ты на 100% уверен, что схема собрана правильно, то перейдем к самой интересной процедуре, которая, как выяснилось, таила много подвохов – прошивке микроконтроллера. Наладка и прошивкаТеперь ты владелец собранного устройства, которое уже выглядит нормальным девайсом, но, по правде, является всего лишь бесполезной болванкой, поскольку ничего пока не делает. А работать оно будет лишь после того, как мы зальем в него свою прошивку. Есть несколько способов. Мы уже неоднократно писали про LPT-порт, и возвращаться к этому варианту не будем. Это будет твоим домашним заданием – разобраться и прошить данный контроллер. Подсказка: надо прочитать хелп на программатор, который я выложу на диск, и документацию на контроллер, которую ты найдешь там же.
Теперь рассмотрим несколько других способов прошивки. Первый, самый простой и глупый – найти, где могут прошить контроллеры, например, в радиомагазине. Преимущество – тебе не придется прилагать никаких усилий по пайке программатора, покупке и тому подобное. Но есть и существенный недостаток. Если тебе там что-то прошьют не так, придется снова переться в эту контору и прошивать заново. Как правило, в электронике косяк не ясен сразу, может, ты ошибся в схемотехнике, что-то не пропаял, а может, прошивка неверно работает. По этому вполне возможно, что ты досконально выучишь дорогу в эту фирмочку, но так и не получишь готового устройства, а денег на прошивку потратишь больше, чем на нормальный программатор. Второй вариант – это позаимствовать программатор у товарища. В свое время я брал погонять параллельный программатор на старой работе. Но все, что взято в долг, надо возвращать, поэтому вариант хоть и красивый, но, опять же, не очень удачный. Самый простой и верный способ – иметь свой программатор на USB. Такой можно купить специально для AVR-микроконтроллеров у разных контор, которые могут его выслать даже в глубинку России, вместе с контроллером. Надо отметить, что внутрисхемные программаторы для AVR стоят очень дешево, около 30-40$, что по карману даже школьнику. Ну, будем считать, что программатор у тебя на руках; самодельный на LPT-порт или же профессиональный параллельный программатор для уймы микросхем – неважно. Теперь приступим к главному – прошивке микроконтроллера. Как я уже говорил выше, автор оригинального проекта упустил из внимания детальное рассмотрение данного процесса, и если почитать комментарии, многие так в нем и не разобрались. Итак, я буду рассматривать вариант, что программатор ты заполучил – последовательный внутрисхемный или на LPT-порт. Хочу отметить, при программировании самодельным программатором на параллельный порт тебе придется подать питание на наш контроллер, чтобы его прошить. Самый простой способ – взять его из этого же компьютера, например с провода блока питания флоповода. Красный провод у нас будет +5 вольт, а черный или корпус компьютера – «земля». Поначалу я просто подпаял линии программирования контроллера прямо в схему. Но после прошивки я отпаял все провода, а девайс не зафурычил. Несколько раз повторять процедуру запайки-распайки, рискуя ошибиться, мне было лень. По этому я быстренько соорудил небольшую плату с DIP-панелькой. Затем вставил туда Attiny45 и разъем программатора и прошивал его уже там, перетыкая контроллер из нашей платы в плату программатора.
Процедуры выполнены? Тогда запускаем программу программатора и читаем сигнатуру контроллера. Если контроллер нормально определился, то все ОК. Если нет, значит, ты где-то накосячил. Есть шанс, что контроллер попался битый, но сетовать на это следует в последнюю очередь. После определения контроллера выбираем, что хотим прошить Flash память контроллера – и выбираем наш файл прошивки capslocker.hex. Перед прошивкой, даже если наша тинька новенькая, ее надо стереть. Для этого в софте обычно есть специальная кнопка – «стереть контроллер». Сверяем прошитый контроллер с исходником: если все хорошо, то прошивка прошла успешно. Но не торопись вставлять девайс в компьютер. Работать он не будет, так как надо сделать еще одну вещь. Практически у всех микроконтроллеров, существующих сегодня на рынке, независимо к какому семейству они принадлежат, имеются так называемые установочные биты – fuse-bits. Это святая святых контроллера. У меня уже лежит пригоршня контроллеров, которую я загубил зверскими экспериментами с fuse-битами. Настроечные биты отвечают за ряд основных параметров контроллера. Одними можно указать, на какой частоте будет работать наше устройство, вывести его на максимальную частоту или даже заставить работать на частоте нескольких килогерц. Надо понимать, что в схемотехнике быстрее не значит лучше. Как правило, определенная частота работы нужна при сопряжении с некоторыми интерфейсами для выдерживания длительности сигналов. Таким интерфейсом может являться многократно описанный интерфейс UART, более известный как RS-232. Неправильная установка параметров fuse-битов может привести к тому, что больше нельзя будет работать с данным контроллером в этой схеме и, возможно, придется делать отдельную схему для перепрошивки установок либо искать параллельный программатор. Есть еще fuse-биты, которые зашивают на заводе, если устройство пускают в серию и не хотят чтобы оттуда могли выдрать прошивку. Они называются биты защиты и однократно программируются. Физически они представляют собой перемычки внутри кристалла, которые пережигаются, и уже нет никакой возможности штатно достать прошивку контроллера. Эти фьюзы лучше не трогать, если не хочешь получить неработающий контроллер без возможности восстановления.
Наше устройство необходимо вывести на максимальную частоту работы (к слову сказать, на западном ресурсе этот момент был совершенно упущен из виду). Лезем в настройки fuse-битов проекта и выставляем фьюзы в нужной комбинации. Не трогай лишнего! Никогда не доверяй материалам по установке фьюзов, всегда лезь в мануал и проверяй сам, верно ли они установлены (можешь также проверить меня). Итак, нам нужно программировать биты, отвечающие за частоту процессора. А именно: установить CKSEL0 в единицу, а остальные CKSEL1- CKSEL3 в ноль. Помимо этого, надо установить биты SUT0 в единицу, а SUT1 в ноль. Проверь установку бита CKDIV8, чтобы он тоже был установлен в единицу. Вышеперечисленные биты устанавливают режим работы процессора: выставляют работу на максимально возможной частоте 16 МГц, без внешнего резонатора. Последний бит показывает, делить ли данную частоту на 8. Если он будет установлен в ноль, то процессор будет работать на частоте 16/8=2 МГц (не есть гуд). Почему я такое пристальное внимание уделил последнему биту? Устройство у меня не работало несколько дней, и я не мог понять, в чем же дело. Оказалось, что по умолчанию данный бит установлен, и только после его снятия все завелось. Тестирование и использованиеЯ надеюсь, ты осилил рассмотренные этапы, собрал и прошил наше замечательное фрикерское устройство. Теперь протестируем его работоспособность. Пихаем наш девайс в USB-порт компьютера. Устройство определяется как HID, и операционка нормально устанавливает штатные драйвера. Можно для пущей уверенности посмотреть его в диспетчере устройств. Отлично, к работе готовы! Во время тестирования меня несколько раз обозвали блондинкой, так как я периодически начинал печатать с включенным <Caps Looks>.
Далее ты можешь оформить устройство, чтобы оно приняло нормальный человеческий вид (а не образину брутальной платы). Ориентируйся на собственный вкус. Как вариант, можно залить плату в какой-нибудь форме эпоксидной смолой, получив весьма гламурную «флешку». Либо термоклеем, разогрев его в маленькой форме из фольги или жести. Я поступил проще: взял термоусадку, в которую входило мое устройство, и усадил ее прямо сверху на плату обычной зажигалкой. Вышло круто и быстро. Цвет термоусадки я подобрал темный, чтобы на фоне современных корпусов оно как можно меньше бросалось в глаза. На этом этапе можно поставить жирную точку – наш фрикерский девайс собран и работает. ИтогПосле небольшого геморроя с устройством я решил его протестировать на своем коллеге. Надо сказать, что по долгу службы он постоянно набирает большие объемы текста. Пока коллега ходил на обед, я поставил девайс ему в USB-порт. Первые полчаса товарищ думал, что случайно задевает кнопку <Caps Looks>. Затем понял: что-то тут не чисто. Потребовал от админа заменить ему клавиатуру. Админ счел девайс обыкновенной флешкой и сердобольно заменил клаву. Но проблемы не прекратились. В конце концов, товарищ начал требовать переставить операционную систему или даже сменить компьютер. Под конец рабочего дня я от смеха-таки прокололся, в чем дело. Шутка удалась, хожу в синяках. Проще говоря, потратив один день на детали и сборку, ты можешь получить весьма веселенькое устройство, которым можно неплохо позабавиться. А. если ты еще и разберешься с кодом, который, напоминаю, написан на языке Си и компилятор к которому я любезно выложил на диск, ты можешь дописать дополнительные кнопки и комбинации. Отмечу, что сначала инсталлируй AVR Studio, а потом компилятор Win AVR, и он прекрасно сроднится со студией. В результате ты сможешь в одной программе писать как на си, так и на ассемблере. В общем, удачи! И пиши мне о результатах сборки. Прикол с резистором 2,2 кОмКогда я собирал и тестировал устройство, обнаружил одну интересную особенность организма компьютера. Если между первым и вторым контактом USB-разъема поставить резистор в 2,2 кОм, то Windows будет тщетно пытаться опознать устройство, нервируя сообщениями об ошибке. Это гораздо более безобидный, но в тоже время и более простой прикол. Есть несколько способов его реализации. Можно напаять резистор на разъем из старого провода. Либо, если имеется доступ к компьютеру, впаять прямо на контакты порта изнутри. Сообщение об ошибке будет жутко бесить, но программными средствами его исправить будет нельзя. Компилятор СиХочу обратить твое внимание, что в данном проекте программа написана на языке высокого уровня gcc-c. Это бесплатный компилятор си для AVR-микроконтроллеров и множество энтузиастов используют его в своих поделках. Мы постоянно писали ранее программы только на ассемблере, но зачастую новичкам бывает очень сложно его освоить. Могу тебя обрадовать: для наших контроллеров существует громадное множество компиляторов. Только одних си компиляторов, известных мне, существует три штуки. Правда, есть один существенный недостаток – у них различается синтаксис составления программ. Поэтому придется остановиться на каком-то одном и использовать его. Преимущество данного компилятора – его бесплатность. Также существуют компиляторы Паскаля и даже BAISIC, но последний я тебе крайне не рекомендую. Он генерирует жуткий код, который портит все. К тому же, последние компиляторы платные (хотя и позволяют писать в тестовом режиме программу до двух килобайт, которой, как правило, бывает достаточно). WWW
WarningУчти, что если твои действия с этим устройством повлекут тяжелые последствия, то тебя вполне могут осудить по 274 статье уголовного кодекса. ДискНа диске ты найдешь документацию к контроллеру, программу-программатор, исходный и скомпилированный код, компиляторы ассемблера и си. |