Parçalar: Klavyede

Geçen hafta, otobüs korsan evrensel seri arayüz aracının yeni bir sürümünü tanıttık. Son ürün yazılımı güncellemesi, hem donanım versiyonları için bir Klavye Decoder Kütüphanesi’ni içeriyordu.

Klavyelerde, depolama alanına giderken bir ton var. Bir sonraki projeniz için bir giriş cihazı olarak nasıl geri dönüşüm yapacağınızı gösteririz.

Bağ

Otobüs korsanı
Klavyede PC (PIN #)

Sda
KBD verileri (3)

SCL
KBD Saat (1)

+ 5volts
VDD (5)

Gnd
GND (2)

Klavyelerde çift yönlü iki telli bir arayüz üzerinde iletişim kurar. Otobüs açık toplayıcıdır, ancak klavyeler zaten iç çekme dirençlerine sahiptir. Klavye protokolünde PC burada açıklanmıştır. Klavye protokolünü göstermek için otobüs korsan aracımızı kullandık, ancak aynı temel müdürler herhangi bir mikrodenetleyici için geçerlidir.

Otobüs korsanını, tabloda açıklandığı gibi klavyeye bağladık. Bunun klavye jakına delikten gelen bir dişi olduğuna inanıyoruz, ancak değerlendirmedik. Yeni soketler için bir kaynak biliyor musunuz?

Protokol

Klavye, tüm veri aktarımları için saat sinyalini sunar; PC tarafı bir köle cihazına benziyor. Mevcut otobüs korsan arabirim kütüphanelerinin hiçbiri harici bir saatle çalışmıyor, bu yüzden klavye kod çözücü kütüphanesinde kolay bir şekilde yazdık. Kütüphane klavyenin saat sinyaline bağlıdır ve klavye başarısız olursa veya bağlı değilse asılacaktır. Kütüphanemizi kendi projenizde kullanırsanız, Readbit () ve WROWIT () işlevlerinde bir zaman aşımı gecikmesi eklemeyin.

Klavye komut kodlarına PC

Kodu
Emretmek

0xed
Durum LED’lerini ayarla

0x
Echo 0xee

0xf0
Scancode türünü ayarla

0xf3
Tekrarlama oranını ayarla

0xf4
Klavye Etkinleştir

0xf5
Klavye Devre Dışı Bırak

0xfe
Son bayt yeniden gönder

0xff
Klavyeyi sıfırla

Bir PC, bir klavyenin çeşitli işlevlerini kontrol etmek için bu komutları kullanır. Klavye, komutlara bir onay bayt (OXFA) ile yanıt verir. Tecrübelerimize göre, komut gönderildikten kısa bir süre sonra reaksiyon baytı okunamıyorsa, klavye sıfırlanır.

PC Reaksiyon Kodlarına Klavye

Kodu
Tepki

0xfa
Kabullenmek

0xaa
Kendi kendine test geçti

0x
Yankı yanıtı

0xfe
Son bayt yeniden gönder

0x00 veya 0xff
Hata veya tampon taşması

Klavyenin bir dizi tek bayt reaksiyon koduna sahiptir. Birçok PC komutu 0xFA ile onaylanır. 0xAA, bir klavye sıfırlamasından sonra gönderilir.

Otobüs korsanını kur

Hiz> m
1. hiz

9. Klavyede PC
Mod> 9 <-set modu 900 Mod Seti KB kod çözücüde X02 PC hazır Klavyede PC>

İlk olarak, otobüs korsanını Klavye modunda, seçenek 9’da ayarlarız.

Klavyede PC> P <-Power Tedarik Kurulumu W / W TOGGLES 3.3VOLT TEDARİKİ? 1. Hayır 2. Evet Mod> 1 <-no 3.3Volt kaynağı W / w 5volt kaynağını geçiyor mu? 1. Hayır 2. Evet Mod> 2 <- 5Volt kaynağını kullanın 9xx tedarik yapılandırılmış, geçiş yapmak için w / w kullanın 9xx Gerilim Monitörü: 5V: 0.0 | 3.3V: 0.0 | VPULLUP: 0.0 | Klavyede PC> W <-capital 'w', beslemeyi açmak 9xx 5volt besleme Klavyede PC>

Daha sonra, otobüs korsanının güç kaynağını, klavyede 5 volt sunacak şekilde yapılandırıyoruz.

Klavyede PC> r-Klavyeden bayt
x30 pcatkb oku: Yok <-No verileri mevcut Klavyede PC>

Klavye Kütüphanesi, standart otobüs korsan sözdizimini takip eder. Sayısal değerler, klavyeye bayt olarak gönderilir, ‘R’ klavyedeki bir bayt okur. Protokol klavye tarafından saatli, bu nedenle bitsel işlemler devre dışı bırakılır. Eğer veri yoksa, okuma ‘Yok’ döndürür.

Klavyeyi Kur

Klavyede PC> 0xee r <-send 0xee, bir bayt okuyun X20 PCATKB Yaz: 0xee ACK <-Write Oxee, Ack Bit var x30 pcatkb okudu: 0xee <-read 0xee, Echo başarılı oldu Klavyede PC>

Eko komutunu 0xee kullanarak klavyeye bağlantıyı test edebiliriz. Bağlantılarımız doğruysa klavye 0xee’ye cevap verecektir.

Klavye, komutlara protokol seviyesinde bir ACK biti ile ve ardından bir ACK baytıyla yanıt verir. ACK baytı komutunu gönderdikten hemen sonra okunamıyorsa, test klavyemizin otomatik olarak sıfırlandığını bulduk.

Klavyede PC> 0xee <-Echo komutu X20 PCATKB Yaz: 0xee Ack <-wrote Echo, ACK var Klavyede pc> r <-bir bayt x30 pcatkb oku: 0xaa <-Read 0xaa, göstergeyi sıfırla Klavyede PC>

Burada, Echo komutunu göndermeye çalıştık ve sonra cevabı daha sonra okumaya çalıştık. Klavye otomatik olarak sıfırlanır ve 0xaa’yı yanıtlar, kendi kendine test geçti.

Klavyede PC> 0xff r r <-reset komutu, iki bayt okuyun X20 PCATKB Yaz: 0xFF ACK <-Write Reset komutu var, ACK var X30 PCATKB Oku: 0xFA <-command ACK BYTE x30 pcatkb oku: hiçbiri sıfırlamak için bir kez daha fazla Klavyede PC>

Klavye, 0xff komutunu yazarak sıfırlanır ve iki bayt okunur. Klavye, ikinci bayt okunana kadar sıfırlanmaz.

Klavyede pc> r <-bir bayt x30 pcatkb oku: 0xaa <-Reset başarısı Klavyede PC>

Sıfırlamadan sonra kısa bir süre, öz test (posta) sonuçları üzerindeki gücü okuyabiliriz, 0xaa sonrası başarısını belirtir.

Klavyede PC> 0xF5 R <-DrAcking Klavye X20 PCATKB Yaz: 0xF5 ACK <-WROTE komutu var x30 pcatkb oku: 0xFa <-Read ACK bayt Klavyede PC> 0xF4 R <-enable klavye X20 PCATKB Yaz: 0xF4 ACK <-WROTE komutu var x30 pcatkb oku: 0xFa <-Read ACK bayt Klavyede PC>

0xF5 disables klavye girişi. 0xF4 klavyeyi etkinleştirir ve tamponu temizler.

Klavyede PC> 0xed R 0B111 R <-set gösterge LED'leri X20 PCATKB Yaz: 0xed ACK <-set LED komutu var x30 pcatkb oku: 0xFa <-command kabul edildi X20 PCATKB Yaz: 0x07 ACK <-SEND LED değeri var X30 PCATKB Okuyun: 0xFa <-Değerü kabul edildi Klavyede PC>

Num, CAPS ve Kaydırma Kilidi LED’leri 0xed komutu tarafından kontrol edilir. İkinci bir baytın (OB1111) son üç biti, hangi LED’lerin ışığa olduğunu gösterir. Dört bayt operasyonun tümünü klavye zaman aşımı süresindeki gerçekleştirmek çok önemlidir veya klavye sıfırlanır.

Klavyede PC> 0xee r <-Echo Test komutu X20 PCATKB Yaz: 0xee ACK var x30 pcatkb okudu: 0xee Klavyede PC> 0xfe r <-Repreat Son bayt komutu X20 PCATKB Yaz: 0xfe ACK <-WRITE Tekrarlama Komutu X30 PCATKB Oku: 0xee <-previous bayt tekrarlandı Klavyede PC>

Son ilginç klavye komutu, tekrar bayt komutudur. 0xfe, klavyenin son bayt’ı tekrar göndermesine neden olur. Önceki iletimde bir hata olsaydı bu yardımcı bir komut.

Temel Presleri Oku

Anahtar presler, okuyana kadar klavye tarafından tamponlanır.

Klavyede pc> r-bayt
x30 pcatkb okudu: 0x29 <-pace scancode Klavyede pc> r-bayt
x30 pcatkb oku: 0xf0 <-key serbest bırakma scancode Klavyede pc> r-bayt
x30 pcatkb okudu: 0x29 <-pace scancode Klavyede PC>

Temel bir baskı, temel primleri temsil eden çok baytlık dizileri gönderir. Örnekte, 0x29 scancode olan boşluğa bastık. Temel bir serbest bırakıldığında, klavye, gerekli (0x29) için 0xF0 ve scancode gönderir. Her temel pres, benzer bir üç bölüm sırasına göre sonuçlanır.

Klavyede PC> R: 4 <-Read 4 bayt X31 PCATKB toplu okuma, 0x04 bayt: 0x29 0xF0 0x29 Yok <-pace scancode Klavyede PC>

Bu, önceki örneğin basitleştirilmiş bir sürümüdür. Üç bayt bireysel olarak okumak yerine, toplu okuma komutunu kullandık. Yine, uzay scancode dizisini alıyoruz. Var olmayan bir dördüncü bayt okuma girişimimiz başarısız olur.