USB-клавіатура посилає тільки сигнали або також приймає їх з комп'ютера?


83

Клавіатура не потребує сигналу від комп'ютера, а лише живлення, правда? АЛЕ потрібно приймати сигнали, а також надсилати їх?

Редагувати: Я не очікував, що це питання викликає такий великий інтерес! Я запитав це, тому що я мріяв побудувати doohickey, який дублює сигнал, щоб клавіатура могла надсилати один і той же лист на два комп'ютери одночасно. Оскільки (із того, що я можу зрозуміти у відповідях) комп’ютер активно керує клавіатурою, як і будь-який інший пристрій, це очевидно неможливо. Не велика справа, оскільки практично я не мав навичок будувати це все одно!


40
наприклад, він може отримати статус блокування ключів. Багато клавіатур мають світлодіодні індикатори стану клавіш блокування. Спробуйте увімкнути блокування заглушок, потім замініть клавіатуру, ймовірно, стан все ще буде заблокований, ця інформація повинна надходити з ПК.
Máté Juhász

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

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


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

Відповіді:


101

З специфікації " Визначення класу пристроїв для пристроїв людського інтерфейсу (HID)" версії 11.1 ":

Синхронізація між світлодіодними станами та подіями CAPS LOCK, NUM LOCK, SCROLL LOCK, COMPOSE та KANA підтримується хостом, а не клавіатурою. Якщо використовується дескриптор клавіатури в Додатку В, стан світлодіодів встановлюється шляхом надсилання 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
@Daniel більшість людей не називатимуть клавіатуру "вихідним" пристроєм. Периферійні пристрої прикріплені зовні, тому ми стоїмо з точки зору ПК, щоб називати їх входом або виходом. Ми хочемо використовувати цей ПК, а не клавіатуру, мишу чи інші периферійні пристрої
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 - start-of-frame. Ці пакети підтримують пристрій в активному режимі і не дозволяють йому переходити на низьку потужність 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
@shadow, не впевнений, про що ти питаєш. Швидкість опитування для клавіатури, якщо я пригадую, становить 8 мс. Ви асинхронно натискаєте клавіші, тому деякі події (зробити або перервати) можуть перейти в різні опитувальні рамки, якась подія відбудеться саме тоді, коли запит IN виконується. Хороший контролер клавіатури повинен правильно обробляти всі перетинання подій і не повинен мати відсутніх подій. Я поняття не маю, чому клавіатури генерують "привидні ключі", але це не має нічого спільного з протоколом USB.
Але..ченські

4
Ключі-привиди пов'язані з тим, як фізичні клавіші підключаються. Дешевші контролери клавіатури не мають жодного штифта для кожної клавіші, скоріше вони мають сітчасту систему адресації, наприклад, рядки та стовпці, де контролер стверджує провід стовпця, і шукає сигнал на рядку рядка. У цьому сценарії одночасне натискання двох клавіш, наприклад, E і S, може відрізнятися від натискання клавіш W і D, за винятком часу.
Бен

2

Як пояснили інші відповіді, USB вимагає двонаправленого зв’язку як частини способу його роботи. PS / 2, дозволяючи двосторонній зв'язок, не потребує цього для надсилання ключів на комп'ютер, але вимагає встановлення світлодіодів клавіатури.

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

Я не впевнений, наскільки складним був би такий проект. Минув час, коли я працював з PS / 2, тому я не знаю, чи можна просто перемотати пару проводів / роз'ємів або якщо вам знадобиться активний пристрій (наприклад, мікроконтролер) для передачі команд в одному напрямку, але відкинути їх в іншому. Якщо у вас був мікроконтролер, ви можете навіть зробити пристрій таким, щоб він міг інтерпретувати світлодіодні команди на клавіатурі та "комбінувати" їх для відображення (наприклад, тривалий спалах світлодіода, якщо він увімкнений на комп’ютері, а на комп’ютері - два, короткий спалах світлодіод, якщо він увімкнено на комп’ютері два, але вимкнено на одному комп’ютері, індикатор увімкнений, якщо він увімкнений на обох комп'ютерах, і індикатор вимкнений, якщо він вимкнений на обох комп'ютерах). Це було б більш просунуто.

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

  • VNC (дозволяє керувати одним комп'ютером з іншого через мережу)
  • RDP (також дозволяє керувати одним комп'ютером з іншого через мережу, вбудований в Microsoft Windows, але вимагає Професійної версії)
  • 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.