Apakah keyboard USB hanya mengirim sinyal, atau apakah itu juga menerimanya dari komputer?

83

Keyboard tidak memerlukan sinyal dari komputer, cukup daya, bukan? ATAU apakah perlu menerima sinyal serta mengirimnya?

Sunting: Saya tidak berharap pertanyaan ini menghasilkan bunga sebanyak ini! Saya menanyakannya karena saya memiliki mimpi kosong untuk membangun doohickey yang menduplikasi sinyal sehingga keyboard dapat mengirim surat yang sama ke dua komputer sekaligus. Karena (dari apa yang saya dapat temukan dalam jawaban) komputer secara aktif mengontrol keyboard seperti perangkat lain, ini jelas tidak mungkin. Bukan masalah besar karena secara praktis saya tidak memiliki keterampilan untuk membangunnya!

Ne Mo
sumber
40
misalnya dapat menerima status kunci kunci. Banyak keyboard telah menunjukkan status kunci kunci. Cobalah untuk mengaktifkan caps lock, lalu ganti keyboard Anda, kemungkinan negara masih akan terkunci, informasi ini harus berasal dari pc.
Máté Juhász
8
bahkan keyboard PS / 2 menerima sinyal dari PC, jika tidak, bagaimana bisa menyalakan / mematikan LED?
phuclv
8
@Devsman Anda tidak dapat melakukan itu, jika tidak, keadaan kunci tidak akan sinkron karena dapat diubah oleh perangkat lunak. Sebagai contoh jika Anda mencolokkan 2 keyboard dan menekan numlock pada ini, LED di lain akan beralih. Hal yang sama dapat dicapai dengan keyboard layar
phuclv
3
Menyalakan
Dohn Joe
7
Perangkat USB harus memiliki data dua arah, hanya karena persyaratan handshaking awal untuk mengaktifkan kelas perangkat tertentu.
Steve

Jawaban:

101

Dari spesifikasi " Definisi Kelas Perangkat untuk Perangkat Antarmuka Manusia (HID)" versi 11.1 ":

Sinkronisasi antara status LED dan CAPS LOCK, NUM LOCK, SCROLL LOCK, COMPOSE, dan KANA events dikelola oleh host dan BUKAN keyboard. Jika menggunakan deskriptor keyboard di Lampiran B, status LED ditetapkan dengan mengirimkan laporan absolut 5-bit ke keyboard melalui permintaan Set_Report (Output).

Untuk mengubah LED keyboard, keyboard menerima perintah untuk melakukannya. Jadi itu bukan perangkat "input-only" (artinya hanya output data ke host).

Yang sedang berkata, ada proses negosiasi dan enumerasi dengan semua perangkat USB yang membutuhkan percakapan bolak-balik antara host dan perangkat. Anda tidak dapat memiliki perangkat USB "baca-saja".

Bahkan sebelum USB, pengontrol keyboard PC akan menerima perintah karena melakukan beberapa hal selain membaca keyboard ( referensi ):

Jika keyboard adalah unit sistem periferal yang terpisah (seperti di sebagian besar komputer desktop modern), pengontrol keyboard tidak langsung terhubung ke tombol, tetapi menerima scancode dari mikrokontroler yang tertanam di keyboard melalui semacam antarmuka serial. Dalam hal ini, pengontrol biasanya juga mengontrol LED keyboard dengan mengirimkan data kembali ke keyboard melalui kabel.

IBM PC AT menggunakan chip Intel 8042 untuk antarmuka ke keyboard. Komputer ini juga mengontrol akses ke jalur A20 untuk menerapkan solusi untuk bug chip di Intel 80286. 1 Pengontrol keyboard juga digunakan untuk memulai pengaturan ulang perangkat lunak agar CPU dapat beralih dari mode terlindungi ke mode nyata. mode 1 karena 286 tidak memungkinkan CPU untuk beralih dari mode terlindungi ke mode nyata kecuali CPU diatur ulang. Ini adalah masalah karena BIOS dan layanan sistem operasi hanya dapat dipanggil oleh program dalam mode nyata.

Perilaku ini telah digunakan oleh banyak perangkat lunak yang mengharapkan perilaku ini, dan oleh karena itu pengontrol keyboard terus mengendalikan garis A20 dan melakukan reset perangkat lunak CPU bahkan ketika kebutuhan untuk reset melalui pengontrol keyboard dihilangkan oleh kemampuan Intel 80386 untuk beralih ke mode nyata dari mode terlindungi tanpa reset CPU.

LawrenceC
sumber
15
Jika kita berbicara tentang hal-hal pada level "sinyal", bahkan jika kita lupa penghitungan dan LED, input USB didasarkan pada polling. Perangkat tidak dapat secara proaktif mengirim data ke host kecuali tuan rumah memintanya. Perangkat input hanya disurvei sangat sering untuk menanyakan apakah ada sesuatu yang baru untuk dilaporkan.
Matti Virkkunen
Maksud Anda "hanya keluaran", kan?
Daniel
Tidak yakin bagaimana mengatakannya tbh, keyboard adalah perangkat "input", dan "hanya input" berarti itu hanya mengirim data ke host, tetapi tidak pernah menerima. Tergantung pada apakah sudut pandangnya adalah keyboard atau host.
LawrenceC
1
@Daniel kebanyakan orang tidak akan menyebut keyboard sebagai perangkat "output". Periferal terpasang secara eksternal sehingga kami berdiri dari perspektif PC untuk menyebutnya input atau output. Ini PC yang ingin kita gunakan, bukan keyboard, mouse, atau periferal lainnya
phuclv
@ LưuVĩnhPhúc Saya tahu, tapi dia menulis So it is not an "input-only" device (meaning it only outputs data to the host)yang membingungkan saya
Daniel
56

Perangkat USB apa pun terlepas dari kelasnya membutuhkan komunikasi dua arah agar berfungsi . Setiap perangkat USB (atau fungsi dalam hal spesifikasi USB) direpresentasikan sebagai sekumpulan titik akhir yang dapat dianggap sebagai buffer yang menerima atau menerima data. Namun, bahkan titik akhir yang hanya dapat mengirim data menunggu paket khusus yang disebut token sebelum mereka dapat menjawab: masukkan deskripsi gambar di sini

(gambar dari sini , kotak abu-abu mewakili host USB, kotak putih mewakili fungsi USB)

Bahkan apa yang disebut transfer interupsi dilakukan dengan cara ini, dengan USB host polling menghubungkan perangkat menggunakan paket token. Apa yang berbeda antara transfer reguler (bulk) dan transfer interupsi adalah bahwa waktu pemungutan suara kecil dan dijamin dalam kasus terakhir. Namun, semua transfer dilakukan oleh tuan rumah.

Dmitry Grigoryev
sumber
18

Pertanyaan tersebut mencerminkan kesalahpahaman umum bahwa perangkat USB "mengirim" sesuatu ke PC mereka sendiri ketika tombol ditekan (atau mouse bergerak), itu sebabnya perhatian sangat tinggi. Faktanya, perangkat USB tidak mengirim apa-apa sampai mereka MENERIMA respons permintaan host. Satu pengecualian adalah proses bangun dari perangkat yang ditangguhkan.

Sementara USB terlihat sederhana di permukaan, sebenarnya fungsinya cukup rumit. Setiap perangkat USB baru harus "disebutkan" terlebih dahulu sebelum mulai berfungsi. Urutannya adalah sebagai berikut:

  1. Setelah keyboard dicolokkan, port host menerima sinyal "status koneksi" (untuk sinyal LS, D- ditarik TINGGI oleh keyboard).

  2. Kemudian tuan rumah mengatur port ke mode "port reset", dan USB PHY (driver lapisan fisik) mengirim "USB_RESET" ke bawah garis D + / D- (kedua garis digerakkan RENDAH untuk waktu yang ditentukan). Beberapa info tentang "port reset" untuk perangkat FS / HS dapat ditemukan di sini .

  3. Kemudian tuan rumah mulai paket paket batas bingkai pada interval 1 ms. Untuk perangkat berkecepatan rendah (LS) sebagai keyboard kabel biasa, ini hanyalah pulsa "tetap hidup", sedangkan untuk FS SOF khusus - paket awal-frame dibuat. Paket-paket ini menjaga perangkat dalam mode aktif dan mencegahnya melakukan SUSPEND berdaya rendah.

  4. Kemudian "enumerasi" dimulai. Tuan rumah mengirimkan permintaan untuk mendapatkan keterangan perangkat. Permintaan dikirim ke "pipa default" dengan alamat perangkat "0". [Hanya ada satu perangkat seperti itu saat ini - keyboard - karena semua perangkat lain di bus sudah harus memiliki alamat USB yang ditetapkan secara individual]

  5. Keyboard mengembalikan informasi yang diminta, sehingga tuan rumah akan dapat menentukan jenis driver apa yang harus dimuat.

  6. Tuan rumah mengirim transaksi yang mengharuskan perangkat untuk mengubah alamat default-nya ke alamat yang ditetapkan baru.

  7. Kemudian tuan rumah memulai babak baru komunikasi dengan perangkat, sekarang di alamat yang baru ditugaskan. Semua perangkat lain mengabaikan komunikasi ini karena tidak ditujukan kepada mereka.

  8. Tuan rumah mungkin membaca lebih banyak informasi dari beberapa deskriptor lain, dan akhirnya memilih "konfigurasi perangkat". Ini menyimpulkan proses pencacahan.

  9. Tergantung pada kelas perangkat USB, host mulai berkomunikasi dengan perangkat. Dalam kasus keyboard, host mengirim permintaan "IN" pada dasarnya secara berkala, pada dasarnya polling perangkat (bahkan jika pipa periodik ini disebut "interrupt" pipe). Jika keyboard memiliki tombol yang ditekan / ditekan, keyboard akan mengembalikan informasi ini. Jika tidak, tidak ada data yang akan dikembalikan ke driver perangkat.

Singkatnya, setiap perangkat USB harus menerima alamat unik dari host USB, dan dua host USB akan mengalami kesulitan untuk berkomunikasi dengan perangkat - tabrakan bus, ketidakcocokan alamat, penyadapan acak data keypress, dll. Protokol USB membuat tidak mungkin untuk berbagi perangkat antara dua host USB.

Ale..chenski
sumber
If keyboard has any key pressed/depressed, the keyboard will return this information- Bagaimana kunci hantu terjadi? Saya mendapat kesan bahwa keyboard harus mengirim peristiwa key-up dan key-down, yang akan menjelaskan mengapa jika acara key-up terjawab Anda akan memiliki kunci hantu ...
Shadow
2
@shadow, tidak yakin apa yang Anda tanyakan. Tingkat polling untuk keyboard, jika saya ingat, adalah 8 ms. Anda menekan tombol secara tidak sinkron, sehingga beberapa acara (buat atau hancurkan) dapat masuk ke frame polling yang berbeda, beberapa acara akan terjadi tepat ketika permintaan IN sedang berlangsung. Pengontrol keyboard yang baik harus menangani semua perlintasan acara dengan benar, dan tidak boleh melewatkan acara. Saya tidak tahu mengapa keyboard menghasilkan "kunci hantu", tetapi tidak ada hubungannya dengan protokol USB.
Ale..chenski
4
Kunci hantu terkait dengan cara kunci fisik dihubungkan. Pengontrol keyboard yang lebih murah tidak memiliki pin tunggal untuk setiap tombol, melainkan mereka memiliki sistem kisi pengalamatan misalnya baris dan kolom di mana pengontrol menegaskan kabel kolom, dan mencari sinyal pada kabel baris. Dalam skenario ini, menekan dua tombol, misalnya E dan S secara bersamaan mungkin tidak dapat dibedakan dengan menekan W dan D, kecuali berdasarkan waktu.
Ben
2

Seperti jawaban lain telah menjelaskan, USB memerlukan komunikasi dua arah sebagai bagian dari cara kerjanya. PS / 2, sementara memungkinkan komunikasi dua arah, tidak memerlukannya untuk mengirim kunci ke komputer, tetapi mengharuskannya untuk mengatur LED keyboard.

Secara teoritis, Anda dapat membangun perangkat untuk menduplikasi sinyal PS / 2 dan mengirimkannya ke komputer kedua, dan membuang perintah apa pun dari komputer, sehingga Anda dapat mengirim penekanan tombol ke beberapa komputer tetapi LED keyboard tidak akan menanggapi status num lock, caps lock, dan scroll lock (atau perubahan status LED lainnya, misalnya di Linux, LED keyboard kadang-kadang digunakan untuk tujuan alternatif).

Saya tidak yakin seberapa kompleks proyek semacam itu. Sudah lama sejak saya bekerja dengan PS / 2, jadi saya tidak tahu apakah Anda bisa dengan mudah menjembatani beberapa kabel / konektor atau jika Anda memerlukan perangkat aktif (mis. Mikrokontroler) untuk mengirimkan perintah dalam satu arah tetapi membuangnya di yang lain. Jika Anda memang memiliki mikrokontroler, Anda bahkan dapat membuat perangkat sedemikian rupa sehingga dapat menginterpretasikan perintah LED keyboard dan "menggabungkan" mereka untuk ditampilkan (mis. Flash panjang LED jika dihidupkan pada komputer satu tetapi dimatikan pada komputer dua, flash pendek) LED jika dihidupkan pada komputer dua tetapi dimatikan pada komputer satu, LED stabil jika menyala di kedua komputer, dan LED mati jika dimatikan pada kedua komputer). Itu akan lebih maju.

Juga, jika tujuan Anda adalah untuk dapat mengendalikan satu komputer dari komputer lain, atau dua komputer dari meja yang sama, atau apa pun, Anda mungkin ingin melihat ke dalam:

  • VNC (memungkinkan mengendalikan satu komputer dari komputer lain melalui jaringan)
  • RDP (juga memungkinkan untuk mengontrol satu komputer dari komputer lain melalui jaringan, dibangun ke dalam Microsoft Windows tetapi membutuhkan versi Professional)
  • KVM (perangkat keras yang memungkinkan Anda mengganti satu set periferal antara dua komputer)
Micheal Johnson
sumber
1

Sebelum keyboard USB, keyboard PS / 2 menggunakan protokol yang jauh lebih sederhana di mana dimungkinkan untuk memiliki satu keyboard yang terhubung ke 2 perangkat dan membuatnya bekerja. Hanya diperlukan koneksi Y sederhana.

Keyboard USB yang lebih lama masih memiliki mode emulasi PS / 2 bawaan; menggunakan salah satu adaptor konektor ungu memungkinkan Anda mencolokkannya ke port PS / 2 di bagian belakang komputer. Jadi, menggunakan kabel breakout USB ke PS / 2 pada 2 komputer, maka adaptor ungu yang kembali ke keyboard USB Anda mungkin berfungsi.

Keyboard USB yang lebih baru menjatuhkan mode legacy PS / 2, jadi tidak akan berfungsi untuk kasus ini.

Tomuo
sumber