2024年5月27日发(作者:)
PS2接口协议
1.PS/2接口标准的发展过程
随着计算机工业的发展,作为计算机最常用输入设备的键盘也日新月异。1983
年IBM推出了IBM PC/XT键盘及其接口标准。该标准定义了83键,采用5脚
DIN连接器和简单的串行协议。实际上,第一套键盘扫描码集并没有主机到键盘
的命令。为此,1984年IBM推出了IBM AT键盘接口标准。该标准定义了84~101
键,采用5脚DIN连接器和双向串行通讯协议,此协议依照第二套键盘扫描码
集设有8个主机到键盘的命令。到了1987年,IBM又推出了PS/2键盘接口标准。
该标准仍旧定义了84~101键,但是采用6脚mini-DIN连接器,该连接器在封装
上更小巧,仍然用双向串行通讯协议并且提供有可选择的第三套键盘扫描码集,
同时支持17个主机到键盘的命令。现在,市面上的键盘都和PS/2及AT键盘兼
容,只是功能不同而已。
2.PS/2接口硬件
2.1 物理连接器
一般,具有五脚连接器的键盘称之为AT键盘,而具有六脚mini-DIN连接器
的键盘则称之为PS/2键盘。其实这两种连接器都只有四个脚有意义。它们分别
是Clock(时钟脚)、Data(数据脚)、+5V(电源脚)和Ground(电源地)。
在PS/2键盘与PC机的物理连接上只要保证这四根线一一对应就可以了。PS/2
键盘靠PC的PS/2端口提供+5V电源,另外两个脚Clock(时钟脚)和Data
(数据脚)都是集电极开路的,所以必须接大阻值的上拉电阻。它们平时保持高
电平,有输出时才被拉到低电平,之后自动上浮到高电平。现在比较常用的连接
器如图1所示。
2.2 电气特性
PS/2通讯协议是一种双向同步串行通讯协议。通讯的两端通过Clock(时钟
脚)同步,并通过Data(数据脚)交换数据。任何一方如果想抑制另外一方通
讯时,只需要把Clock(时钟脚)拉到低电平。如果是PC机和PS/2键盘间的通
讯,则PC机必须做主机,也就是说,PC机可以抑制PS/2键盘发送数据,而PS/2
键盘则不会抑制PC机发送数据。一般两设备间传输数据的最大时钟频率是
33Khz,大多数PS/2设备工作在10~20kHz。推荐值在15Khz左右,也就是说,
Clock(时钟脚)高、低电平的持续时间都为40µs。每一数据帧包含11~12个位,
具体含义如表1所列。
表1 数据帧格式说明
1个起始位
8个数据位
1个奇偶校验位
1个停止位
1个应答位
总是逻辑0
(LSB)低位在前
奇校验
总是逻辑1
仅用在主机对设备的通讯中
表中,如果数据位中1的个数为偶数,校验位就为1;如果数据位中1的个
数为奇数,校验位就为0;总之,数据位中1的个数加上校验位中1的个数总为
奇数,因此总进行奇校验。
2.3 PS/2设备和PC机的通讯
PS/2设备的Clock(时钟脚)和Data(数据脚)都是集电极开路的,平时都
是高电平。当PS/2设备等待发送数据时,它首先检查Clock(时钟脚)以确认其
是否为高电平。如果是低电平,则认为是PC机抑制了通讯,此时它必须缓冲需
要发送的数据直到重新获得总线的控制权(一般PS/2键盘有16个字节的缓冲区,
而PS/2鼠标只有一个缓冲区仅存储最后一个要发送的数据)。如果Clock(时钟
脚)为高电平,PS/2设备便开始将数据发送到PC机。一般都是由PS/2设备产
生时钟信号。发送时一般都是按照数据帧格式顺序发送。其中数据位在Clock(时
钟脚)为高电平时准备好,在Clock(时钟脚)的下降沿被PC机读入。PS/2设
备到PC机的通讯时序如图2所示。
当时钟频率为15Khz时,从Clock(时钟脚)的上升沿到数据位转变时间至
少要5µs。数据变化到Clock(时钟脚)下降沿的时间至少也有5µs,但不能大于
25µs,这是由PS/2通讯协议的时序规定的。如果时钟频率是其它值,参数的内
容应稍作调整。
上述讨论中传输的数据是指对特定键盘的编码或者对特定命令的编码。一般
采用第二套扫描码集所规定的码值来编码。其中键盘码分为通码(Make)和断
码(Break)。通码是按键接通时所发送的编码,用两位十六进制数来表示,断
码通常是按键断开时所发送的编码,用四位十六进制数来表示。
3.PS/2接口的嵌入式软件编程方法
PS/2设备主要用于产生同步时钟信号和读写数据。
3.1 PS/2向PC机发送一个字节
从PS/2向PC机发送一个字节可按照下面的步骤进行:
1. 检测时钟线电平,如果时钟线为低,则延时50µs;
2. 检测判断时钟信号是否为高,为高,则向下执行,为低,则转到(1);
3. 检测数据线是否为高,如果为高则继续执行,如果为低,则放弃发送
(此时PC机在向PS/2设备发送数据,所以PS/2设备要转移到接收程
序处接收数据);
4. 延时20µs(如果此时正在发送起始位,则应延时40µs);
5. 输出起始位(0)到数据线上。这里要注意的是:在送出每一位后都要
检测时钟线,以确保PC机没有抑制PS/2设备,如果有则中止发送;
6. 输出8个数据位到数据线上;
7. 输出校验位;
8. 输出停止位(1);
9. 延时30µs(如果在发送停止位时释放时钟信号则应延时50µs);
通过以下步骤可发送单个位:
1. 准备数据位(将需要发送的数据位放到数据线上);
2. 延时20µs;
3. 把时钟线拉低;
4. 延时40µs;
5. 释放时钟线;
6. 延时20µs。
3.2 PS/2设备从PC机接收一个字节
由于PS/2设备能提供串行同步时钟,因此,如果PC机发送数据,则PC机
要先把时钟线和数据线置为请求发送的状态。PC机通过下拉时钟线大于100µs
来抑制通讯,并且通过下拉数据线发出请求发送数据的信号,然后释放时钟。当
PS/2设备检测到需要接收的数据时,它会产生时钟信号并记录下面8个数据位
和一个停止位。主机此时在时钟线变为低时准备数据到数据线,并在时钟上升沿
锁存数据。而PS/2设备则要配合PC机才能读到准确的数据。具体连接步骤如
下:
1. 等待时钟线为高电平。
2. 判断数据线是否为低,为高则错误退出,否则继续执行。
3. 读地址线上的数据内容,共8个bit,每读完一个位,都应检测时钟线
是否被PC机拉低,如果被拉低则要中止接收。
4. 读地址线上的校验位内容,1个bit。
5. 读停止位。
6. 如果数据线上为0(即还是低电平),PS/2设备继续产生时钟,直到
接收到1且产生出错信号为止(因为停止位是1,如果PS/2设备没有
读到停止位,则表明此次传输出错)。
7. 输出应答位。
8. 检测奇偶校验位,如果校验失败,则产生错误信号以表明此次传输出
现错误。
9. 延时45 µs,以便PC机进行下一次传输。
读数据线的步骤如下:
1. 延时20µs;
2. 把时钟线拉低
3. 延时40µs
4. 释放时钟线
5. 延时20µs
6. 读数据线。
下面的步骤可用于发出应答位;
1. 延时15µs;
2. 把数据线拉低;
3. 延时5µs;
4. 把时钟线拉低;
5. 延时40µs;
6. 释放时钟线;
7. 延时5µs;
8. 释放数据线。
4.第二套扫描码:
101、102和104键的键盘:
KEY
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
0
1
2
3
4
5
6
7
通码
1C
32
21
23
24
2B
34
33
43
3B
42
4B
3A
31
44
4D
15
2D
1B
2C
3C
2A
1D
22
35
1A
45
16
1E
26
25
2E
36
3D
断码
F0 1C
F0 32
F0 21
F0 23
F0 24
F0 2B
F0 34
F0 33
F0 43
F0 3B
F0 42
F0 4B
F0 3A
F0 31
F0 44
F0 4D
F0 15
F0 2D
F0 1B
F0 2C
F0 3C
F0 2A
F0 1D
F0 22
F0 35
F0 1A
F0 45
F0 16
F0 1E
F0 26
F0 25
F0 2E
F0 36
F0 3D
KEY
9
`
-
=
BKSP
SPACE
TAB
CAPS
L SHFT
L CTRL
L GUI
L ALT
R SHFT
R CTRL
R GUI
R ALT
APPS
ESC
F1
F2
F3
F4
F5
F6
F7
F8
F9
F10
F11
F12
PRNT
SCRN
SCROLL
ENTER
通码
46
0E
4E
55
5D
66
29
0D
58
12
14
E0 1F
11
59
E0 14
E0 27
E0 11
E0 2F
5A
76
05
06
04
0C
03
0B
83
0A
01
09
78
07
E0 12
E0 7C
7E
断码
F0 46
F0 0E
F0 4E
F0 55
F0 5D
F0 66
F0 29
F0 0D
F0 58
F0 12
F0 14
E0 F0 1F
F0 11
F0 59
E0 F0 14
E0 F0 27
E0 F0 11
E0 F0 2F
F0 5A
F0 76
F0 05
F0 06
F0 04
F0 0C
F0 03
F0 0B
F0 83
F0 0A
F0 01
F0 09
F0 78
F0 07
E0 F0
7C E0
F0 12
F0,7E
KEY
[
INSERT
HOME
PG UP
DELETE
END
PG DN
U ARROW
L ARROW
D ARROW
R ARROW
NUM
KP /
KP *
KP -
KP +
KP EN
KP
KP 0
KP 1
KP 2
KP 3
KP 4
KP 5
KP 6
KP 7
KP 8
KP 9
]
;
'
,
.
/
通码
54
E0 70
E0 6C
E0 7D
E0 71
E0 69
E0 7A
E0 75
E0 6B
E0 72
E0 74
77
E0 4A
7C
7B
79
E0 5A
71
70
69
72
7A
6B
73
74
6C
75
7D
58
4C
52
41
49
4A
断码
F0 54
E0 F0 70
E0 F0 6C
E0 F0 7D
E0 F0 71
E0 F0 69
E0 F0 7A
E0 F0 75
E0 F0 6B
E0 F0 72
E0 F0 74
F0 77
E0 F0 4A
F0 7C
F0 7B
F0 79
E0 F0 5A
F0 71
F0 70
F0 69
F0 72
F0 7A
F0 6B
F0 73
F0 74
F0 6C
F0 75
F0 7D
F0 58
F0 4C
F0 52
F0 41
F0 49
F0 4A
8 3E F0 3E PAUSE
E1 14
77
E1 F0 -NONE-
14
F0 77
发布评论