Czy klawiatura USB wysyła tylko sygnały, czy też odbiera je z komputera?

83

Klawiatura nie potrzebuje żadnego sygnału z komputera, tylko zasilanie, prawda? LUB czy musi odbierać i wysyłać sygnały?

Edycja: Nie spodziewałem się, że to pytanie wzbudzi tak duże zainteresowanie! Zapytałem o to, ponieważ miałem bezczynne marzenie o zbudowaniu doohickeya, który powiela sygnał, aby klawiatura mogła wysłać ten sam list do dwóch komputerów jednocześnie. Ponieważ (z tego, co rozumiem w odpowiedziach) komputer aktywnie steruje klawiaturą, jak każde inne urządzenie, nie jest to oczywiście możliwe. Nic wielkiego, ponieważ praktycznie nie miałem umiejętności, aby go zbudować!

Ne Mo
źródło
40
np. może otrzymać status kluczy blokady. Wiele klawiatur ma diody LED wskazujące status klawiszy blokady. Spróbuj włączyć Caps Lock, a następnie wymień klawiaturę, prawdopodobnie stan będzie nadal zablokowany, ta informacja musi pochodzić z komputera.
Máté Juhász
8
nawet klawiatury PS / 2 odbierają sygnały z komputera, w przeciwnym razie jak włączyć / wyłączyć diody LED?
phuclv
8
@Devsman nie możesz tego zrobić, w przeciwnym razie stan blokady nie będzie zsynchronizowany, ponieważ można go zmienić za pomocą oprogramowania. Na przykład, jeśli podłączysz 2 klawiatury i naciśniesz na tym numlock, dioda LED na drugiej przełączy się. To samo można osiągnąć za pomocą klawiatury ekranowej
phuclv
7
Urządzenie USB musi mieć dane dwukierunkowe, po prostu ze względu na wymagania dotyczące wstępnego uzgadniania, aby umożliwić daną klasę urządzeń.
Steve

Odpowiedzi:

101

Ze specyfikacji „ Definicja klasy urządzeń dla urządzeń interfejsu człowiek (HID)” wersja 11.1 ”:

Synchronizacja między stanami diod LED a CAPS LOCK, NUM LOCK, SCROLL LOCK, COMPOSE i KANA jest utrzymywana przez hosta, a NIE przez klawiaturę. Jeśli używasz deskryptora klawiatury w Dodatku B, stany LED są ustawiane poprzez wysłanie 5-bitowego raportu bezwzględnego do klawiatury za pośrednictwem żądania Set_Report (Wyjście).

Aby zmienić diody LED klawiatury, klawiatura akceptuje polecenie. Więc nie jest to urządzenie „tylko wejściowe” (co oznacza, że ​​wysyła dane tylko do hosta).

Biorąc to pod uwagę, istnieje proces negocjacji i wyliczenia ze wszystkimi urządzeniami USB, które wymagają wzajemnej rozmowy między hostem a urządzeniem. Nie możesz mieć urządzenia USB „tylko do odczytu”.

Jeszcze przed USB, kontroler klawiatury PC zaakceptuje polecenia, ponieważ zrobił kilka rzeczy oprócz odczytu klawiatury ( odniesienia ):

Jeśli klawiatura jest oddzielną jednostką peryferyjną (na przykład w większości współczesnych komputerów stacjonarnych), kontroler klawiatury nie jest bezpośrednio podłączony do klawiszy, ale odbiera skancody z mikrokontrolera wbudowanego w klawiaturę za pośrednictwem pewnego rodzaju interfejsu szeregowego. W takim przypadku kontroler zwykle również steruje diodami LED klawiatury, wysyłając dane z powrotem do klawiatury przewodem.

IBM PC AT wykorzystał układ Intel 8042 do połączenia z klawiaturą. Ten komputer kontrolował także dostęp do linii A20 w celu zaimplementowania obejścia błędu mikroukładu w procesorze Intel 80286. 1 Kontroler klawiatury został również wykorzystany do zainicjowania resetu procesora oprogramowania, aby umożliwić przejście procesora z trybu chronionego na rzeczywisty tryb 1, ponieważ 286 nie pozwalał CPU przejść z trybu chronionego do trybu rzeczywistego, chyba że CPU zostanie zresetowany. Był to problem, ponieważ BIOS i usługi systemu operacyjnego mogły być wywoływane tylko przez programy w trybie rzeczywistym.

Zachowania te były wykorzystywane przez wiele programów, które oczekują takiego zachowania, dlatego kontrolery klawiatury nadal kontrolują linię A20 i wykonują resety procesora programowego, nawet gdy konieczność zresetowania za pomocą kontrolera klawiatury została wyeliminowana przez zdolność przełączania Intel 80386 na tryb rzeczywisty z trybu chronionego bez resetowania procesora.

LawrenceC
źródło
15
Jeśli mówimy o rzeczach na poziomie „sygnałów”, nawet jeśli zapomnimy wyliczenia i diody LED, wejście USB opiera się na odpytywaniu. Urządzenie nie może proaktywnie wysyłać danych do hosta, chyba że host o to poprosi. Urządzenie wejściowe jest bardzo często odpytywane, aby zapytać, czy ma coś nowego do zgłoszenia.
Matti Virkkunen,
Masz na myśli „tylko wyjście”, prawda?
Daniel
Nie wiem, jak wyrazić to, klawiatura jest urządzeniem „wejściowym”, a „tylko wejście” oznacza, że ​​wysyła dane tylko do hosta, ale nigdy nie odbiera. Zależy, czy punktem widzenia jest klawiatura czy host.
LawrenceC,
1
@Daniel większość ludzi nie nazywa klawiatury „urządzeniem wyjściowym”. Urządzenia peryferyjne są podłączone zewnętrznie, dlatego z perspektywy komputera możemy nazywać je wejściami lub wyjściami. To komputer, którego chcemy używać, a nie klawiatura, mysz lub inne urządzenia peryferyjne
phuclv
@ LưuVĩnhPhúc Wiem, ale pisze, So it is not an "input-only" device (meaning it only outputs data to the host)co mnie myli
Daniel
56

Każde urządzenie USB, niezależnie od jego klasy, wymaga dwukierunkowej komunikacji do działania . Każde urządzenie USB (lub funkcja pod względem specyfikacji USB) jest reprezentowane jako zestaw punktów końcowych, które można traktować jako bufory przyjmujące lub odbierające dane. Jednak nawet punkty końcowe, które mogą wysyłać dane, czekają na specjalny pakiet o nazwie token, zanim będą mogły odpowiedzieć: wprowadź opis zdjęcia tutaj

(zdjęcie stąd , szare pola oznaczają host USB, białe pola reprezentują funkcję USB)

W ten sposób wykonywane są nawet tak zwane transfery przerwań, a host USB odpytuje podłączone urządzenia za pomocą pakietów tokenów. To, co różni się między zwykłymi (masowymi) przelewami a przerwaniami, to to, że czas odpytywania jest krótki i gwarantowany w tym drugim przypadku. Nadal wszystkie transfery są inicjowane przez hosta.

Dmitrij Grigoriew
źródło
18

Pytanie odzwierciedla powszechne błędne przekonanie, że urządzenia USB „wysyłają” coś na PC po naciśnięciu klawisza (lub poruszeniu myszy), dlatego tak dużą uwagę. W rzeczywistości urządzenia USB nie wysyłają niczego, dopóki nie OTRZYMUJĄ żądania od hosta odpowiadania. Jednym wyjątkiem jest proces budzenia z zawieszonego urządzenia.

Podczas gdy USB na powierzchni wygląda prosto, w rzeczywistości jego funkcjonowanie jest dość skomplikowane. Każde nowe urządzenie USB musi najpierw zostać „wyliczone”, zanim zacznie działać. Sekwencja jest następująca:

  1. Po podłączeniu klawiatury port hosta odbiera sygnał „status połączenia” (dla sygnałów LS, D- jest ciągnięty WYSOKIE przez klawiaturę).

  2. Następnie host ustawia port w tryb „resetowania portu”, a USB PHY (sterownik warstwy fizycznej) wysyła „USB_RESET” w dół linii D + / D- (obie linie są uruchamiane NISKIE przez określony czas). Niektóre informacje na temat „resetowania portu” dla urządzeń FS / HS można znaleźć tutaj .

  3. Następnie host zaczyna wysyłać pakiety granic ramki w odstępie 1 ms. W przypadku urządzeń o niskiej prędkości (LS), jak zwykła klawiatura przewodowa, są to po prostu impulsy „utrzymywania przy życiu”, podczas gdy dla FS generowane są specjalne pakiety SOF - start-of-frame. Te pakiety utrzymują urządzenie w trybie aktywnym i zapobiegają przełączeniu się w SUSPEND o niskiej mocy.

  4. Następnie rozpoczyna się „wyliczenie”. Host wysyła żądanie uzyskania deskryptora urządzenia. Żądanie jest wysyłane do „domyślnego potoku” z adresem urządzenia „0”. [Obecnie jest tylko jedno takie urządzenie - klawiatura - ponieważ wszystkie inne urządzenia w magistrali powinny już mieć przypisane indywidualnie adresy USB]

  5. Klawiatura zwraca żądane informacje, więc host będzie mógł określić, jaki rodzaj sterownika powinien zostać załadowany.

  6. Host wysyła transakcję wymagającą od urządzenia zmiany domyślnego adresu na nowy przypisany adres.

  7. Następnie host rozpoczyna nową rundę komunikacji z urządzeniem, teraz pod nowym przypisanym adresem. Wszystkie inne urządzenia ignorują tę komunikację, ponieważ nie jest do nich adresowana.

  8. Host może odczytać znacznie więcej informacji z kilku innych deskryptorów i ostatecznie wybierze „konfigurację urządzenia”. To kończy proces wyliczania.

  9. W zależności od klasy urządzenia USB host zaczyna komunikować się z urządzeniem. W przypadku klawiatury host wysyła okresowo żądanie „IN”, zasadniczo odpytując urządzenie (nawet jeśli ten okresowy potok nazywany jest potokiem „przerywającym”). Jeśli na klawiaturze zostanie naciśnięty / wciśnięty dowolny klawisz, klawiatura zwróci tę informację. Jeśli nie, żadne dane nie zostaną zwrócone do sterownika urządzenia.

Krótko mówiąc, każde urządzenie USB musi otrzymać unikalny adres z hosta USB, a dwa hosty USB będą miały trudności z komunikacją z urządzeniem - kolizja magistrali, niedopasowanie adresu, losowe przechwytywanie danych naciśnięcia klawisza itp. Protokół USB uniemożliwia współdzielenie urządzenie między dwoma hostami USB.

Ale..chenski
źródło
If keyboard has any key pressed/depressed, the keyboard will return this information- w jaki sposób pojawiałyby się klucze duchów? Miałem wrażenie, że klawiatury muszą wysyłać zdarzenia „podskakujące” i „podskakujące”, co tłumaczyłoby, dlaczego jeśli zdarzyło się, że zdarzyło się to pominąć, miałbyś klucze-duchy ...
Shadow
2
@shadow, nie jestem pewien, o co pytasz. Częstotliwość odpytywania klawiatury, o ile pamiętam, wynosi 8 ms. Naciskasz klawisze asynchronicznie, więc niektóre zdarzenia (make lub break) mogą przejść do różnych ramek odpytywania, niektóre zdarzenia pojawią się dokładnie wtedy, gdy żądanie IN jest w toku. Dobry kontroler klawiatury powinien poprawnie obsługiwać wszystkie przejścia zdarzeń i nie powinien zawierać brakujących zdarzeń. Nie mam pojęcia, dlaczego klawiatury generują „klucze-duchy”, ale nie ma to nic wspólnego z protokołem USB.
Ale..chenski
4
Klawisze duchów są powiązane ze sposobem, w jaki klawisze fizyczne są podłączone. Tańsze kontrolery klawiatury nie mają pojedynczego styku dla każdego klawisza, mają raczej system adresowania siatki z np. Rzędami i kolumnami, w których kontroler zapewnia przewód kolumny i szuka sygnału na przewodzie rzędu. W tym scenariuszu jednoczesne naciśnięcie dwóch klawiszy, np. E i S, może być nie do odróżnienia od naciśnięcia W i D, z wyjątkiem czasu.
Ben
2

Jak wyjaśniono w innych odpowiedziach, USB wymaga dwukierunkowej komunikacji w ramach swojego działania. PS / 2, chociaż umożliwia komunikację dwukierunkową, nie wymaga go do wysyłania kluczy do komputera, ale wymaga ustawienia diod LED klawiatury.

Teoretycznie można zbudować urządzenie do duplikowania sygnału PS / 2 i przesłania go do drugiego komputera, a także odrzucić wszelkie polecenia z komputerów, aby móc przesyłać naciśnięcia klawiszy do wielu komputerów, ale diody LED klawiatury nie reagują na stany num lock, caps lock i scroll lock (lub dowolną inną zmianę stanu diod LED, na przykład w systemie Linux diody LED klawiatury są czasami używane do celów alternatywnych).

Nie jestem pewien, jak skomplikowany byłby taki projekt. Minęło trochę czasu, odkąd pracowałem z PS / 2, więc nie wiem, czy możesz po prostu zmostkować kilka przewodów / złączy, czy potrzebujesz aktywnego urządzenia (np. Mikrokontrolera), aby przekazywać polecenia w jednym kierunku, ale je odrzucić w innym. Jeśli masz mikrokontroler, możesz nawet ustawić urządzenie tak, aby mogło interpretować polecenia LED klawiatury i „łączyć” je do wyświetlania (np. Długie flashowanie diody LED, jeśli jest włączone na komputerze pierwszym, ale wyłączone na komputerze drugim, krótkie flashowanie dioda LED, jeśli jest włączona na komputerze drugim, ale wyłączona na komputerze pierwszym, dioda LED świeci światłem ciągłym, jeśli jest włączona na obu komputerach, i dioda LED wyłączona, jeśli jest wyłączona na obu komputerach). To byłoby jednak bardziej zaawansowane.

Ponadto, jeśli Twoim celem jest możliwość kontrolowania jednego komputera z innego komputera lub dwóch komputerów z tego samego biurka, czy cokolwiek innego, możesz przyjrzeć się:

  • VNC (pozwala kontrolować jeden komputer z drugiego za pośrednictwem sieci)
  • RDP (pozwala także kontrolować jeden komputer z drugiego za pośrednictwem sieci, wbudowany w Microsoft Windows, ale wymaga wersji Professional)
  • KVM (sprzęt, który pozwala przełączać jeden zestaw urządzeń peryferyjnych między dwoma komputerami)
Micheal Johnson
źródło
1

Przed klawiaturami USB klawiatury PS / 2 używały znacznie prostszego protokołu, w którym można podłączyć jedną klawiaturę do 2 urządzeń i sprawić, by działała. Wystarczy proste połączenie typu Y.

Starsze klawiatury USB nadal mają wbudowany tryb emulacji PS / 2; użycie jednego z tych fioletowych adapterów złączy pozwala podłączyć go do portu PS / 2 z tyłu komputera. Tak więc, używając kabla zrywalnego USB na PS / 2 na 2 komputerach, fioletowy adapter z powrotem na klawiaturę USB może dobrze działać.

Nowsze klawiatury USB zrezygnowały ze starszego trybu PS / 2, więc nie będą działać w tym przypadku.

Tomuo
źródło