Что такое контроллер клавиатуры
Анатомия клавиатуры
Устройства ввода играют важнейшую роль в работе с компьютером и играх, поэтому довольно любопытно будет изучить их внутренности. Диапазон цен на клавиатуры сегодня просто огромен, однако их можно отнести к одной из двух широких категорий: мембранным или механическим. Эти понятия описывают систему, используемую для распознавания нажатия клавиш, и начнём мы с первой категории.
Щёлкать иль не щёлкать, вот в чём вопрос
На представленной ниже фотографии показана бюджетная клавиатура, похожая на бесчисленное множество других, используемых сегодня в школах, офисах и дома. Схема расположения её клавиш является почти полной копией классической IBM Model M 102, но это справедливо для большинства современных клавиатур.
И корпус, и отдельные клавиши изготовлены литьём под давлением из АБС-пластика, потому что этот процесс изготовления недорог, а материал слабо подвержен износу.
Работа с клавиатурой даёт полную информацию о том, к какой категории она относится. Полное отсутствие щёлканья и треска при нажатии на клавиши сообщает нам, что это мембранная клавиатура. Ещё одна подсказка — ощущения при нажатии клавиши; несмотря на бюджетность клавиатуры, нажатие ощущается мягким и слабым.
Вскрытие корпуса это подтверждает — первым делом мы видим мягкий слой силикона.
Недостаток такой схемы заключается в отсутствии чёткого указания того, успешным ли было нажатие на клавишу — чтобы понять, нажалась ли клавиша, нужно смотреть на монитор. Для некоторых пользователей притупленность обратной связи становится причиной не пользоваться мембранными клавиатурами.
Благодаря мягкости нажатий клавиатура довольно тиха, поэтому если вы работаете в одном пространстве со множеством людей, клавиатуры такого типа могут оказаться спасением от шума.
Сняв слой силикона, мы увидим набор из трёх пластиковых листов: два создают «контакты переключателей», а третий способствует их разделению, предотвращая ошибочные считывания.
При нажатии клавиши мембраны сдвигаются друг к другу, после чего соединяются и «точки» под клавишей, в результате чего цепь замыкается, и это считывает соответствующий чип.
Если мы пройдём по дорожкам от мембран к небольшой печатной плате, то увидим, что всего есть 26 дорожек. Они выстроены таким образом, что несколько точек находятся на одной дорожке, допустим, у верхней мембраны, но соответствующие точки нижней мембраны расположены на отдельных дорожках.
Это может показаться чересчур сложным, но на самом деле такая система намного проще, чем создание отдельных дорожек для каждой клавиши. В этой модели соединения не прикреплены несъёмно к плате (что позволяет снизить стоимость), поэтому её нужно надёжно прикрепить прижать к мембране, чтобы обеспечить надёжное соединение.
Плата также содержит пару светодиодов, сообщающих о нажатии определённых клавиш, а именно Caps Lock, Num Lock и Scroll Lock.
Перевернув печатную плату, мы увидим чип контроллера. К сожалению, он залит твёрдым пластиком (для герметизации от жидкостей), который невозможно снять, не повредив остальную часть платы.
Чип может быть стандартным микроконтроллером USB HID (human interface device), которых на рынке есть тысячи разновидностей (например, такая).
Подобные типы клавиатур могут работать годами, не вызывая при этом никаких проблем. Когда же они всё-таки возникают, это часто связано с соединяющимися точками — постоянное нажатие и отпускание приводит к их постепенному стиранию, пока, наконец, они не протрутся до такой степени, что не смогут обеспечивать контакт.
После этого остаётся или заменить мембраны, или, как поступает большинство людей, отправить клавиатуру в рай для электроники и купить новую. Но, разумеется, не каждую клавиатуру можно купить за пару долларов и не в каждой используются мембраны.
Механические клавиатуры относятся к другой категории, обычно находящейся на другом крае спектра цен, и на то есть уважительная причина.
На фотографии выше показана механическая клавиатура Corsair K100 RGB, продающаяся по довольно неожиданной цене в 210 долларов. Не все модели такого типа настолько дороги, однако подобный дизайн и набор функций сегодня очень популярен.
Под каждой клавишей расположена отдельная система микропереключателя. В рассматриваемой K100 используются системы, изготовленные знаменитой немецкой компанией Cherry. Переключатели Cherry MX уже приобрели почти легендарную репутацию, но в конечном итоге это всего лишь качественно изготовленные устройства.
Cherry производит широкий ассортимент переключателей, каждый тип имеет свою силу и размер пружин, что обеспечивает разные уровни тактильных ощущений. Также конструкции разнятся в зависимости от того, насколько глубоко нужно нажать клавишу для активации контакта и необходимости создания аудиальной обратной связи.
Из-за наличия подвижных деталей механические клавиатуры обладают отчётливым «стуком». Благодаря использованию переключателей клавиатура становится более надёжной и тактильной по сравнению с мембранными моделями.
Какими бывают механические переключатели?
Современная мода на светодиодную RGB-подсветку в комплектующих PC нравится не всем, однако когда дело касается клавиатур, она обладает определёнными преимуществами: настраиваемая подсветка позволяет выбрать наиболее подходящий пользователю цвет и можно задать комбинацию цветных клавиш (если есть возможность RGB-подсветки каждой клавиши), что бывает полезным в приложениях или играх.
Некоторые клавиатуры можно назвать гибридами, сочетающими в себе механику и мембраны, особенно это относится к ноутбукам. В этих устройствах нет места для полностью механических переключателей, но производители создали конструкции, придающие мембранным клавишам более жёсткую и предсказуемую обратную связь.
Внутри клавиатуры-бабочки Apple
Естественно, это повышает стоимость изготовления, а в случае показанной выше системы Apple могут возникать проблемы, но для многих пользователей добавление механических систем для улучшения ощущений и обратной связи в ноутбучных клавиатурах — желанный результат.
Я не буду подробно рассказывать об эргономических клавиатурах просто потому, что внутри они устроены точно так же, как описанные выше типы. Они отличаются только расположением клавиш на корпусе, а также снижением нагрузки на запястья и предплечья при длительном использовании.
У всех нас есть любимые модели мышей и клавиатур, и наш выбор всегда определяется тем, как продукт ощущается в работе. В основном это относится к внешнему виду, но и внутренности тоже играют свою роль.
На правах рекламы
Виртуальные серверы с новейшим железом, защитой от DDoS-атак и огромным выбором операционных систем. Максимальная конфигурация — 128 ядер CPU, 512 ГБ RAM, 4000 ГБ NVMe.
Назначение контроллера клавиатуры ПК. (Основные функции и основные узлы)
С CPU ПК клавиатура взаимодействует через контроллер клавиатуры.
На рис. 3.3 приведена блок-схема подсоединения клавиатуры к системному интерфейсу. Контроллер клавиатуры предназначен для преобразования последовательно поступающего из клавиатуры значения скэн-кода в параллельный формат и формирования сигнала прерывания при наличии готовых для передачи в ЦПБ данных.
Данные в параллельном формате передаются программируемому параллельному интерфейсу 8255А в порт А, из которого поступают в CPU. Через биты В6 и В7 порта В этого интерфейса CPU передает в контроллер клавиатуры управляющие сигналы, которые предназначены для блокировки процессором связи с клавиатурой. Сигнал по В6 блокирует передачу синхронизирующих импульсов, а сигнал по В7 служит для блокировки передачи данных. Сигнал запроса прерывания с клавиатуры (ЗПр.) поступает в контроллер прерываний 8259А на вход IR1. Тактовые сигналы СLК от задающего генератора ПК поступают в контроллер клавиатуры для синхронизации работы CPU со входом от клавиатуры.
Блок-схема контроллера клавиатуры приведена на рис. 3.4. Основными элементами схемы контроллера клавиатуры являются: регистр сдвига, схема формирования строба и D-триггер. При передаче информации от клавиатуры в контроллер данные в последовательном коде поступают на вход DI регистра сдвига. Сдвиг в этом регистре происходит при подаче импульса из схемы формирования строба. Этот импульс формируется при наличии синхроимпульсов от клавиатуры и тактовых импульсов СLК.
При поступлении в контроллер клавиатуры очередного скэн-кода первый маркерный бит всегда равен «1». Его появление на выходе Р регистра сдвига свидетельствует об окончании преобразования этого скэн-кода, т.е. о наличии на выходе регистра данных для передачи в CPU. Этот сигнал подается на вход D-триггера, который изменяет свое состояние, формируя сигнал запроса на прерывание в БИС 8259А.
При необходимости CPU может заблокировать передачу данных с клавиатуры в контроллер путем подачи управляющих сигналов через биты В6 и В7 порта В БИС 8255А.
Рис. 3.3. Блок-схема соединения клавиатуры с системным интерфейсом
Рис. 3.4. Блок-схема контроллера клавиатуры
Протокол HDLC.
Существует три типа станций HDLC:
Первичная станция (ведущая) управляет звеном передачи данных (каналом). Несет ответственность за организацию потоков передаваемых данных и восстановление работоспособности звена передачи данных. Эта станция передает кадры команд вторичным станциям, подключенным к каналу. В свою очередь она получает кадры ответа от этих станций. Если канал является многоточечным, главная станция отвечает за поддержку отдельного сеанса связи с каждой станцией, подключенной к каналу.
Вторичная станция (ведомая) работает как зависимая по отношению к первичной станции (ведущей). Она реагирует на команды, получаемые от первичной станции, в виде ответов. Поддерживает только один сеанс, а именно только с первичной станцией. Вторичная станция не отвечает за управление каналом.
Комбинированная станция сочетает в себе одновременно функции первичной и вторичной станции. Передает как команды, так и ответы и получает команды и ответы от другой комбинированной станции, с которой поддерживает сеанс.
Три логических состояния, в которых могут находиться станции в процессе взаимодействия друг с другом.
Состояние инициализации (IS). Это состояние используется для передачи управления на удаленную вторичную/комбинированную станцию, ее коррекции в случае необходимости, а также для обмена параметрами между удаленными станциями в звене передачи данных, используемыми в состоянии передачи информации.
Состояние передачи информации (ITS). Вторичной, первичной и комбинированным станциям разрешается вести передачу и принимать информацию пользователя. В этом состоянии станция может находится в режимах NRM, ARM и ABM, которые описаны ниже.
Три режима работы станции в состоянии передачи информации, которые могут устанавливаться и отменяться в любой момент.
Три способа конфигурирования канала для обеспечения совместимости взаимодействий между станциями, использующих основные элементы процедур HDLC и способных в процессе работы менять свой статус (первичная, вторичная, комбинированная):
Протокол может использоваться в каналах доступа к хостам и маршрутизаторам. Обеспечивает гарантированную доставку кадров.
Что представляет собой клавишный контроллер и как он работает?
Анонс
DJSTORE
Что такое контроллер? Самое простое объяснение – это клавиатура, которая сама по себе не может воспроизводить звуки, но подключается к другому оборудованию, например, компьютеру, звуковому модулю, синтезаторам и подобному.
В большинстве своем контроллеры достаточно просты в использовании и легко находят свое место на студии. При выборе следует ориентироваться в первую очередь на удобство и габариты. Конечно, не стоит забывать про функциональность и коммутационные возможности.
Основные типы
2 наиболее важных параметра для музыканта при выборе клавишного инструмента – принцип работы и количество клавиш.
Что отличает контроллер от акустического пианино или любого другого клавишного инструмента – конструкция контроллера не влияет на воспроизведение звука. Даже с созданием синтезатора большинство электронных клавиатур используют пружинную механику, которая значительно отличается от молоточковой, установленной на акустических пианино. Для возврата клавиши на начальную позицию необходим специальный механизм: пружинная механика подходит для этого идеально.
Самые ранние синтезаторы могли воспроизводить множество различных звуков, но ни один не мог точно воспроизвести пианино. Звучание инструментов вышло на новый уровень благодаря созданию усовершенствованных тон-генераторов и сэмплирования в целом. Так решилась проблема исполнения партии пианино на обычной клавиатуре.
Стоит, однако, указать, что клавиатуры клавишных инструментов разделяются на несколько типов, в связи с чем могут предложить пользователям разные функции и возможности.
Полувзвешенные клавиатуры контроллеров отличаются чуть большим весом, и, внешне более похожи на рояльные, т. к. торцы клавиш являются закрытыми. Там также используется пружинная система. Несмотря на свою значительность, вес клавиш не является самым важным аспектом.
Взвешенные клавиши являются продолжением развития полувзвешенной механики, но в них используется еще и система противовесов. Из-за этого клавиши по своим ощущениям максимально приближены к фортепианным.
Клавиатура, практически полностью воссоздающая механику настоящего инструмента.
Основная причина, по которой пианино имеет иное звучание, заключается в том, что за хрупким на первый взгляд корпусом хранится сложный механизм. При нажатии клавиш в действие приводится механика: после нажатия от струн отходит демпфер, позволяя струне свободно звучать, в это время по нему ударяет обитый войлоком молоточек.
При работе такие инструменты несколько отличаются от синтезаторов, так как молоточку необходимо некоторое время для движения.
Градуированная (постепенное изменение веса молоточков от нижнего до верхнего регистра) молоточковая механика является наиболее совершенной, так как она в состоянии имитировать ощущения от игры на акустическом пианино. При этом, не имея образования, на таких клавиатурах очень сложно играть быстрые пассажи, секвенции.
Плюсы и минусы
Традиционно считается, что если клавиатура не характеризуется как взвешенная или обладающая молоточковой механикой, то она принадлежит к категории клавиш для Project-студий и живых выступлений. Их производство значительно дешевле, но в плане функциональности они практически не уступают топовым вариантам. Нужно просто учесть тот момент, что игра фортепианных партий для пианиста на таких клавиатурах может быть столь же необычной по ощущениям, как игра синтезаторных лидов и секвенций на настоящем пианино. Стоит заметить, что звуки ударных и перкуссии лучше всего играются на синтезаторной и полувзвешенной механике.
Самое явное различие в контроллерах, которое бросается в глаза – разное количество клавиш. Сегодня существуют инструменты с 88, 76, 61, 49, 37 и 25 клавишами. Инструменты на 25 и 37 клавиш пользуются большим спросом у тех, кому важен вопрос портативности.
Кстати, чем больше клавиш, тем больше вероятность того, что они взвешенного или даже молоточкового типа. Почти все 88-клавишные инструменты имеют взвешенную или молоточковую механику.
Многие контроллеры предлагают пользователю широчайший спектр возможностей. Нельзя не отметить коммутационные возможности, которые в этом вопросе играют не последнюю роль, так, например, MIDI разъемы могут передавать различные данные сразу по нескольким MIDI-каналам.
Далее мы рассмотрим другие важные особенности клавишных инструментов, на которые стоит обратить внимание.
«Velocity» несет очень важную функцию. Данный параметр фиксирует скорость нажатия на клавиши. Это особенно важно для реалистичного воспроизведения акустических звуков, а также для экспрессии в синтезаторных звуках. Ранее самые дешевые инструменты вообще не обладали этим параметром, поэтому есть мнение, что он был добавлен для увеличения стоимости инструмента. Позже этот момент был пересмотрен, и сегодня уже сложно найти клавиатуру, на которой нет этой функции.
Многие современные клавиатуры несут на борту некое количество «кривых» для скорости нажатия. Это своего рода разница между приложенной во время игры физической силой и числом, отображающим нажатия (от 0 до 127) в базе данных. Это нужно для того, чтобы, к примеру, при игре с большой силой, партии были легкими. Или наоборот, при легких нажатиях и сильных динамика воспроизведения была примерно одинаковой.
Колесо питч бенда необходимо для понижения/повышения высоты звучащей ноты на полтона-тон. Чаще всего этот элемент управления находится слева.
Колесо модуляции (‘mod’) обычно находится рядом с питчем и имеет аналогичную форму исполнения. Колесо модуляции используется для добавления некоторых эффектов, например, вибрато или тремоло. Кроме того, оно может быть использовано для управления и некоторыми другими параметрами.
При нажатии клавиши в секвенсор идет какая либо нота, а при последующем «дожатии» клавиши —MIDI-сообщения контроллера Aftertouch. Также возможно добавление эффектов, управление фильтром.
Чаще всего встречается монофонический aftertouch – давление воспринимается на уже «звучащие» клавиши. Полифонический aftertouch используется существенно реже, он позволяет отдельным клавишам посылать собственный независимый сигнал, что невозможно сделать на большинстве MIDI инструментов. Исключение составляют дорогие специфичные инструменты типа Roli Seaboаrd.
Большинство клавишных инструментов имеют разъем для педали сустейна. Физическое воздействие на педаль превращается в MIDI сообщение. Это важно при работе с естественными звуками пианино, также может использоваться для создания крещендо.
Более усовершенствованные клавиатуры предлагают еще разъемы под педали экспрессии, которые могут управлять громкостью, срезом фильтра и многими другими параметрами.
Помимо этого, на некоторых «навороченных» клавиатурах могут быть еще и разъемы для футсвитчей. Они могут использоваться для переключения эффектов, дорожек, включения и остановки записи в DAW и т.д.
Конечно, звуковые модули и инструменты предлагают и иные возможности управления. Здесь стоит сказать о фильтрах, параметрах огибающей, частотах осциллятора, балансе компонентов и пр. Существуют назначаемые элементы управления, но продвинутые клавиатуры располагают множеством дополнительных кнобов (или энкодеров) и слайдеров.
Переключение Program/Bank Change/Presets
Большинство MIDI инструментов понимают команды переключения program/bank. Это дает возможность переключения пресетов или банков с пресетами виртуального инструмента напрямую из MIDI-клавиатуры. Более улучшенная версия реализации этого процесса – возможность еще и сохранять пресеты самим инструментом, чтобы впоследствии нужные звуки всегда были под рукой.
Многие клавишные инструменты обладают функцией split (разделение клавиатуры), позволяя разным частям клавиатуры посылать сигнал на разные MIDI каналы. Например, при игре правой рукой воспроизводить звуки струнных, а левой – звуки пианино.
Другие функции и особенности
Клавишные инструменты также обладают и другими функциями, например:
Любой клавишный инструмент, созданный для подключения не только к компьютеру, но и к «железным» модулям, должен иметь как минимум 1 MIDI выход. Для работы с большим количеством устройств MIDI выходов может возникнуть потребность и в большем кол-ве выходов. При этом некоторые из клавиатур оборудованы еще и портом MIDI IN, что позволяет осуществлять управление настройками удаленно (например, при помощи программного обеспечения), либо даже использовать клавиатуру, как USB-MIDI конвертер.
Подключение MIDI клавиатуры к компьютеру на большинстве современных клавиатур решено благодаря наличию USB порта. Наличие USB разъема на некоторых синтезаторах еще привело к созданию универсальных аудиодевайсов, которые имеют на борту не только MIDI-интерфейс, но и аудио (Access Virus TI2, Elektron Analog Keys и подобные). Это означает, что одно устройство может заменить сразу несколько, а в отдельных случаях синтезатор или драм-машина могут управляться из DAW как VST/AU плагины.
Некоторые клавишные контроллеры современного производства выпускаются с драм пэдами, которые устанавливаются в дополнение к традиционным клавишам в качестве альтернативного метода работы с барабанными партиями.
Жесткие кейс (Flightcases)
Не входящие в комплект поставки устройства, но тем не менее очень нужные для гастролирующего музыканта. Используются для защиты инструментов во время перевозок. Помимо этого, благодаря своей конструкции, позволяют работать с инструментом, не доставая его из кейса.
Заключение
На сегодняшний день не существует такого понятия как «стандартный» клавишный контроллер, так как все они различны между собой. Покупка клавишного инструмента подразумевает четкое осознание того, какой результат вы хотите получить от игры. Важно не запутаться в большом количестве разных функций и определить нужные для себя.
О работе ПК на примере Windows 10 и клавиатуры ч.2
В этой части мы рассмотрим какой путь проходит информация о нажатой клавише от клавиатуры до CPU, будет очень много картинок и это не последняя часть. Я буду рассказывать об этом с точки зрения программиста который пишет в режиме пользователя — пользовательские програмы, web, мобильные приложения — поэтому здесь могут быть неточности. Люди занимающиеся электроникой навряд ли найдут для себя что-то полезное. Первая часть находится здесь.
Под катом трафик.
Клавиша клавиатуры представляет из себя кнопку, которая замыкает контакты и через них проходит электрический ток. Механизм замыкания/размыкания сделан таким образом чтобы кнопку не приходилось вдавливать до конца, потому как иначе пальцы будут быстро уставать и клавиатура будет неэргономичной. В разрезе клавиша выглядит так. В правой части находится контакт на который подаётся напряжение.
Через программу на каждую ножку можно установить либо замерить напряжение. Алгоритм нахождения нажатой клавиши заключается в том чтобы подавать напряжение на одну ножку и замерять его на другой и если клавиша была нажата, то на второй ножке будет примерно столько же вольт сколько на входной. Так в бесконечном цикле проверяются все клавиши. Как правило клавиатура имеет 80-110 кнопок, а у контроллера контактов (пинов) гораздо меньше. Поэтому используют такой подход как “клавиатурная матрица” — все клавиши распределяют по столбцам и строкам и алгоритм сводится к нахождению столбца который пересекается со строкой на которую программа подала напряжение. Здесь отмечено цветом соответствие столбцов/строк контактам.
В реальности матрица может выглядеть так. Слева промышленная и справа самодельная.
На псевдокоде часть программы прошивки определяющая нажатые клавиши может выглядеть следующим образом.
Каждой клавише соответствует скан код, он стандартизирован и представляет из себя 8ми битное число, т.е. один байт. Поэтому когда нажата клавиша Y контроллер клавиатуры должен будет отправить число 21 (0x15), а когда отпущена — 149 (0x95). Каким образом происходит отправка? Наверняка вы работали с JSON, веб-сервисами или отправляли данные между процессами и знаете что для отправки данные надо сериализовать, т.е. превратить в массив байт или отформатированный текст, которые получатель может десериализовать, т.е. воссоздать объект в своём адресном пространстве. А во что можно сериализовать данные на таком низком уровне? Нам нужно передать всего лишь 1 байт (8 бит). Забегая вперёд скажу, что данные мы будем передавать побитно.
В математике есть формула которая может преобразовать любое привычное нам десятичное число в последовательность нулей и единиц и обратно. Этой формуле нашлось применение в вычислительной технике. В первой части я вскользь упомянул, что аналоговая техника эксплуатирует законы физики, в то время как цифровая работает на уровне нулей и единиц. Это означает, что аналоговый телефон кодирует весь спектр человеческого голоса в последовательность электромагнитных волн, а цифровой телефон использует микросхему которая преобразовывает человеческий голос в цифровые данные, к примеру в файлы в формате WAV, а потом передаёт их последовательностью нулей и единиц в виде электромагнитных волн. Только в данном случае вместо всего спектра голоса надо представлять только два значения — 0 и 1. Представлять их можно волнами разной длины, разным напряжением, световыми импульсами через оптоволокно, черными и белыми полосками на бумаге, дырками на перфокарте.
Скан код нажатой клавиши Y в двоичном виде выглядит как 0001 0101. Передавать мы их будем по ножке микроконтроллера которая отвечает за данные (DATA). Логическая единица — это напряжение 3.3В и выше, логический ноль — напряжение около 0В. Здесь возникает загвоздка — как передать три нуля подряд? Для этого нам нужна вторая ножка которую назовём CLOCK, когда на ней единичка это значит что сеанс передачи одного бита начался, а ноль — закончился. Такая перемена значений (напряжений) будет происходить с определённым интервалом времени, скажем 50 наносекунд, потому что на другом конце находится второй микроконтроллер который работает со своей скоростью и в бесконечном цикле слушает ножки к которым подключены CLOCK и DATA. В данном примере я буду исходить из того что клавиатура подключается через разъём PS2, который показан ниже. Через USB порт алгоритм передачи будет другим. Как видите у порта PS2 есть пины которые называются Data, Clock. Помимо них есть ещё контакт по которому контроллер порта PS2 раздаёт клавиатуре напряжение 5В необходимое для работы и контакт заземления, который просто выводится на корпус клавиатуры. Остальные контакты не используются.
Порт PS/2 называется последовательным портом (serial bus), потому как передаёт биты один за другим (последовательность битов). Паралельный порт передаёт данные сразу по нескольким контактам и может за один сеанс передачи данных передать к примеру сразу один байт (8 бит).
В чём разница между портом, шиной (bus) и протоколом? Шина как и порт это набор контактов (проводков) и соглашение как их использовать, только порт имеет соединение для подключения внешних устройств, а шина используется для общения компонентов на материнской плате. Порт это по сути шина с разъёмом по середине. Протокол — это порядок взаимодействия через контакты. В примере с PS/2 это был порядок передачи данных через контакты Clock и Data.
Раньше микроконтроллер Intel 8042 был очень распространённым и использовался как в клавиатуре, так и в качестве контроллера порта PS2, т.е. данными обменивались два одинаковых чипа. Драйвер порта PS2 в Windows называется 8042prt.sys.
На самом деле мы передаём не 8 бит, а 11, потому что данные передаются в виде пакета данных или же сообщения. Дополнительные 3 бита обозначают начало и конец данных — один нолик в начале и 0 1 в конце, такой протокол передачи данных от устройства хосту в PS2. Так может выглядеть функция SendKey в псевдокоде, если вам удобнее понимать код. Она отправляет данные о нажатой клавише через шину PS2.
Не всегда для передачи данных нужно вручную устанавливать напряжение на каждой ножке индивидуально. В некоторых случаях значение сохранённое в регистре автоматически отображается на контакты.
На графике такая передача данных будет визуализирована следующим образом. По оси X время, по Y — напряжение.
В аналоговой технике сигнал может искажаться, т.е. лежит провод ни к чему не подключённый, но вольтметр показывает на нём 0.5В из-за того что рядом есть электромагнитное поле. Поэтому используется понятие порогового напряжения. Если напряжение меньше порогового, то считаем что получили логический ноль, иначе единичка. С учётом возможных искажений скан-код нажатой клавиши Y может прийти вот таким:
Прежде чем мы подробно рассмотрим как данные от клавиатуры добираются до CPU давайте поговорим о микросхемах, шинах и материнских платах.
Микроконтроллеры и микросхемы
Микроконтроллер может выполнять вшитую в него программу, имеет некоторый объём RAM памяти и место для хранения данных и кода программы. В микросхему программу можно задать ещё на этапе проектирования. Вручную создавать электрическую схему реализующую алгоритм очень трудоёмко и поэтому для проектирования микросхем может использоваться специальный язык программирования который называется VHDL (Hardware Description Language). Это высокоуровневый язык программирования который транслируется в план электрической схемы, она прогоняется через программу находящую оптимальное расположение радиоэлементов на плате и в конечном счёте производится в физическом виде. Изображения носят иллюстративный характер.
Каким же образом данные и команды представлены в микросхемах и микроконтроллерах? Основой вычислительной техники является транзистор, который человечество научилось делать в микроскопических размерах. Транзистор это такой радиоэлемент у которого есть три ножки: вход, выход и между ними управляющая, которая открывает или закрывает ток между двумя ножками. Рисунок ниже иллюстрирует работу транзистора, вода иллюстрирует ток.
Т.е. одна лампочка представляет один бит информации (0 или 1), а восемь таких лампочек соответствуют одному байту. На транзисторах можно строить и логические операторы И, ИЛИ, НЕ, XOR.
К примеру в схеме оператора AND (слева на картинке выше) на выходе будет напряжение только если оба входных напряжения ненулевые. Есть уже кем-то придуманные алгоритмы сложения, умножения, деления, вычитания основанные на побитовых логических операциях и битовых сдвигах. Производителям микросхем надо их просто реализовать. Ниже проиллюстрирована работа алгоритма побитового сложения, разбирать мы его не будем:
Нанотранзисторы микроскопические и их можно размещать на плате миллионами. Ниже изображён процессор Intel и как примерно может выглядеть одно из его ядер. Картинка носит иллюстративный характер.
Микросхемы могут содержать на той же плате и в том же корпусе и микроконтроллер.
Обычно в учебниках шины показывают в виде жирных стрелок, как на картинке ниже. Это делается чтобы не рисовать все соединения контактов, которых может быть много. Работа шины PS2 очень простая, там всего нужно три контакта. Но есть шины у которых к примеру 124 контакта для передачи данных.
Шина может состоять из подшин, т.е. одни контакты используются для данных, другие для адресов, третьи для управления и контакты по которым передаётся питание. Подход когда одни и те же контакты используются попеременно для передачи и данных и адресов называется мультиплексированием. К примеру процессор Intel 8086 имеет шину данных и адресов 20 бит, на диаграмме пинов её контакты обозначены AD0-AD19 (ножки 16-2 и 39-35).
В более сложном случае у нас могут быть несколько микросхем подключенных к тем же контактам. Для нормального общения им нужен дополнительный чип, который будет определять кто в какой момент времени может их использовать, он называется контроллер шины. На рисунке ниже сферическая шина в вакууме: четыре одинаковых микроконтроллера передают данные микроконтроллеру-потребителю через контроллер шины. Красный провод — напряжение, которое контроллер шины раздаёт всем подключенным к нему чипам. По зелёным проводам передаются данные и производится “договаривание” с контроллером шины и синий провод это Clock, по которому контроллер шины синхронизирует общение контроллеров, потому как они могут работать с разной скоростью. Если на синем проводе логическая единица, то чип имеющий право на пользование шиной может выполнить один акт взаимодействия со внешним миром — прочитать бит например.
Чипсет — это набор микросхем, которые все были созданы для работы друг с другом. Они обеспечивают коммуникацию компонентов на материнской плате и предоставляют функциональность, например таймеры. Чип-сет работает только с одной маркой процессоров, AMD нельзя вставить в материнку с чипсетом Intel, у них даже контакты разные. Схема материнской платы представлена ниже:
Хотите пример хардверной инкапсуляции? В чипсетах фирмы Intel имеется чип под названием Super IO, он представлен на картинке ниже и через шину LPC подключен к Южному мосту. LPC — умное название проводков CLOCK, DATA, VCC (POWER). Этот чип содержит в себе эмуляцию всех старых чипов которые когда-либо использовались для периферийных устройств, в том числе и чип 8042 который использовался для PS2 порта. Там же находится и эмулятор контроллера порта для Floppy и прочие реликты которые мешают прогрессу. На общей схеме материнской платы выше указаны и Super IO и шина LPC.
Современный порт PS2 напрямую подключается к чипу Super I/O. Зелёное — клавиатура, фиолетовый — мышка. Раньше он подключался к микроконтроллеру Intel 8042.
Материнская плата выполнена из диэлектрика, т.е. материала который не проводит ток. Ток может проходить только про пропечатанным на плате магистралям. Материнская плата имеет множество слоёв, на каждом из которых пропечатаны свои контакты и поэтому если просверлить материнку там где магистралей не видно её можно испортить повредив невидимые контакты внутри платы. Теперь можно детально рассмотреть процесс распространения данных от PS2 к CPU.
Дорога от PS2 к процессору
Как правило архитектуру компьютера рассматривают на процессоре 8086. С одной стороны это правильно, потому как он достаточно простой по сравнению с современными CPU, с другой стороны неправильно, потому что он старый и не отражает архитектуру современной машины. Intel 8086 не нужны были никакие мосты, потому что он был настолько медленный что мог работать с периферией на одной шине, т.е. на одной частоте. Я плохо знаю современные CPU и чип сеты, поэтому буду объяснять на выдуманных, которые напоминают реальные. В моём примере будет вымышленный CPU сильно похожий на Intel 8086. У Super IO чипа больше ста контактов и по ним есть документация в Интернете, но я не вижу смысла разбирать какие пины используются клавиатурой и LPC-шиной для общения с South Bridge на самом деле. Главное это принцип, который может быть реализован по-разному.
Давайте быстренько посмотрим на картинку чтобы вспомнить что мы уже прошли. Зелёные стрелки показывают путь который мы рассмотрим.
Итак данные от клавиатуры уже пришли в контроллер порта PS2, который когда-то был чипом Intel 8042, а теперь эмулируется чипом Super IO. А теперь давайте разбирать дальнейший ход действий на моей выдуманной материнке с выдуманным CPU. Контроллер PS2 получил скан код нажатой клавишы Y и теперь подаёт напряжение на контакт сигнал (фиолетовая линия, см картинку ниже) на котором должен уведомить программируемый контроллер прерываний о данных с клавиатуры. Этот сигнал передаётся от одного чипа к другому пока Северный мост не передаст его чипу управляющему прерываниями.
Programmable Interrupt Controller представляет из себя чип Intel 8259 у которого 8 ножек (их имена IRQ0-IRQ7) зарезервированы для получения уведомлений от определённых портов (Interrupt ReQuest). На пин IRQ1 подвязана клавиатура, IRQ7 — принтер, на какой-то пин Floppy диск, звуковая карта, параллельные порты и другие. Конечно устройств может гораздо больше восьми, поэтому применялся такой приём как каскадирование, когда к ножке с именем IRQ2 подключался другой такой же PIC, у которого отсчёт начинался не с 0, а 7. Мышка привязана к IRQ12, т.е. ножка IRQ5 на втором PIC.
На самом деле таблица векторов прерываний содержит больше данных чем просто указатель на функцию. В этом массиве хранятся данные такого типа. Для простоты будем думать, что в IDT хранятся указатели на функцию или в терминах C# делегаты.
Более подробно ознакомится с тем как настраивается таблица векторов прерываний можно на osdev.
Теперь мы знаем о том как произошло прерывание, но не знаем как обработчик прерываний считывает информацию о нажатой клавише. С программной точки зрения порт PS2 представляет собой два регистра, только обращение к ним происходит не по именам или адресам в памяти о по номеру порта ввода/вывода. Эти два однобайтовых регистра закреплены за портами 0x60 и 0x64, в первом (0x60) будет лежать скан-код клавиши. Второй порт используется для передачи статуса и комманд порту PS2 (не клавиатуре!). В наборе инструкций архитектуры x86 есть команда IN storeTo, fromPortNum, которая считывает значение из указанного I/O port в указанный регистр. Например IN AL, 0x60 сохранит данные с клавиатуры в регистр AL. Она может работать примерно так:
Как вы теперь понимаете чтение с внешних устройств, даже таких как память RAM с т.зр. CPU достаточно медленное. Эту медлительность можно заметить написав программу которая печатает 10 000 строчек в файл построчно, вместо того чтобы скопить их в буфере и сохранить сразу. Жёсткий диск подключен к Южному мосту и внутри него так же есть контроллер управляющим непосредственным размещением данных.
Оперативная память подключается к CPU через шину и чтение с неё занимает некоторое время. Для ускорения работы CPU у него имеется кэш, т.е. область в которой расположены транзисторы представляющие данные которые скоро понадобятся или часто используются, их чтение происходит гораздо быстрее чем из платы RAM, которая общается с CPU через Северный мост. Оперативная память называется Dynamic Random Access Memory, потому как для представления данных в ней используются конденсаторы. Конденсатор это радиоэлемент который как аккумулятор держит некоторое время заряд пока полностью не разрядится. Только здесь разрядка происходит очень быстро. Поэтому конденсаторы надо перезаряжать, это происходит моментально, достаточно подать напряжение. Заряженный конденсатор — логическая 1, иначе 0. Для памяти кэша используется Static RAM, т.е. её не надо перезаряжать и поэтому она работает быстрее, но стоит дороже. Кэш делится на 3 уровня, которые последовательно проверяются в процессе поиска запрошенных данных, прежде чем процессор обратиться к RAM. На старых процессорах кэш первого уровня (L1) был частью CPU и работал с ним на одной частоте, когда как L2 и L3 кэши были внешними чипами. Сейчас они все находятся на одной микросхеме с процессором. Кэш L1 самый быстрый и самый маленький по объёму памяти, L2 имеет больше памяти но медленнее. L3 самый большой кэш и самый медленный, часто его называют shared cache, потому что он хранит данные для всех ядер CPU, в то время как L1 и L2 созданы для каждого отдельного ядра.
В следующей части поговорим как Windows принимает и обрабатывает полученные данные.