USB-клавиатура только отправляет сигналы, или она также получает их от компьютера?


83

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

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


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

8
даже клавиатуры PS / 2 получают сигналы от ПК, в противном случае, как он может включать / выключать светодиоды?
phuclv

8
@ Девсман, вы не можете этого сделать, иначе состояние блокировки будет не синхронизировано, потому что оно может быть изменено программным обеспечением. Например, если вы подключите 2 клавиатуры и нажмете numlock на этом, светодиод на другом будет переключаться. То же самое может быть достигнуто с помощью экранной клавиатуры
phuclv

3
Переключение светодиодов codegolf.stackexchange.com/questions/110974/blink-the-caps-lock
Дон Джо,

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

Ответы:


101

Из спецификации « Определение класса устройства для устройств интерфейса пользователя (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 переключаться на реальный режим из защищенного режима без сброса процессора.


15
Если мы говорим о вещах на уровне «сигналов», даже если мы забываем перечисление и светодиоды, USB-вход основан на опросе. Устройство не может активно отправлять данные на хост, если хост не запрашивает их. Устройство ввода просто очень часто опрашивается, чтобы узнать, есть ли у него что-то новое для отчета.
Матти Вирккунен

Вы имеете в виду "только для вывода", верно?
Даниэль

Не уверен, как сказать, что tbh, клавиатура является «устройством ввода», и «только для ввода» будет означать, что она только отправляет данные на хост, но никогда не получает. Зависит от того, является ли точка зрения клавиатурой или хостом.
LawrenceC

1
@ Даниель большинство людей не будет называть клавиатуру «устройством вывода». Периферийные устройства подключены извне, поэтому мы с точки зрения ПК стоим называть их вводом или выводом. Мы хотим использовать ПК, а не клавиатуру, мышь или другие периферийные устройства
phuclv

@ LưuVĩnhPhúc Я знаю, но он пишет, So it is not an "input-only" device (meaning it only outputs data to the host)что меня смущает
Даниил

56

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

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

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


18

Этот вопрос отражает распространенное заблуждение, что 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-хостами.


If keyboard has any key pressed/depressed, the keyboard will return this information- как тогда появятся призрачные ключи? У меня сложилось впечатление, что клавиатуры должны отправлять события нажатия клавиш и нажатия клавиш, что объясняет, почему если пропустить событие нажатия клавиш, у вас будут призрачные клавиши ...
Shadow

2
@ тени, не знаю, о чем ты спрашиваешь. Частота опроса для клавиатуры, если я помню, составляет 8 мс. Вы нажимаете клавиши асинхронно, поэтому некоторые события (make или break) могут переходить в разные кадры опроса, некоторые события будут происходить именно тогда, когда выполняется запрос IN. Хороший контроллер клавиатуры должен правильно обрабатывать все пересечения событий и не должен иметь пропущенных событий. Я понятия не имею, почему клавиатуры генерируют «призрачные ключи», но это не имеет никакого отношения к протоколу USB.
Ale..chenski

4
Призрачные ключи связаны с тем, как физические ключи связаны. Контроллеры более дешевой клавиатуры не имеют по одному штырьку для каждой клавиши, скорее, они имеют сеточную систему адресации, например, с рядами и столбцами, где контроллер определяет провод столбца и ищет сигнал на проводе строки. В этом сценарии одновременное нажатие двух клавиш, например, E и S, может быть неотличимо от нажатия клавиш W и D, кроме как по времени.
Бен

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, поэтому в этом случае работать не будут.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.