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ć!
Odpowiedzi:
Ze specyfikacji „ Definicja klasy urządzeń dla urządzeń interfejsu człowiek (HID)” wersja 11.1 ”:
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 ):
źródło
So it is not an "input-only" device (meaning it only outputs data to the host)
co mnie myliKaż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ć:
(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.
źródło
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:
Po podłączeniu klawiatury port hosta odbiera sygnał „status połączenia” (dla sygnałów LS, D- jest ciągnięty WYSOKIE przez klawiaturę).
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 .
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.
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]
Klawiatura zwraca żądane informacje, więc host będzie mógł określić, jaki rodzaj sterownika powinien zostać załadowany.
Host wysyła transakcję wymagającą od urządzenia zmiany domyślnego adresu na nowy przypisany adres.
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.
Host może odczytać znacznie więcej informacji z kilku innych deskryptorów i ostatecznie wybierze „konfigurację urządzenia”. To kończy proces wyliczania.
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.
ź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 ...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ę:
źródło
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.
źródło