82

Клавиатура не нуждается в каком-либо сигнале от компьютера, только питание, верно? ИЛИ нужно ли принимать и отправлять сигналы?

Редактировать: я не ожидал, что этот вопрос вызовет такой большой интерес! Я спросил об этом, потому что мечтал создать doohickey, который дублирует сигнал, чтобы клавиатура могла отправлять одно и то же письмо на два компьютера одновременно. Поскольку (из того, что я могу разглядеть в ответах) компьютер активно управляет клавиатурой, как и любое другое устройство, это явно невозможно. Ничего страшного, так как практически у меня не было навыков, чтобы его построить!

5 ответов5

100

Из спецификации « Определение класса устройства для устройств интерфейса пользователя (HID)» версии 11.1 :

Синхронизация между состояниями светодиодов и событиями CAPS LOCK, NUM LOCK, SCROLL LOCK, COMPOSE и KANA поддерживается хостом, а НЕ клавиатурой. При использовании дескриптора клавиатуры в Приложении B состояния светодиодов устанавливаются путем отправки 5-битного абсолютного отчета на клавиатуру с помощью запроса Set_Report(Output).

Чтобы изменить индикаторы клавиатуры, клавиатура принимает команду для этого. Таким образом, это не устройство «только для ввода» (это означает, что оно только выводит данные на хост).

При этом существует согласование и процесс перечисления со всеми USB-устройствами, которые требуют прямого и обратного разговора между хостом и устройством. У вас не может быть USB-устройства «только для чтения».

Даже до USB контроллер клавиатуры ПК принимал команды, потому что он делал несколько вещей, кроме чтения клавиатуры (ссылка):

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

IBM PC AT использовал чип Intel 8042 для взаимодействия с клавиатурой. Этот компьютер также контролировал доступ к линии A20, чтобы реализовать обход ошибки микросхемы в Intel 80286. 1 Контроллер клавиатуры также использовался для инициализации программного сброса ЦП, чтобы ЦП мог перейти из защищенного режима в реальный. режим 1, потому что 286 не позволяли процессору переходить из защищенного режима в реальный режим, пока процессор не будет сброшен Это было проблемой, потому что BIOS и сервисы операционной системы могли вызываться только программами в реальном режиме.

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

55

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

(изображение отсюда, серые прямоугольники представляют USB-хост, белые прямоугольники представляют USB-функцию)

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

17

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

Хотя на первый взгляд USB выглядит просто, на самом деле его функционирование довольно сложное. Любое новое USB-устройство должно быть "перечислено", прежде чем оно начнет функционировать. Последовательность следующая:

  1. После того, как клавиатура подключена, порт хоста получает сигнал "состояние соединения" (для сигналов LS клавиша D- ВЫСОКО ВЫВОДИТСЯ от клавиатуры).

  2. Затем хост переводит порт в режим "сброса порта", и USB PHY (драйвер физического уровня) отправляет "USB_RESET" по линиям D+/D- (обе линии приводятся в состояние НИЗКИЙ в течение заданного промежутка времени). Некоторая информация о "сбросе порта" для устройств FS/HS может быть найдена здесь.

  3. Затем хост начинает выводить пакеты границы кадра с интервалом 1 мс. Для низкоскоростных (LS) устройств, таких как обычная проводная клавиатура, это просто импульсы "поддержания активности", в то время как для FS генерируются специальные пакеты SOF - начало кадра. Эти пакеты поддерживают устройство в активном режиме и не позволяют ему переходить в режим SUSPEND с низким энергопотреблением.

  4. Затем начинается "перечисление". Хост отправляет запрос на получение дескриптора устройства. Запрос отправляется на "канал по умолчанию" с адресом устройства "0". [В настоящее время существует только одно такое устройство - клавиатура, поскольку все другие устройства на шине уже должны иметь свои индивидуально назначенные адреса USB]

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

  6. Хост отправляет транзакцию, требующую, чтобы устройство изменило свой адрес по умолчанию на новый назначенный адрес.

  7. Затем хост начинает новый раунд связи с устройством, теперь по новому назначенному адресу. Все остальные устройства игнорируют эту связь, потому что она не адресована им.

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

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

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

2

Как объяснили другие ответы, USB требует двунаправленной связи как часть того, как он работает. PS/2, хотя и допускает двунаправленную связь, не требует его для отправки ключей на компьютер, но требует установки светодиодных индикаторов клавиатуры.

Теоретически вы можете создать устройство для дублирования сигнала PS/2 и отправки его на второй компьютер, а также для отмены любых команд с компьютеров, чтобы вы могли отправлять нажатия клавиш на несколько компьютеров, но светодиоды клавиатуры не будут реагировать на состояния num lock, caps lock и scroll lock (или любое другое изменение состояния светодиодов, например, в Linux светодиодные индикаторы клавиатуры иногда используются для альтернативных целей).

Я не уверен, насколько сложным будет такой проект. Прошло много времени с тех пор, как я работал с PS/2, поэтому я не знаю, можно ли просто соединить пару проводов /разъемов или вам нужно активное устройство (например, микроконтроллер), чтобы передавать команды в одном направлении, но отбрасывать их в другом. Если у вас был микроконтроллер, вы могли бы даже сделать устройство таким, чтобы оно могло интерпретировать светодиодные команды клавиатуры и "комбинировать" их для отображения (например, длительное мигание индикатора, если он включен на компьютере один, но выключение на компьютере два, короткая вспышка). светодиод, если он включен на компьютере два, но выключен на компьютере один, светодиод горит постоянно, если он включен на обоих компьютерах, и светодиод выключен, если он выключен на обоих компьютерах). Это было бы более продвинутым, хотя.

Кроме того, если ваша цель состоит в том, чтобы иметь возможность управлять одним компьютером с другого компьютера или двумя компьютерами с одного рабочего стола, или чем-то еще, вы можете рассмотреть следующие вопросы:

  • VNC (позволяет управлять одним компьютером с другого по сети)
  • RDP (также позволяет управлять одним компьютером с другого по сети, встроенной в Microsoft Windows, но требует версии Professional)
  • KVM (аппаратное обеспечение, позволяющее переключать один комплект периферийных устройств между двумя компьютерами)
1

До клавиатур USB клавиатуры PS/2 использовали гораздо более простой протокол, где можно подключить одну клавиатуру к двум устройствам и заставить ее работать. Простое Y-соединение - это все, что требуется.

Старые USB-клавиатуры все еще имеют встроенный режим эмуляции PS/2; Использование одного из этих фиолетовых переходников позволяет подключить его к порту PS/2 на задней панели компьютера. Таким образом, если на двух компьютерах используется соединительный кабель USB-PS/2, тогда фиолетовый адаптер на клавиатуре USB вполне может подойти.

Более новые USB-клавиатуры отказались от устаревшего режима PS/2, поэтому не будут работать в этом случае.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .