Tastatura PS2

De la WikiLabs
Salt la: navigare, căutare

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