Diferență între revizuiri ale paginii „Tastatura PS2”

De la WikiLabs
Jump to navigationJump to search
 
(Nu s-au afișat 7 versiuni intermediare efectuate de același utilizator)
Linia 3: Linia 3:
 
* un port de date, de un bit, pe care se transmit serial datele de la tastatură, valide pe frontul negativ al semnalului de ceas.
 
* un port de date, de un bit, pe care se transmit serial datele de la tastatură, valide pe frontul negativ al semnalului de ceas.
  
Portul de date este bidirecțional (puteți citi mai mult despre modul acestuia de funcționare în manualul de referință pentru Nexys 2 <ref>[http://digilentinc.com/Data/Products/NEXYS2/Nexys2_rm.pdf Manualul Nexys 2]</ref>), dar deocamdată ne interesează transmisia dinspre tastatură spre placa de dezvoltare. La apăsarea unei taste, tastatura va trimite secvențe de coduri de 11 biți care reprezintă următoarea secvență:
+
Portul de date este bidirecțional (puteți citi mai mult despre modul acestuia de funcționare în manualul de referință pentru Nexys 2 <ref>[http://digilentinc.com/Data/Products/NEXYS2/Nexys2_rm.pdf Manualul Nexys 2]</ref>), dar deocamdată ne interesează transmisia dinspre tastatură spre placa de dezvoltare. La apăsarea unei taste, tastatura va trimite secvențe de coduri de 11 biți care reprezintă:
 
* 1 bit de start, care este întotdeauna 0;
 
* 1 bit de start, care este întotdeauna 0;
 
* 8 biți (1 octet = 1 byte), începând cu cel mai nesemnificativ bit, reprezentând un cod unic asociat tastei, numit mai departe ''scancode'';
 
* 8 biți (1 octet = 1 byte), începând cu cel mai nesemnificativ bit, reprezentând un cod unic asociat tastei, numit mai departe ''scancode'';
* 1 bit de verificare, numit mai departe ''checksum'', care reprezintă suma pe un bit ai tuturor biților din ''scancode'' (adică XOR pe toți biții din ''scancode'');
+
* 1 bit de paritate, numit mai departe ''checksum'', care este 1 dacă numărul de biți 1 din ''scancode'' este par;
 
* 1 bit de stop, care este întotdeauna 1;
 
* 1 bit de stop, care este întotdeauna 1;
  
 
'''Atenție''': ''Scancode''-ul nu este același lucru cu codul ASCII. Primul identifică o tastă, al doilea identifică un caracter.
 
'''Atenție''': ''Scancode''-ul nu este același lucru cu codul ASCII. Primul identifică o tastă, al doilea identifică un caracter.
  
 +
Tastatura trimite ''scancode''-uri în următoarele situații:
 +
* când o tastă este apăsată, se trimite scancode-ul asociat tastei respective; unele taste au un cod extins, care necesită transmiterea a două ''scancode''-uri, iar în acest caz, primul cod este întotdeauna 8'hE0 (ambele coduri vor fi transmise respectând protocolul de 1 bit de start, 8 biți pentru ''scancode'', 1 bit pentru ''checksum'' și 1 bit de stop, deci pentru tastele cu cod extins, se vor transmite în total 22 de biți); dacă tasta este menținută apăsat, codul se retransmite o dată la aproximativ 100ms;
 +
* când o tastă este eliberată, înaintea ''scancode''-ului tastei se transmite ''scancode''-ul 8'hF0, care semnalează că s-a eliberat tasta respectivă.
  
 +
Extragerea ''scancode''-ul din secvența de biți de intrare se face folosind un [[Automate|automat]].
 +
 +
== Codurile tastelor ==
 +
 +
[[Fișier:scancodes.png|500px]]
  
 
== Referințe ==
 
== Referințe ==
  
 
<references />
 
<references />

Versiunea curentă din 10 noiembrie 2012 20:24

Tastatura legată la o interfață PS2 comunică prin două porturi:

  • un port de ceas, care este constant 1 atunci când tastatura nu trimite date, și trece în 0 atunci când pe portul de date este un bit valid (ceea ce implică faptul că circuitul va fi sensibil la frontul negativ al acestui semnal);
  • un port de date, de un bit, pe care se transmit serial datele de la tastatură, valide pe frontul negativ al semnalului de ceas.

Portul de date este bidirecțional (puteți citi mai mult despre modul acestuia de funcționare în manualul de referință pentru Nexys 2 [1]), dar deocamdată ne interesează transmisia dinspre tastatură spre placa de dezvoltare. La apăsarea unei taste, tastatura va trimite secvențe de coduri de 11 biți care reprezintă:

  • 1 bit de start, care este întotdeauna 0;
  • 8 biți (1 octet = 1 byte), începând cu cel mai nesemnificativ bit, reprezentând un cod unic asociat tastei, numit mai departe scancode;
  • 1 bit de paritate, numit mai departe checksum, care este 1 dacă numărul de biți 1 din scancode este par;
  • 1 bit de stop, care este întotdeauna 1;

Atenție: Scancode-ul nu este același lucru cu codul ASCII. Primul identifică o tastă, al doilea identifică un caracter.

Tastatura trimite scancode-uri în următoarele situații:

  • când o tastă este apăsată, se trimite scancode-ul asociat tastei respective; unele taste au un cod extins, care necesită transmiterea a două scancode-uri, iar în acest caz, primul cod este întotdeauna 8'hE0 (ambele coduri vor fi transmise respectând protocolul de 1 bit de start, 8 biți pentru scancode, 1 bit pentru checksum și 1 bit de stop, deci pentru tastele cu cod extins, se vor transmite în total 22 de biți); dacă tasta este menținută apăsat, codul se retransmite o dată la aproximativ 100ms;
  • când o tastă este eliberată, înaintea scancode-ului tastei se transmite scancode-ul 8'hF0, care semnalează că s-a eliberat tasta respectivă.

Extragerea scancode-ul din secvența de biți de intrare se face folosind un automat.

Codurile tastelor

Scancodes.png

Referințe