NKRO ke USB. Masalah dan kruk dalam solusi mereka

Halo GT. Dalam salah satu posting saya sebelumnya (khususnya, tentang keyboard SteelSeries Apex M800) monah_tukmengajukan pertanyaan menarik di komentar: bagaimana NKRO (rollover n-key, penjepitan simultan dari beberapa tombol) diimplementasikan pada keyboard USB. Pertanyaan ini menarik minat saya, dan ketika saya menggali sedikit lebih dalam ... Secara umum, ada kandang Augean sehingga ada informasi yang cukup untuk seluruh posting, walaupun sedikit. Tampaknya USB 2.0, bahkan dalam mode kecepatan rendah, menyediakan transmisi hingga 1500 Kbps (sekitar 185 KB / s), apa masalah transmisi penekanan tombol? Tapi tidak sesederhana itu.





Untuk mencari tahu masalah apa yang dimiliki koneksi USB, kita harus mempelajari sejarah, dan sedikit ke dalam desain keyboard.

Masalah Rollover: ghosting


Katakanlah Anda memiliki keyboard dengan tombol standar 104/105. Dalam kasus ideal, untuk mendapatkan informasi akurat 100% tentang kunci mana yang dijepit, Anda akan membutuhkan 1 "kabel" lebih banyak daripada tombol: 104/105 kabel dari tombol, dan satu "ground" yang umum.

Tentu saja, kabel seperti itu akan sulit dan mahal, begitu banyak keyboard murah digunakan di dalam apa yang disebut. "Matrix" - satu set kontak horizontal dan vertikal berpotongan. Pengontrol memindai setiap kolom, mendeteksi sinyal, mulai memindai "baris" dan menghitung tombol yang ditekan.



Jika Anda menekan, katakanlah, S dan G dan ingin menambahkan beberapa kunci ketiga berturut-turut yang berbeda, controller tidak bisa lagi mengatakan yang mana dari garis ditutup: di terbaik itu akan tidak mendeteksi salah satu dari tiga, paling buruk - dari untuk fitur pengkabelan, saya akan menggambar keempat lagi yang tidak Anda klik. Ini disebut ghosting.

Perilaku ini diperlakukan dengan berbagai trik di bidang perkabelan: kombinasi yang paling populer digantung pada "garis" yang berbeda, garis fungsi, yang sering merupakan elemen hotkey, diberi baris terpisah. Tata letak tetap cukup sederhana, tetapi keyboard tidak mahal jarang 5 + KRO - biasanya terbatas pada 3-4 saat tombol ditekan.

Selain itu, pengontrol dapat memblokir "tetangga" di blok untuk menghapus operasi "ekstra". Artinya, secara formal keyboard dapat mendukung 6KRO, dan jujur ​​membiarkan CTRL + AWFBNM ditekan pada saat yang sama, tetapi tidak membiarkan AWSD bertahan, terbatas untuk memicu tipe WAS atau WDS.

Anda dapat memeriksa keyboard Anda dengan semacam ini hal . Ini memiliki beberapa keterbatasan, tetapi mereka disebabkan oleh kenyataan bahwa sistem akan mencegat penekanan tombol lebih awal dari browser. Misalnya, Print Screen atau Alt + Tab akan berfungsi sebelum halaman dapat "menangkap" mereka.

Sekarang, sistem “murah” yang mengerikan (dari sudut pandang pekerjaan) ini hampir sepenuhnya digantikan oleh matriks “terbuka” yang sedikit lebih kompleks, namun demikian, masih ada contoh, terutama sering di semua jenis keyboard lengkap “satu dolar” yang pergi ke komputer “dari luar” kotak. "

Lebih mahal (seringkali gaming atau keyboard bisnis) menggunakan sirkuit yang lebih kompleks, beberapa pengendali, koneksi individual, papan sirkuit tercetak berlapis-lapis, secara umum, berbagai pendekatan yang mengurangi atau sepenuhnya menghilangkan ghosting, tetapi mengarah pada peningkatan harga perangkat. Kami menemukan potensi masalah perangkat keras NKRO, kami beralih ke masalah perangkat lunak.

Keyboard hingga USB


Konektor umum utama untuk menghubungkan keyboard dan mouse ke USB adalah PS / 2. Inilah yang rapi:



Pesonanya adalah bahwa, tunduk pada semua standar, dimungkinkan untuk bekerja dengan mouse dan keyboard dari satu konektor dan splitter, dan perangkat input itu sendiri menghasilkan interupsi dan mengirim informasi tentang tombol yang ditekan / gerakan kursor. Di sana, setidaknya putar wajah Anda pada keyboard, jika semuanya dipisahkan dengan benar, dan rollover tidak bertumpu pada kemampuan perangkat keras keyboard - keyboard akan mengirimkan segala sesuatu yang "dibaca" oleh pengontrol.

Sayangnya, PS / 2 memiliki beberapa kelemahan (seperti masalah dengan Plug'n'Play dan konektor yang tidak nyaman), dan keberadaan USB menyebabkan fakta bahwa periferal PS / 2 hampir sepenuhnya didorong keluar dari pasar. Namun demikian, ada motherboard yang cukup modern dengan USB 3.0 dan dua (!) PS / 2:


Gabungan port, omong-omong, karena fitur pinout (catu daya umum, pin berbeda untuk data + / data- di mouse dan keyboard), juga memungkinkan Anda untuk terhubung kedua perangkat melalui satu port menggunakan adaptor:



Masalah NKRO USB: USB HID yang harus disalahkan


Agar keyboard USB berfungsi sebelum memuat sistem (yaitu, di BIOS / UEFI), driver HID standar digunakan, yang dikembangkan untuk dukungan seluas mungkin untuk keyboard dan host USB. Kelas USB HID menjelaskan perangkat sehingga implementasi standar dari host USB dan perangkat USB dapat berkomunikasi tanpa menginstal driver khusus.

Keyboard standar (dirancang dengan dukungan untuk standar USB HID) menggunakan aliran data output (output dari host USB) (titik akhir tumpukan USB) untuk mendapatkan informasi tentang status indikator (Jumlah / Caps / Tombol Gulir), dan aliran input (berasal dari keyboard, "Masuk" untuk host USB) untuk mengirim informasi tentang tombol yang ditekan.

Jika Anda mengikuti spesifikasi USB HID v1.11 yang paling ketat, yang mendukung mode Boot USB (dan memungkinkan Anda menggunakan keyboard USB untuk masuk ke BIOS dan bekerja di dalamnya), keyboard akan mengirim gangguan ke CPU setiap kali host USB melakukan polling. , terlepas dari apakah kondisinya telah berubah atau belum. Dengan demikian, karya keyboard PS / 2 "ditiru" dengan overhead yang minimal.

Dalam hal ini, keyboard berfungsi sesuai dengan standar USB 1.1 (kadang-kadang 2.0) Kecepatan rendah, dan kecepatan polling port adalah 100 Hz. Dalam mode ini, panjang paket maksimum pada USB adalah 8 byte, dan dikirim setiap 10 ms. Salah satu byte dicadangkan, sehingga 7 byte tetap agar keyboard berfungsi, mis. jumlahnya cukup untuk menyandikan pers tombol pengubah apa pun dan enam lainnya.

Ternyata siapa keyboard bekerja dalam mode 6-KRO, dan itu standar untuk sebagian besar keyboard USB. Untuk melakukan lebih sedikit adalah mungkin (kadang-kadang secara sadar, kadang tidak, karena ghosting dan kemacetan kunci), lebih - hanya melanggar spesifikasi USB HID.

Setelah memuat, sistem dapat meningkatkan frekuensi polling port USB, memuat driver khusus yang memungkinkan, misalnya, tombol multimedia dan makro.

Implementasi NKRO USB


Pembatasan bypass USB HID, pada kenyataannya, ada dua jenis. Dalam kasus pertama, keyboard terdeteksi oleh perangkat lunak berpemilik, ditransfer ke beberapa mode khusus dan mengirimkan data dari pengontrol langsung ke driver, dan itu sudah berkomunikasi dengan sistem. The minus dari keputusan seperti itu adalah peningkatan yang disebut input lag: input lag. Wawancara kenalan, saya hanya menemukan satu keyboard yang memungkinkan saya untuk menekan 10 tombol ketika terhubung melalui USB: kata benda Cina terry dengan zakos di bawah "gaming". Pemiliknya sudah tinggal di Irkutsk, jadi tidak mengherankan bahwa dia hanya menemukan hal seperti itu.

Solusi kedua menawan dengan kesederhanaan dan kecerdikannya, tetapi sebenarnya itu adalah penopang:


Terima kasih atas tangkapan layar Ketakutan saya, hal seperti itu diperhatikan untuk Logitech G710 +

Keyboard hanya disajikan ke sistem oleh beberapa perangkat HID, yang masing-masing memiliki 6KRO sendiri. Survei cepat dari kenalan yang meminta mereka menentukan model keyboard dan mengirim tangkapan layar seperti itu menunjukkan bahwa Logitech , A4tech , Cougar , dan SteelSeries menggunakan peretasan ini - secara umum, semua orang yang menemukan NKRO dalam deskripsi keyboard USB.

Perhatian! Sebelum memeriksa keyboard Anda, pastikan Anda tidak memiliki mouse USB multi-tombol canggih yang terhubung (bahkan secara nirkabel). Karena semua keindahan multi-tombol dengan cara yang sama dapat berpura-pura menjadi keyboard "ekstra".

Kesimpulan


Sebenarnya, itu saja. Hampir semua produsen telah memilih metode "penopang", tetapi yang berfungsi dan tidak menciptakan masalah khusus bagi pengguna, dan NKRO yang jujur ​​(well, relatif jujur) pada USB dapat dicapai.

Source: https://habr.com/ru/post/id384797/


All Articles