Minggu lalu kami memperkenalkan versi baru dari alat antarmuka Serial Universal Universal. Pembaruan firmware terakhir termasuk di perpustakaan decoder keyboard untuk kedua versi perangkat keras.
Ada satu ton tua di keyboard yang menuju ke tempat pembuangan sampah. Kami akan menunjukkan kepada Anda cara mendaur ulang satu sebagai perangkat input untuk proyek Anda berikutnya.
Koneksi
Bajak laut bus.
PC di keyboard (pin #)
SDA.
Data KBD (3)
SCL
KBD Clock (1)
+ 5volts.
VDD (5)
Gnd.
GND (2)
Pada keyboard berkomunikasi melalui antarmuka dua kawat dua arah. Bus adalah kolektor terbuka, tetapi keyboard sudah memiliki resistor pull-up internal. PC pada protokol keyboard dijelaskan di sini. Kami menggunakan alat bajak laut bus kami untuk menunjukkan protokol keyboard, tetapi prinsipal dasar yang sama berlaku untuk mikrokontroler apa pun.
Kami menghubungkan bajak laut bus ke keyboard seperti yang dijelaskan dalam tabel. Kami percaya bahwa ini adalah wanita melalui-lubang di jack keyboard, tetapi kami belum mengevaluasinya. Apakah Anda tahu sumber untuk soket baru?
Protokol
Keyboard menawarkan sinyal clock untuk semua transfer data; Sisi PC menyerupai perangkat budak. Tak satu pun dari pustaka antarmuka bajak laut yang ada bekerja dengan jam eksternal, jadi kami menulis yang mudah di perpustakaan decoder keyboard. Perpustakaan tergantung pada sinyal jam keyboard, dan itu akan menggantung jika keyboard gagal atau tidak terhubung. Jika Anda menggunakan perpustakaan kami di proyek Anda sendiri, pertimbangkan untuk menambahkan penundaan batas waktu dalam fungsi READBIT () dan WRITITBIT ().
PC ke Kode Perintah Keyboard
Kode
Memerintah
0xed.
Tetapkan LED Status
0xee.
Echo 0xee.
0xf0.
Atur Scancode Type.
0xf3.
Atur REATER RATE.
0xf4.
Keyboard mengaktifkan
0xf5.
Keyboard menonaktifkan
0xfe.
Kirim ulang byte terakhir.
0xff.
Atur ulang keyboard
PC menggunakan perintah-perintah ini untuk mengontrol berbagai fungsi pada keyboard. Keyboard merespons perintah dengan byte pengakuan (Oxfa). Dalam pengalaman kami, keyboard akan diatur ulang jika byte reaksi tidak segera dibaca setelah perintah dikirim.
Keyboard ke kode reaksi PC
Kode
Tanggapan
0xfa.
Mengakui
0xAA.
Tes mandiri berlalu
0xee.
Respons gema
0xfe.
Kirim ulang byte terakhir.
0x00 atau 0xff.
Kesalahan atau buffer overflow
Keyboard memiliki sejumlah kode reaksi byte tunggal. Banyak perintah PC diakui dengan 0xFA. 0xAA dikirim setelah pengaturan ulang keyboard.
Siapkan bajak laut bus
Hiz> M.
1. Hiz.
…
9. PC di keyboard
Mode> 9 <-Mode
Set mode 900.
X02 PC di KB decoder siap
PC di keyboard>
Pertama, kami mengatur bajak laut bus untuk mode keyboard, opsi 9.
PC di keyboard> P <-power setup pasokan W / W Beralih Pasokan 3.3Volt? 1. No. 2. Ya Mode> 1 <-no 3.3Volt suplai W / W Mengalihkan Persediaan 5Volt? 1. No 2. Ya Mode> 2 <-Gunakan pasokan 5volt Pasokan 9xx dikonfigurasi, gunakan w / w untuk beralih 9xx Monitor Tegangan: 5V: 0.0 | 3.3V: 0.0 | VPullup: 0.0 | PC pada keyboard> w <-capital 'w', turn supply on Pasokan 9xx 5Volt aktif PC di keyboard>
Selanjutnya, kami mengkonfigurasi catu daya bus bajak laut untuk menawarkan 5VOLTS untuk di keyboard.
PC pada keyboard> r <-read byte dari keyboard X30 PCATKB Baca: tidak ada <-no data tersedia PC di keyboard>
Perpustakaan di keyboard mengikuti sintaks bajak laut standar. Nilai numerik dikirim ke keyboard sebagai byte, ‘r’ membaca byte dari keyboard. Protokol adalah clock oleh keyboard sehingga operasi bitwise dinonaktifkan. Jika tidak ada data yang tersedia, baca akan kembali ‘tidak ada’.
Atur keyboard
PC di keyboard> 0xee r <-Send 0xee, baca satu byte X20 PCATKB Menulis: 0xee mendapat ack <-write oxee, mendapat ack bit X30 PCATKB Baca: 0xee <-Read 0xee, Echo berhasil PC di keyboard>
Kami dapat menguji koneksi ke keyboard menggunakan perintah echo, 0xee. Keyboard akan merespons 0xee jika koneksi kami benar.
Keyboard merespons perintah dengan bit ACK pada tingkat protokol, dan kemudian lagi dengan byte ack. Kami menemukan bahwa keyboard tes kami diatur ulang secara otomatis jika ack byte tidak segera dibacakan setelah mengirim perintah.
PC pada keyboard> 0xee <-Echo Command X20 PCATKB Tulis: 0xee mendapat ack <-wrote echo, mendapat ack PC di keyboard> R <-Baca satu byte X30 PCATKB Baca: 0xAA <-READ 0xAA, setel ulang indikator PC di keyboard>
Di sini, kami mencoba mengirim perintah echo dan kemudian membaca balasan nanti. Keyboard reset secara otomatis dan membalas 0xAA, tes sendiri berlalu.
PC pada keyboard> 0xff r <-Reset perintah, baca dua byte X20 PCATKB Tulis: 0xff mendapat perintah reset ACK <-Write, dapatkan ACK X30 PCATKB Baca: 0xfa <-Command Ack byte X30 PCATKB Baca: Tidak ada <-Baca sekali lagi untuk diatur ulang PC di keyboard>
Keyboard diatur ulang dengan menulis perintah 0xff, dan membaca dua byte. Keyboard tidak akan diatur ulang sampai byte kedua dibaca.
PC di keyboard> R <-Banding byte X30 PCATKB Baca: 0xAA <-Reset Sukses PC di keyboard>
Periode singkat setelah reset, kita dapat membaca hasil uji mandiri (pos), 0xAA menunjukkan Post Sukses.
PC pada keyboard> 0xf5 r <-disable keyboard X20 PCATKB Tulis: 0xF5 Mendapat perintah ACK <-Wrote X30 PCATKB Baca: 0xfa <-Read ack byte PC pada keyboard> 0xf4 r keyboard <-able X20 PCATKB Tulis: 0xf4 Mendapat perintah ACK <-Wrote X30 PCATKB Baca: 0xfa <-Read ack byte PC di keyboard>
0xf5 disa.input keyboard bles. 0xF4 memungkinkan keyboard dan membersihkan buffer.
PC pada keyboard> 0xed R 0B111 R <-set indikator LED X20 PCATKB Tulis: 0xed Mendapat perintah ack <-set led X30 PCATKB Baca: 0xFA <-Command diakui X20 PCATKB Tulis: 0x07 mendapat nilai LED ACK <-Send X30 pcatkb Baca: 0xfa <-Value diakui PC di keyboard>
LED NUM, CAPS, dan Scroll Lock dikendalikan oleh perintah 0xed. Tiga bit terakhir dari byte kedua (OB111) menunjukkan yang menyebabkan cahaya. Sangat penting untuk menjalankan semua empat operasi byte dalam periode batas keyboard, atau keyboard akan diatur ulang.
PC pada keyboard> 0xee r <-cho perintah uji X20 PCATKB Tulis: 0xee mendapat ack X30 PCATKB Baca: 0xee PC pada keyboard> 0xfe r <-Repeat perintah byte terakhir X20 PCATKB Tulis: 0xfe Mendapat ACK <-Write Perintah Ulang X30 PCATKB Baca: 0xee <-Previous byte diulangi PC di keyboard>
Perintah keyboard terakhir yang menarik adalah perintah byte berulang. 0xFE menyebabkan keyboard mengirim byte terakhir lagi. Ini adalah perintah yang bermanfaat jika ada kesalahan dalam transmisi sebelumnya.
Baca press esensial
Penekan utama buffered oleh keyboard sampai kita membacanya.
PC di keyboard> r <-read byte X30 PCATKB Baca: 0x29 <-Space sqancars PC di keyboard> r <-read byte X30 pcatkb Baca: 0xf0 <-key rilis scancode PC di keyboard> r <-read byte X30 PCATKB Baca: 0x29 <-Space sqancars PC di keyboard>
Pers esensial mengirim scacodes, urutan multi-byte yang mewakili penekan penting. Dalam contoh, kami menekan ruang yang memiliki scancar 0x29. Ketika sebuah esensial dirilis, keyboard mengirim 0xF0 dan scancar untuk yang penting (0x29). Setiap pers penting menghasilkan urutan tiga bagian yang serupa.
PC pada keyboard> R: 4 <-Baca 4 byte X31 PCATKB Massal Baca, 0x04 byte: 0x29 0xf0 0x29 tidak ada <-space sqankode PC di keyboard>
Ini hanyalah versi yang disederhanakan dari contoh sebelumnya. Daripada membaca tiga byte secara individual, kami menggunakan perintah baca massal. Sekali lagi, kami mendapatkan urutan sqankode ruang. Upaya kami untuk membaca byte keempat yang tidak ada gagal.