Interfaz “IBM Personal System/2 (PS/2)” IBM 1987

Anuncio
Interfaz
“IBM Personal System/2 (PS/2)”
IBM 1987
Wolfgang Freund
Abril 2007
Características Generales
z Permite
conectar periféricos teclado y
mouse
z Protocolo de comunicación serial
bidireccional
z Para teclados se garantiza el conjunto 2
de los scan codes.
z Responden a todos los comandos
enviados, sin embargo no actúan en todos
ellos.
Socket y Pinout
z
z
z
z
z
z
Pin 1: Data
Pin 2: Reservado
Pin 3: Ground
Pin 4: Vcc (+5V)
Pin 5: Clock
Pin 6: Reservado
Comunicación Bidreccional
z Estado
z Data
z Estado
z Data
z Estado
z Data
IDLE:
y Clock en alto
INHIBIT:
en alto y Clock en bajo
REQUEST TO SEND:
en bajo y Clock en alto
PS/2 Frame (1)
z1
bit de partida: siempre es 0.
z 8 bits de datos: se comienza por el menos
significativo.
z 1 bit de paridad: se utiliza paridad impar
z 1 bit de parada: siempre es 1.
z 1 bit de confirmación: sólo para
comunicación desde el host al dispositivo.
PS/2 Frame (2)
Scan Code (1)
varios tipos de scan codes, el más
popular (por omisión) es el número 2
z Cada tecla tiene asociado un scan code
compuesto por:
z Hay
z make
code, que se emite al presionar una
tecla
z Breake code, que se emite al soltar la tecla
Scan Code (2): Ejemplos
Key
Make
Break
ASCII
A
1C
F0,1C
41
B
32
F0,32
42
C
21
F0,21
43
D
23
F0,23
44
E
24
F0,24
45
F
2B
F0,2B
46
G
34
F0,34
47
H
33
F0,33
48
I
43
F0,43
49
PS/2 Driver Verilog (1)
kd
ShiftRegSig1
ShiftRegSig2
kc
10
0
kbs
0
value
xxxxxxxx
10
1
PS/2 Driver Verilog (1)
kd
kc
ShiftRegSig1
ShiftRegSig2
0 x x x x x x x x x x
x x x x x x x x x x
10
10
0
kbs
0
value
xxxxxxxx
1
PS/2 Driver Verilog (1)
kd
kc
ShiftRegSig1
ShiftRegSig2
0 0 x x x x x x x x x
x x x x x x x x x x
10
10
0
kbs
0
value
xxxxxxxx
1
PS/2 Driver Verilog (1)
kd
kc
ShiftRegSig1
ShiftRegSig2
0 0 0 0 x x x x x x x
x x x x x x x x x x
10
10
0
kbs
0
value
xxxxxxxx
1
PS/2 Driver Verilog (1)
kd
kc
ShiftRegSig1
ShiftRegSig2
0 0 0 0 0 x x x x x x
x x x x x x x x x x
10
10
0
kbs
0
value
xxxxxxxx
1
PS/2 Driver Verilog (1)
kd
kc
ShiftRegSig1
ShiftRegSig2
1 0 0 0 0 0 x x x x x
x x x x x x x x x x
10
10
0
kbs
0
value
xxxxxxxx
1
PS/2 Driver Verilog (1)
kd
kc
ShiftRegSig1
ShiftRegSig2
1 1 0 0 0 0 0 x x x x
x x x x x x x x x x
10
10
0
kbs
0
value
xxxxxxxx
1
PS/2 Driver Verilog (1)
kd
kc
ShiftRegSig1
ShiftRegSig2
1 1 1 0 0 0 0 0 x x x
x x x x x x x x x x
10
10
0
kbs
0
value
xxxxxxxx
1
PS/2 Driver Verilog (1)
kd
kc
ShiftRegSig1
ShiftRegSig2
1 1 1 1 0 0 0 0 0 x x
x x x x x x x x x x
10
10
0
kbs
0
value
xxxxxxxx
1
PS/2 Driver Verilog (1)
kd
kc
ShiftRegSig1
ShiftRegSig2
1 1 1 1 1 0 0 0 0 0 x
x x x x x x x x x x
10
10
0
kbs
0
value
xxxxxxxx
1
PS/2 Driver Verilog (1)
kd
kc
ShiftRegSig1
ShiftRegSig2
1 1 1 1 1 1 0 0 0 0 0
x x x x x x x x x x
10
10
0
kbs
0
value
xxxxxxxx
1
PS/2 Driver Verilog (1)
kd
kc
ShiftRegSig1
ShiftRegSig2
0 1 1 1 1 1 1 0 0 0 0
0 x x x x x x x x x
10
10
0
kbs
0
value
xxxxxxxx
1
PS/2 Driver Verilog (1)
kd
kc
ShiftRegSig1
ShiftRegSig2
0 0 1 1 1 1 1 1 0 0 0
0 0 x x x x x x x x
10
10
0
kbs
0
value
xxxxxxxx
1
PS/2 Driver Verilog (1)
kd
kc
ShiftRegSig1
ShiftRegSig2
0 0 0 1 1 1 1 1 1 0 0
0 0 0 x x x x x x x
10
10
0
kbs
0
value
xxxxxxxx
1
PS/2 Driver Verilog (1)
kd
kc
ShiftRegSig1
ShiftRegSig2
1 0 0 0 1 1 1 1 1 1 0
0 0 0 0 x x x x x x
10
10
0
kbs
0
value
xxxxxxxx
1
PS/2 Driver Verilog (1)
kd
kc
ShiftRegSig1
ShiftRegSig2
1 1 0 0 0 1 1 1 1 1 1
0 0 0 0 0 x x x x x
10
10
0
kbs
0
value
xxxxxxxx
1
PS/2 Driver Verilog (1)
kd
kc
ShiftRegSig1
ShiftRegSig2
1 1 1 0 0 0 1 1 1 1 1
1 0 0 0 0 0 x x x x
10
10
0
kbs
0
value
xxxxxxxx
1
PS/2 Driver Verilog (1)
kd
kc
ShiftRegSig1
ShiftRegSig2
0 1 1 1 0 0 0 1 1 1 1
1 1 0 0 0 0 0 x x x
10
10
0
kbs
0
value
xxxxxxxx
1
PS/2 Driver Verilog (1)
kd
kc
ShiftRegSig1
ShiftRegSig2
0 0 1 1 1 0 0 0 1 1 1
1 1 1 0 0 0 0 0 x x
10
10
0
kbs
0
value
xxxxxxxx
1
PS/2 Driver Verilog (1)
kd
kc
ShiftRegSig1
ShiftRegSig2
0 0 0 1 1 1 0 0 0 1 1
1 1 1 1 0 0 0 0 0 x
10
10
0
kbs
0
value
xxxxxxxx
1
PS/2 Driver Verilog (1)
kd
kc
ShiftRegSig1
ShiftRegSig2
0 0 0 0 1 1 1 0 0 0 1
1 1 1 1 1 0 0 0 0 0
10
10
0
kbs
1
value
xxxxxxxx
1
PS/2 Driver Verilog (1)
kd
kc
ShiftRegSig1
ShiftRegSig2
1 0 0 0 0 1 1 1 0 0 0
1 1 1 1 1 1 0 0 0 0
10
10
0
kbs
0
value
1C
1
PS/2 Driver Verilog (2a)
`timescale 1ns / 1ps
////////////////////////////////////////////////////////////////////////////////
// kbd.v -- basic keyboard function
//
// Author: W. Freund, UTFSM, Valparaiso, Chile
//
(based on Keyboard.vhd from Ken Nelson, Digilent, Inc.)
//
04/04/06
////////////////////////////////////////////////////////////////////////////////
module kbd(rst, clk, kd, kc, kbs, value);
input rst, clk, kd, kc;
// reset, clock, k-data, k-clock
output reg kbs;
// keyboard stroke (negedge)
output reg [7:0] value;
// scan code
//
//
//
------------------------------------------------------------------------- Signal Declarations
-----------------------------------------------------------------------reg kdi, kci;
reg dff1, dff2;
reg [10:0] ShiftRegSig1;
reg [10:1] ShiftRegSig2;
reg kbs_tmp;
PS/2 Driver Verilog (2b)
// -----------------------------------------------------------------------// -- Module Implementation
// -----------------------------------------------------------------------// --Flip Flops used to condition signals coming from PS2-always @ (posedge clk or posedge rst)
begin
if (rst == 1) begin
dff1 <= 0; dff2 <= 0; kdi <= 0; kci <= 0;
end else
begin
dff1 <= kd; kdi <= dff1; dff2 <= kc; kci <= dff2;
end
end
PS/2 Driver Verilog (2c)
// --Shift Registers used to clock in scan codes from PS2-always @(negedge kci or posedge rst)
begin
if (rst == 1) begin
ShiftRegSig1 <= 11'b00000000000;
ShiftRegSig2 <= 10'b0000000000;
end else begin
ShiftRegSig1[10:0] <= {kdi, ShiftRegSig1[10:1]};
ShiftRegSig2[10:1] <= {ShiftRegSig1[0],
ShiftRegSig2[10:2]};
end
end
PS/2 Driver Verilog (2d)
//
--Wait for scan code
always @(posedge rst or posedge kci)
begin
if(rst == 1) begin
value <= 8'b00000000;
kbs_tmp <= 0;
end else if (ShiftRegSig2[9:2] == 8'b11110000) begin
value <= value;
kbs_tmp <= 1;
end else if (ShiftRegSig2[8:1] == 8'b11110000) begin
value <= ShiftRegSig1[8:1];
kbs_tmp <= 0;
end
end
always @(negedge clk)
kbs <= kbs_tmp;
endmodule
Descargar