Параметры контроллера клавиатуры как узнать

Обновлено: 17.05.2024

В вычислениях контроллер клавиатуры - это устройство, которое связывает клавиатуру с компьютером . Его основная функция заключается в информировании компьютера , когда ключ нажат или отпущен. Когда поступают данные с клавиатуры, контроллер инициирует прерывание ( прерывание клавиатуры ), чтобы позволить процессору обработать ввод.

Если клавиатура представляет собой отдельный периферийный системный блок (например, в большинстве современных настольных компьютеров ), контроллер клавиатуры не присоединяется напрямую к клавишам, а получает скан-коды от микроконтроллера, встроенного в клавиатуру, через какой-то последовательный интерфейс . В этом случае контроллер обычно также управляет светодиодами клавиатуры, отправляя данные обратно на клавиатуру по проводам.

IBM PC AT использовали Intel 8042 чип для интерфейса с клавиатуры. Этот компьютер также контролировал доступ к линии A20 , чтобы реализовать обходной путь для ошибки микросхемы в Intel 80286 . [1] Контроллер клавиатуры также использовался для инициации программного сброса ЦП, чтобы ЦП мог перейти из защищенного режима в реальный режим [1] потому что 286 не позволял CPU перейти из защищенного режима в реальный режим, если CPU не перезагружен. Это было проблемой, потому что BIOS и службы операционной системы могли вызываться только программами в реальном режиме. Это поведение использовалось большим количеством программного обеспечения, которое ожидает такого поведения, и поэтому контроллеры клавиатуры продолжали управлять линией A20 и выполнять программный сброс ЦП, даже когда необходимость сброса с помощью контроллера клавиатуры устранялась способностью Intel 80386 переключиться в реальный режим из защищенного режима без перезагрузки процессора. Контроллер клавиатуры также обрабатывает ввод с мыши PS / 2, если имеется порт мыши PS / 2. Сегодня контроллер клавиатуры представляет собой либо блок внутри Super I / O устройство или отсутствует, его функции клавиатуры и мыши обрабатываются контроллером USB, а его роль в управлении линией A20 - набором микросхем.

СОДЕРЖАНИЕ

  • IBM играет небольшую роль в создании контроллера клавиатуры. В IBM-совместимых компьютерах контроллер клавиатуры или контроллер клавиатуры Intel 8042 находится на материнской плате. Контроллер обрабатывает ввод, полученный с клавиатуры компьютера, строки A20, сброс, расшифровку кодов сканирования, а также мышь PS / 2. В более поздних моделях клавиатур 8042 был заменен микроконтроллером 8742, который имел микропроцессор, оперативную память и порты ввода-вывода. [2]
  • Любой, кто пытается использовать классический контроллер клавиатуры в стиле 8042 (KBC), присутствующий в IBM PC / AT и почти всех более поздних ПК, обычно сталкивается с проблемой отсутствия точной документации. 8042 (или 8742, или любое количество совместимых частей, встроенных в более поздние микросхемы Super I / O) на самом деле довольно хорошо документированы. Загвоздка в том, что 8042 - это программируемый микроконтроллер с собственным управляющим программным обеспечением в (обычно) ПЗУ. До недавнего времени никто, кроме нескольких компаний (IBM, AMI, Phoenix), точно не знал, что делает управляющее программное обеспечение. [3]
  • IBM задокументировала ряд команд, которые хост может отправлять в KBC. Следует понимать, что все эти команды являются чисто программной конструкцией, и ничто в аппаратном обеспечении 8042 не диктует, что команды должны следовать какому-либо определенному формату, функции или что они вообще должны там присутствовать. Поэтому понимание кода ПЗУ 8042 - единственный способ понять, что именно представляют собой команды и что они делают, с оговоркой, что разные контроллеры могут иметь и имеют несколько разный код в своем ПЗУ. [4]

-Команды, помеченные как «игнорируемые», не выполняют никаких функций.

  • 00h-1Fh : косвенное чтение KBC RAM. Не задокументировано.
  • 20h-3Fh : чтение KBC RAM по смещению 20h-3Fh. Только команда 20h задокументирована IBM.
  • 40h-5Fh : косвенная запись в ОЗУ KBC. Не задокументировано.
  • 60h-7Fh : запись в ОЗУ KBC со смещением 20h-3Fh. IBM задокументировала только команду 60h. Байт по смещению 20h является байтом команды и обрабатывается особым образом.
  • 80h-A8h : игнорируется.
  • AAh : Самопроверка. Эта команда задокументирована, но ее побочные эффекты - нет.
  • ABh : Тест интерфейса.
  • АЧ : Диагностический дамп. Упоминается третьими сторонами, но не задокументировано IBM.
  • ADh : Отключить клавиатуру.
  • AEh : включить клавиатуру.
  • AFh-BFh : игнорируется.
  • C0h : чтение входного порта.
  • C1h : Непрерывный опрос входного порта, старший полубайт. Упоминается третьими сторонами, но не задокументировано IBM.
  • C2h : Непрерывный опрос входного порта, младший полубайт. Упоминается третьими сторонами, но не задокументировано IBM.
  • C3h-CFh : игнорируется.
  • D0h : чтение выходного порта.
  • D1h : порт вывода записи.
  • D2h-DEh : игнорируется.
  • E0h : считывание тестовых входов.
  • E1h-EFh : игнорируется.
  • F0h-FFh : биты импульсного выхода.

Портативное вычислительное устройство, содержащее: контроллер клавиатуры, имеющий первый вход для приема нажатий клавиш и имеющий выход для передачи упомянутых нажатий клавиш на главный процессор; и вторичный процессор, имеющий интерфейс к упомянутому контроллеру клавиатуры через вторичную шину, упомянутая вторичная шина также используется для связи с модулем батареи, при этом упомянутый контроллер клавиатуры также передает упомянутые входные данные нажатия клавиш упомянутому вторичному процессору через упомянутую вторичную шину. [6] Контроллер клавиатуры запрограммирован для поддержки последовательного интерфейса клавиатуры IBM®-совместимого персонального компьютера. Контроллер клавиатуры получает последовательные данные с клавиатуры, проверяет четность данных, транслирует скан-код и представляет данные системе в виде байта данных в своем выходном буфере. Контроллер прервет работу системы, когда данные будут помещены в его выходной буфер. Байт данных будет последовательно отправлен на клавиатуру с автоматически вставленным битом нечетной четности. Клавиатура требуется для подтверждения всех передач данных. Передача на клавиатуру не должна осуществляться до тех пор, пока не будет получено подтверждение для предыдущего отправленного байта. Контроллер клавиатуры и BIOS для повышения производительности компьютеров IBM PC и их совместимых устройств.В этом контроллере клавиатуры используется аппаратная методология, а не программная реализация, как в традиционном BIOS клавиатуры 8042. Это позволяет контроллеру клавиатуры мгновенно реагировать на все команды, отправляемые с клавиатуры в BIOS ЦП. Благодаря этому популярные программы, такие как Microsoft® Windows ™, NOVELL® и другие, работают намного быстрее. [7]

На основании предыдущих наработок с автоматом состояний сделаем очень полезный модуль. Он позволит нам расширить сферу применения отладочного комплекта при помощи подключенной клавиатуры. Благо, для этого имеется специальный разъем. До эпохи тотального применения интерфейса USB , при подключении клавиатуры и мыши к вычислительным устройствам применялся интерфейс PS/2 .

Внешний вид клавиатуры и напряжений в интерфейсе PS/2 Внешний вид клавиатуры и напряжений в интерфейсе PS/2

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

На стороне вычислителя встает задача принять последовательность бит для дальнейшего использования. Что мы наблюдаем в сигнальных линиях. На линии данных при отсутствии информации выставлена единица.

Детальное рассмотрение кадра данных и проектируемого автомата состояний Детальное рассмотрение кадра данных и проектируемого автомата состояний

Перед началом передачи кода нажатой клавиши выставляется так называемый стартовый бит уровня логического нуля. Далее передаются 8 бит кода начиная с младшего бита, заканчивая старшим. После идет бит четности. Он служит для проверки целостности кода. Завершает последовательность стоп бит . Его уровень единица. Каждый бит сопровождается передним фронтом тактового сигнала.

Зная каким образом решаются такие задачи, проектируем граф состояний. В начальном состоянии startbit ожидается появление стартового бита уровня логического нуля. Если приходят единицы, то остаемся в этом состоянии. Как только ноль появился, то переходим в состояние data считывания кода нажатой клавиши. Находимся в этом состоянии 8 тактов по числу бит в коде. Сохраняем каждый приходящий бит в регистре для хранения кода. Автоматически переходим в новое состояние parity , где считывается бит четности. В этой учебной задаче мы его никак не будем обрабатывать. В последнем состоянии stop считываем стоповый бит. Проверим его уровень и только если он единичный, то выставим принятый код на выход устройства. Нулевой стоповый бит говорит о какой-то ошибке. В этом случае код нажатой клавиши не выставляем, но все равно переходим в начальное состояние ожидания стартового бита.

Разработанный граф состояний довольно простой. Давайте представим как будет выглядеть схема контроллера интерфейса.

Каждый новый бит попадет на вход регистра, где формируется код нажатой клавиши. У этого регистра есть вход разрешения, который управляется из автомата состояний. Это позволяет писать только те биты, которые нужно. А какие биты писать нужно, решается на основании счетчика приходящих бит и уровня информационной линии. Также автомат состояний управляет процессом выставления кода на выход модуля и появлением сигнала о готовности кода.

Код контроллера

Пишем код контроллера интерфейса. Так как будем показывать коды клавиш на индикаторах , то описываем их линии активации. У интерфейса две линии. Данные и сигнал. На выходе модуля сигнал о готовности кода и сам код.

Опишем все возможные состояния автомата.

Для работы модуля пригодится несколько регистров. Это регистр текущего состояния, регистр для накопления бит кода клавиши, регистр счетчика бит. Также пригодятся два провода для передачи сигналов с двух линий интерфейса передачи данных.

Обнулим состояние всех регистров, в том числе и регистра состояния автомата.

На индикаторы отправляются соответствующие сигналы для их активации.

Отправляем сигналы со входа модуля в провода.

В процедурном блоке описываем поведение автомата состояний по приходу переднего фронта тактового импульса от клавиатуры. В состоянии ожидания стартового бита если приходит нулевой, то переходим к считыванию информационных бит. Если на входе единица, то информации нет, остаемся в ожидании. Сбрасываем состояние регистра кода и убираем с выхода сигнал о готовности кода.
В состоянии приема информационных бит каждый такт увеличивается счетчик бит, очередной бит смещает собой вправо все содержимое сдвигового регистра. Сигнала о готовности кода все еще нет. Если количество бит восемь, то следующее состояние будет прием бита четности. Сбрасываем счетчик бит. Если бит еще не восемь, то остаемся в этом же состоянии.

В состоянии проверки бита четности ничего не проверяем, готовности кода нет, следующее состояние это стоп бит.

При приеме последнего бита следующим состоянием будет начальное. Если стоп бит единица, что правильно, то на светодиоды выставляем содержимое регистра кода. Готовность единица. Если стоп бит не единица, то содержимое регистра светодиодов оставляем как было, сигнала готовности не будет.

Моделируем разработанный контроллер.

В тестовом модуле имитируем сигнал клавиатуры.

Тактовый сигнал идет постоянно. После стартового бита идут 4 нуля, потом 4 единицы. Каждый новый приходящий бит увеличивает счетчик бит на единицу. При этом в регистре кода его содержимое смещается от каждого приходящего бита. Как только стоп бит единица то на выход выставляется сигнал готовности кода и сам код нажатой клавиши.

Эксперимент

Проводим эксперимент. Постоянно нажимаем единицу. Каждый раз меняется содержимое регистра. Это значит неправильно считывается уровень сигнала. И сейчас будет еще один важный урок.

Дребезг бывает не только на механических переключателях. Несогласованная линия передачи данных при смене состояния дает затухающие колебания.

Иногда вычислитель воспринимает этот звон как многократно появляющийся передний фронт.

Для устранения дребезга подойдет ранее разработанный модуль. Просто ставим его на сигнальные линии с клавиатуры. Необходимо снизить в нем период ожидания. Импульсы с клавиатуры гораздо более быстрые, чем способности человека нажимать клавишу. Ничего не остается как сделать это примерно на глаз.

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

Исходный код

Видео-обзор с канала YouTube

Поддержите статью лайком если понравилось и подпишитесь чтобы ничего не пропускать.

Всем привет. Сегодня будем ремонтировать ноутбук ASUS K52JR с неисправной клавиатурой.

Предыстория.

Со слов хозяина, на ноутбук было вылито кофе, после чего на нем перестала работать клавиатура. Для ремонта, хозяин отдал ноутбук в сервисный центр, где тот пролежал несколько месяцев. В итоге, ноутбук был возвращен клиенту без ремонта. Работники сервисного центра сообщили, что сгорела какая-то дорогая деталь, и новую клавиатуру нет смысла покупать, так как она работать не будет. В нагрузку продали обычную usb клавиатуру, которой клиент благополучно пользовался несколько месяцев.

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

Диагностика ноутбука.

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


Остатки кофе на крышке ноутбука


тоже самое на клавиатуре

Такая же история была с самой крышкой корпуса. Засохший сладкий кофе, почти намертво склеил DVD привод с крышкой.


Кофе на DVD приводе

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

Так как утверждалось, что новую клавиатуру подкидывали, и она не работала, я решил проверить исправность самого ноутбука, а именно то, реагирует ли материнская плата на нажатие клавиш. Для этих целей, мне необходимо было изготовить маленький пробник.

Изготовление пробника для клавиатур ноутбука.

Пробник будет состоять из таких деталей:

  • 2 тонких швейных иголки;
  • 2 небольших проводка;
  • один резистор на 4,7 кОм
  • Термоусадка, ил изолента.


Детали для пробника

Процесс изготовления хорошо видно на фотографиях. К ушкам иголок припаиваются проводки, а уже к концам проводов припаиваем резистор. Можно к иголке припаять резистор, а к нему проводок, это уже на Ваше усмотрение.


На работу устройства это влиять никак не будет. Для эстетичности, все это дело я запаковал в термоусадку.


Проверка работоспособности разъема на клавиатуру в материнской плате.

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


Интерфейс программы для тестирования клавиатур

Exe файл программы я прилагаю в конце статьи. Так же, необходимо убедиться в том, что есть доступ к контактам разъема, ко стороны пайки. Если такого доступа нет, то необходимо разобрать ноутбук, и снять верхнюю крышку. В моем случае доступ был, но так как ноут необходимо отмывать, я разобрал ноутбук полностью.

Теперь подробней о том, как проверить работоспособность. Каждый пин на разъеме, отвечает за определенные буквы и цифры. Если замыкать несколько пинов между собой с помощью пробника, то мы будем имитировать нажатие клавиш на ноутбуке. Резистор, защищает материнскую плату от короткого замыкания, но его номинала хватает для определения нажатия на клавишу.

Программа на компьютере, будет показывать какие клавиши были нажаты, а какие нет.

Порядок работы с пробником.

Одну иголку ставим на первый пин разъема, после чего второй иголкой поочередно касаемся остальных пинов (2,3,4 и т.д.). Далее, первую иголку переносим на второй пин, а другой иголкой проходимся по всем остальным (3,4,5 и т.д). Первую иголку переносим на 3 пин, другой иголкой касаемся 4, 5 ,6 и т.д. Таким образом доходим до конца разъема.


Разъем на клавиатуру. Первый на первый пин указывает стрелка



Так программа реагирует на нажатие кнопок. Синим выделяются нажатые кнопки, черным которые не нажались

В итоге, если материнская плата находится в исправном состоянии, то будут нажаты все клавиши. У меня не нажались клавиши : Scroll Lock, Insert, вторая клавиша виндовс. Это правильно, так как этих клавиш у меня нет на родной клавиатуре.


Вид программы после замыкания последнего пина

Заключение

Таким образом, мы проверили исправность материнской платы. Мной была заказана новая клавиатура, после установки все прекрасно заработало. В предыдущем сервисе, ноутбук даже не разбирали, это видно по фото.

Будьте бдительны в выборе сервиса, и удачи Вам в ремонтах.


keyboardtestutility.rar (749,5 KiB, 1 262 загрузок)



Часовой пояс: UTC + 3 часа

Usb клавиатура

Здравствуйте!
Кто-нибудь скиньте пожалуйста схему USB клавиатуры на микроконтроллерах avr. Желательно чтобы была клавиша capslock и не более 10 других любых.
Спасибо

JLCPCB, всего $2 за прототип печатной платы! Цвет - любой!

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Приглашаем всех желающих 25/11/2021 г. принять участие в вебинаре, посвященном антеннам Molex. Готовые к использованию антенны Molex являются компактными, высокопроизводительными и доступны в различных форм-факторах для всех стандартных антенных протоколов и частот. На вебинаре будет проведен обзор готовых решений и перспектив развития продуктовой линейки. Разработчики смогут получить рекомендации по выбору антенны, работе с документацией и поддержкой, заказу образцов.

Вот оно, уже готовое.

_________________
Разница между теорией и практикой на практике гораздо больше, чем в теории.

Навигационные модули позволяют существенно сократить время разработки оборудования. На вебинаре 17 ноября вы сможете познакомиться с новыми семействами Teseo-LIV3x, Teseo-VIC3x и Teseo-LIV4F. Вы узнаете, насколько просто добавить функцию определения местоположения с повышенной точностью благодаря использованию двухдиапазонного приемника и функции навигации по сигналам от MEMS-датчиков. Поработаем в программе Teseo Suite и рассмотрим результаты полевого тестирования.

Спасибо!
Просто хочу собрать устройство, комплектующее с компьютером через usb, пока решил реализовать при помощи самодельной клавиатуры. Можете скинуть пожалуйста статью, о том, как комплектовать устройство с компьютером не использую клавиатуры. Заранее спасибо


_________________
Разница между теорией и практикой на практике гораздо больше, чем в теории.

Просто хочу собрать устройство, комплектующее с компьютером через usb Можете скинуть пожалуйста статью, о том, как комплектовать устройство с компьютером не использую клавиатуры.

Первая попалась CatBoard на at90usb162 описания функционала нет, куски схемы раскиданы по кучи сайтов, что с *KRO непонятно, про быстродействие тоже ничего. Схема делалась для набора текста.
Теперь наткнулся на тулзу с кучей ссылок как я понял под одну и туже схему клавы в разных вариантах. Начало, и вроде как более полная версия на atmega32u2 и регистрах. Тут известно что 6KRO.

Тут спрашивается какой МК лучше, первый или второй и пара регистров.
Видел обработчик ПК клавы для Радио86РК так там была мега64 и 8 регистров зато с ненужным там NKRO.
У меня в наличии только парочка 168 мег, да и в кодинге я не силён.

Сейчас у меня полноразмерная китайская клава на Cherry MX Black и китайском контролере Hantick HTK1087B без документации.
Всё бы хорошо но дребезг мешает печатать, печатается по нескольку букв, переназначения тоже нет.
Хотя возможно дребезг из за отвала самих кнопок от платы, качество пайки очень китайское. Только кнопку до блеска пайка отвалилась.
Тут думаю может какую RC фиговину припаять для задержки.

Первая попалась CatBoard на at90usb162 описания функционала нет, куски схемы раскиданы по кучи сайтов, что с *KRO непонятно, про быстродействие тоже ничего. Схема делалась для набора текста.

По NKRO, контроллер различает нажатие любого количества кнопок, для этой цели на каждой кнопке стоит диод, но отправляет в компьютер с ограничением протокола USB HID Keyboard, это 6 нажатых любых кнопок, и 8 модификаторов.

Кнопок всего 60, есть возможность догнать до стандартных 88 или только поставить 2 МК ? Нужен ещё HEX нумпад, возможно отдельно.

но отправляет в компьютер с ограничением протокола USB HID Keyboard, это 6 нажатых любых кнопок

Это особеность МК или клавиатур вообще ?
Читал что на usb и какихто мелкософтовских клавах нет ограничений.

Вот в этом моменте и вопрос, у меня по тестам клавиатура не ограничена, может она передёт нажатия последовательно, а потом последоввательно отпускания с приоритетом передачи отпусканий, отсюда и дребезг иногда.
Есть обычные клавиатуры ps2 и usb там максимум 3 нажатых кнопки и 2 модификатора или 3 модификатора и 2 кнопки.

Кнопка Caps не определяется в тестах как и в некоторых играх, хотя может потомучто я её отключил в системе как капс. Но в других играх она работает. Или это особенность некоторых клавиатур.

Заказал ардуину леонарду на 32u4 как самый дешёвый контролер, чтоб было на чём опыты ставить.
Из софтовых проектов пока только 2 и попалось, это кошкоклава и нечто тмк. У кошкоклавы маловато кнопок, затолкать туда все без доп деталей и правки прошивки врятли получится, так что нет смысла её ковырять.

Видимо для начала придётся спаять с инвертором чтоб понять как вообще переназначать кнопки. Вроде как есть какаето прога, но что она и как делает непонятно.
Повторить в наше время простое устройство крайне сложно.

А мне вот стало интересно, зачем переназначение клавиш делать в клавиатуре? Этим ещё со времён IBM PC занимался драйвер клавиатуры! Клавиатура только формирует скан-коды. Кстати, давным-давно, делал из контроллера клавиатуры (обычной, АТ. ) и клавиш от старого ЭМИ "типа-MIDI" клавиатуру, клавиши включал через диоды - можно было нажимать несколько клавиш без сбоев и дребезга, стало быть, стандартный контроллер это уже умеет, "фокус" лишь в конструкции матрицы кнопок!

С диодами другое дело, на плёночной клавиатуре их никак не сделать, там используется разведение функциональных клавиш на разные линии чтоб реализовать одновременное нажатие упираемся в тоже, в сложную разводку из кучи проводов.
Если я сделаю HID Liberation Device с дешифратором, то для подключения нумпада из 24 кнопок, нужно всего 8 проводов с учётом питания и они больше не будут использованы нигде.
У моей клавиатуры на это 13 проводов и это только матрица на 6 кнопок меньше чем мне нужно.

Дело в том что нет готовых контролеров, то что у меня игровое полное фуфло, выдернуть плату неоткуда, да и есть вероятность что она сдохнет, а заменить её будет нечем, в другой клавиатуре может оказаться другая разводка. бегать искать бушную клаву негде, тем более настоящую, а покупать новую за 300р на разбор нет смысла. Покупал много разных китайских хреней на разбор, но всё шло в мусор потому как оказывалось уже не тем что было первое время и уже не годилось для применения никуда кроме того для чего сделано.

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