Bir USB klavyesi yalnızca sinyalleri mi gönderiyor veya bilgisayardan mı alıyor?


83

Klavye bilgisayardan herhangi bir sinyale ihtiyaç duymaz, sadece güç değil mi? VEYA sinyalleri almanın yanı sıra göndermesi gerekiyor mu?

Düzenleme: Bu sorunun bu kadar ilgi yaratmasını beklemiyordum! Bunu sordum çünkü klavyenin aynı mektubu aynı anda iki bilgisayara gönderebilmesi için sinyali kopyalayan bir doohickey inşa etme hayalini kuruyordum. (Cevaplarda yapabileceklerimden), bilgisayar klavyeyi başka herhangi bir cihaz gibi aktif olarak kontrol ettiğinden, bu açıkça mümkün değildir. Pratik olarak büyük bir olay değil zaten onu inşa etmek için becerilerim yoktu!


40
örneğin kilit anahtarlarının durumunu alabilir. Birçok klavyede, kilit tuşlarının durumunu belirten ledler bulunur. Büyük harf kilidini açmayı deneyin, sonra klavyenizi değiştirin, muhtemelen durum hala kilitli olacak, bu bilgilerin bilgisayardan gelmesi gerekiyor.
Máté Juhász

8
PS / 2 klavyeler bile PC'den sinyal alıyor, aksi halde LED'leri nasıl açıp kapatabilir?
phuclv

8
@Devsman bunu yapamazsınız, aksi takdirde yazılım tarafından değiştirilebileceğinden kilitleme durumu senkronize olmaz. Örneğin, 2 klavyeyi takarsanız ve buna basarsanız, diğerindeki LED değişir. Aynı ekran klavyesi ile elde edilebilir
phuclv


7
Bir USB cihazı, belirli bir cihaz sınıfını etkinleştirmek için başlangıçtaki tokalaşmanın gereklilikleri nedeniyle iki yönlü verilere sahip olmalıdır.
Steve

Yanıtlar:


101

" İnsan Arabirim Cihazları için Cihaz Sınıfı Tanımı (HID)" sürüm 11.1 "spesifikasyonundan:

LED durumları ve CAPS LOCK, NUM LOCK, SCROLL LOCK, COMPOSE ve KANA olayları arasında senkronizasyon, ana bilgisayar tarafından yapılır, klavye ile yapılmaz. Klavye tanımlayıcısını Ek B'de kullanıyorsanız, LED durumları klavyeye bir Set_Report (Output) isteği ile 5 bitlik mutlak rapor gönderilerek ayarlanır .

Klavye LED'lerini değiştirmek için, klavye bunu yapmak için bir komut kabul eder. Bu yüzden "sadece girdi" bir cihaz değildir (yani sadece ana bilgisayara veri gönderir).

Söylendiği gibi, ana bilgisayar ve cihaz arasında ileri geri konuşmayı gerektiren tüm USB cihazlarıyla bir müzakere ve numaralandırma işlemi var. "Salt okunur" bir USB cihazına sahip olamazsınız.

USB'den önce bile, PC klavye denetleyicisi komutları kabul eder çünkü klavyeyi okumaktan başka bir şey yapmıştır ( başvuru ):

Bir klavye ayrı bir çevresel sistem birimi ise (çoğu modern masaüstü bilgisayarında olduğu gibi), klavye denetleyicisi tuşlara doğrudan bağlı değildir, ancak klavyeye gömülü bir mikrodenetleyiciden bir tür seri arabirim aracılığıyla taramayı alır. Bu durumda, kontrol cihazı genellikle klavyenin LED'lerini kablo üzerinden klavyeye veri göndererek kontrol eder.

IBM PC AT, klavyeye arabirim oluşturmak için bir Intel 8042 yongası kullandı. Bu bilgisayar, Intel 80286'da bir yonga hatası için bir geçici çözüm uygulamak üzere A20 hattına erişimi de kontrol etti. 1 Klavye denetleyicisi, CPU'nun korumalı moddan gerçekliğe geçmesine izin vermek için bir yazılım CPU sıfırlama işlemini başlatmak için de kullanıldı. mod 1, çünkü 286, CPU sıfırlanmadığı sürece CPU’nun korumalı moddan gerçek moda geçmesine izin vermedi. Bu bir problemdi çünkü BIOS ve işletim sistemi servisleri sadece gerçek moddaki programlar tarafından çağrılabiliyordu.

Bu davranışlar, bu davranışı bekleyen çok sayıda yazılım tarafından kullanılmıştır ve bu nedenle klavye denetleyicileri, A20 hattını kontrol etmeye ve klavye denetleyicisi aracılığıyla sıfırlama gereksinimi Intel 80386’nın geçiş kabiliyetine zorlandığında bile sıfırlandı CPU sıfırlama olmadan korumalı moddan gerçek mod.


15
“Sinyaller” seviyesindeki bir şeyden bahsediyorsak, sayım ve LED'leri unutsak bile, USB girişi yoklamaya dayanır. Bir cihaz, bilgisayar istemezse proaktif olarak ana bilgisayara veri gönderemez. Bir giriş cihazı rapor edilecek yeni bir şey olup olmadığını sormak için çok sık sorgulanır.
Matti Virkkunen

"Sadece çıktı" demek mi istiyorsun?
Daniel

Klavyenin bir "giriş" cihazı olduğunu ve sadece "giriş" kelimesini nasıl kullanacağını bilmediğimden emin olunca, sadece ana bilgisayara veri gönderir, ancak asla almaz. Bakış açısının klavye mi yoksa ana bilgisayar mı olduğuna bağlı olarak değişir.
LawrenceC

1
@Daniel çoğu insan klavye "çıkış" cihazı çağırmaz. Çevre birimleri harici olarak bağlanmıştır, bu yüzden onları giriş veya çıkış olarak adlandırmak için bilgisayarın bakış açısına karşı dururuz. Kullanmak istediğimiz bilgisayar, klavye, fare veya diğer çevre birimleri değil
phuclv

@ LưuVĩnhPhúc Biliyorum, ama o So it is not an "input-only" device (meaning it only outputs data to the host)beni şaşırtıyor yazıyor
Daniel

56

Sınıfından bağımsız olarak herhangi bir USB cihazının çalışması için iki yönlü iletişim gerekir . Her USB cihazı (veya USB teknik özelliklerine göre işlev görür ) veri kabul eden veya alan tampon olarak düşünülebilecek bir dizi bitiş noktası olarak gösterilir. Ancak, yalnızca veri gönderebilen son noktalar bile , cevap vermeden önce token adlı özel bir paket bekler : görüntü tanımını buraya girin

( buradan görüntü , gri kutular USB sunucuyu, beyaz kutular USB işlevini gösterir)

Hatta sözde kesinti aktarımları bu şekilde yapılır, USB ana bilgisayarının token paketlerini kullanarak bağlı cihazları sorgulaması ile. Düzenli (toplu) transferler ve kesintiler arası transferler arasında farklılık gösteren, oy verme zamanının ikinci durumda küçük ve garantili olmasıdır. Yine de, tüm transferler ev sahibi tarafından başlatılır.


18

Soru, USB cihazlarının bir tuşa basıldığında (veya fare hareket ettiğinde) PC'ye kendilerine bir şey "gönderdiği" gibi yanlış bir anlayışı yansıtıyor, bu yüzden bu kadar dikkat çekiyor. Aslında, USB aygıtları ana bilgisayardan gelen isteği kabul edene kadar hiçbir şey göndermez. Bunun bir istisnası, askıya alınmış bir cihazdan uyandırma işlemidir.

USB yüzeyde basit görünse de, aslında işleyişi oldukça karmaşık. Herhangi bir yeni USB cihazı çalışmaya başlamadan önce "numaralandırılmalıdır". Sıra aşağıdaki gibidir:

  1. Bir klavye takıldıktan sonra, ana bilgisayar portu "bağlantı durumu" sinyali alır (LS sinyalleri için, D- klavye ile YÜKSEK çekilir).

  2. Ardından ana bilgisayar bağlantı noktasını "bağlantı noktası sıfırlama" moduna ayarlar ve USB PHY (fiziksel katman sürücüsü) D + / D satırlarına "USB_RESET" gönderir (her iki satır da belirtilen süre boyunca DÜŞÜK sürülür). FS / HS cihazları için "port reset" ile ilgili bazı bilgileri burada bulabilirsiniz .

  3. Ardından, ana bilgisayar 1ms aralıkta çerçeve sınır paketleri çıkarmaya başlar. Sıradan kablolu klavye olarak Düşük hızlı (LS) aygıtlar için bunlar sadece "canlı tut" darbeleridir, FS için ise özel SOF - kare başlangıcı paketleri üretilir. Bu paketler, cihazı aktif modda tutar ve düşük güçlü SUSPEND ile çalışmasını önler.

  4. Sonra "numaralandırma" başlar. Ana bilgisayar, cihaz tanımlayıcısını almak için bir istek gönderir. İstek, "0" cihaz adresli "varsayılan boruya" gönderilir. [Şu anda böyle bir cihaz var - klavye - veri yolu üzerindeki diğer tüm cihazların kendilerine atanmış USB adreslerine zaten sahip olması gerektiği için]

  5. Klavye istenen bilgileri verir, böylece ana bilgisayar ne tür bir sürücünün yüklenmesi gerektiğini belirleyebilir.

  6. Ana bilgisayar, aygıtın varsayılan adresini yeni atanmış adrese değiştirmesini gerektiren bir işlem gönderir.

  7. Ardından, ana makine şimdi yeni atanan adreste cihazla yeni bir iletişim turu başlatır. Diğer tüm cihazlar bu iletişimi görmezden gelir çünkü kendilerine yönelik değildir.

  8. Ana bilgisayar diğer birkaç tanımlayıcıdan daha fazla bilgi okuyabilir ve sonunda "cihaz yapılandırması" nı seçer. Bu sayım işlemine son verir.

  9. USB cihaz sınıfına bağlı olarak, ana bilgisayar cihazla iletişim kurmaya başlar. Klavyede, ana bilgisayar düzenli olarak "IN" isteği gönderir, cihazı temelde çağırır (bu periyodik boruya "kesme" borusu dense bile). Klavyede herhangi bir tuşa basılmış / basılmışsa, klavye bu bilgiyi döndürür. Aksi takdirde, hiçbir veri cihaz sürücüsüne döndürülmez.

Kısacası, her USB cihazı USB ana bilgisayarından benzersiz bir adres almak zorundadır ve iki USB ana bilgisayarı bir cihazla iletişim kurmakta zorlanacaktır - veriyolu çarpışması, adres uyuşmazlığı, tuşa basma verilerinin rastgele kesilmesi vb. İki USB ana bilgisayarı arasındaki cihaz.


If keyboard has any key pressed/depressed, the keyboard will return this informationsonra hayalet anahtarlar nasıl ortaya çıkar? Klavyelerin key-up ve key-down olayları göndermesi gerektiği fikrindeydim, ki eğer bir key-up olayı kaçırılırsa neden hayalet anahtarlara sahip olursunuz ...
Shadow

2
@shadow, ne sorduğunuzu bilmiyorsunuz. Hatırlarsam klavye için oy kullanma hızı 8 ms'dir. Tuşlara eşzamansız olarak basıyorsunuz, bu nedenle bazı olaylar (yap veya boz) farklı yoklama çerçevelerine gidebilir, bazı olaylar tam olarak IN isteği devam ederken gerçekleşir. İyi bir klavye denetleyicisi tüm olay geçişlerini doğru şekilde işlemeli ve eksik olayları olmamalıdır. Klavyelerin neden "hayalet anahtarlar" oluşturduğu hakkında hiçbir fikrim yok, ancak USB protokolüyle ilgisi yok.
Ale .. chenski

4
Hayalet anahtarlar, fiziksel anahtarların kablolu olma şekli ile ilgilidir. Daha ucuz klavye kontrolörleri her tuş için tek bir pime sahip değildir, aksine kontrolörün sütun telini yerleştirdiği ve satır telindeki sinyali arayan örneğin satır ve sütunlarla ilgili bir ızgara sistemine sahiptirler. Bu senaryoda, örneğin E ve S'ye aynı anda iki tuşa basmak, zamanlama dışında W ve D'ye basmaktan ayırt edilemeyebilir.
Ben

2

Diğer cevapların açıkladığı gibi, USB, çalışma şeklinin bir parçası olarak iki yönlü iletişim gerektirir. PS / 2, iki yönlü iletişime izin verirken, anahtarları bilgisayara göndermek için istemez, ancak klavye LED'lerini ayarlamasını gerektirir.

Teorik olarak, PS / 2 sinyalini çoğaltmak ve ikinci bir bilgisayara göndermek için bir cihaz oluşturabilir ve herhangi bir komutu bilgisayarlardan atabilirsiniz, böylece tuş basımlarınızı birden fazla bilgisayara gönderebilirsiniz, ancak klavye LED'leri num lock'a cevap verin, caps lock ve scroll lock durumlarına (ya da örneğin herhangi bir LED durumundaki örneğin Linux'ta klavye LED'leri bazen alternatif amaçlar için kullanılır).

Böyle bir projenin ne kadar karmaşık olacağından emin değilim. PS / 2 ile çalıştığımdan beri bir süre geçti, bu yüzden birkaç kabloyu / konektörü basitçe köprüleyip köprüleyemeyeceğinizi veya komutları bir yönde iletmek için aktif bir aygıta (örneğin mikrodenetleyici) ihtiyaç duyacağınızı, ancak onları atabileceğinizi bilmiyorum diğerinde. Bir mikrodenetleyiciniz varsa, aygıtı bile klavye LED komutlarını yorumlayabilecek ve bunları ekran için "bir araya getirebilecek" hale getirebilirsiniz (örneğin, bilgisayar açıksa LED uzun süre yanıp söner, bilgisayar kapalıyken kısa, kısa flaş iki bilgisayarda açık, ancak bilgisayarda bir kapalıyken, her iki bilgisayarda da açıksa LED sürekli yanar ve her iki bilgisayarda da kapalıysa LED yanar). Bu olsa daha gelişmiş olurdu.

Ayrıca, amacınız bir bilgisayarı başka bir bilgisayardan ya da aynı masadaki iki bilgisayarı ya da her neyse kontrol edebilmekse, şunlara bakmak isteyebilirsiniz:

  • VNC (bir bilgisayarı başka bir ağ üzerinden kontrol etmenizi sağlar)
  • RDP (ayrıca, bir bilgisayarı başka bir bilgisayardan ağ üzerinden kontrol etmenize olanak sağlar, Microsoft Windows'ta yerleşiktir ancak Profesyonel sürüm gerektirir)
  • KVM (iki bilgisayar arasında bir çevre birimi kümesi değiştirmenize izin veren bir donanım parçası)

1

USB klavyelerden önce, PS / 2 klavyeleri, 2 cihaza bağlı bir klavyenin olması ve çalışmasının mümkün olduğu yerlerde daha basit bir protokol kullandı. Gereken tek şey basit bir Y bağlantısı.

Eski USB klavyeler hala yerleşik PS / 2 emülasyon moduna sahiptir; bu mor konektör adaptörlerinden birini kullanmak, bilgisayarın arkasındaki PS / 2 bağlantı noktasına takmanıza izin verir. Bu nedenle, 2 bilgisayarda USB'den PS / 2 koparma kablosu kullanmak, daha sonra USB klavyenizdeki mor adaptör iyi işe yarayabilir.

Daha yeni USB klavyeler eski PS / 2 modunu düşürmüştür, bu nedenle bu durumda çalışmaz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.