-
[
原创
]
我所知道的<
/p>
EC====>Keyboard
我所知道的
< br>EC====>Keyboard
rd Introduction
Keyboard
是
PC
架构中的一个重要组成部分。
在常见的
PC
系统中主板上都有一颗专用的
8042
接口芯片去处理
(
现在被集成进了
SB
中
)
,
8042
控制
keyboard
的整个工作过程,包括加电
自检键盘扫描码的缓冲以及与
c
hipset
沟通。在
NB
上这部分工
作都有
EC
负责,它有一个
keybo
ard
controller
,
它扮
演
8042
相似的角色。
NB
都有一个内置
Keyboard
,
这个
keyboard
是由
EC
控制的。
Keyboard
和
p>
touchpad
都是
EC
内置的一个部分,它们按照
ps2
协议工作,
最终的数据通过
EC
送给
host
。常见的
102 key
的
键盘如下图
1
所示:
2
.
Scan code and Make & Break
当键盘上有键被按下,键盘将产生扫描码(
scan
code
),
scan
code
有两种
Make
code
和
Break
code
p>
,
也就是通常所说的通码和断码。
每一个按
键都有一个唯一的
Make
code
和
Break
code
。当一个键被按下就会产生
Make
code
,松开时就会产生一个
Break
code
。
Scan code
一共有
三套称之为
set1
、
set2
、
set3
,
PS2
接口键盘默认使用
set2
。
EC
收到
set2
scan
code
以后会将它转化为
set1
送给
host
。
Set1
的
scan
code
中标准按键的
Scan code Make
code
和
Break
code
都只有一个字节,
Make code
和
BreakCode
的差别就在最高位。
Make code
最高位为
0
< br>,
Break code
最高位为
1
。
A
的
scan code
如下图
1
所示
:
' W!
F+
P.
@
A key
Set1
Set2
Set3
Make
code
1Eh
1Ch
1Ch
Break code
+
h.
T&
q#
y9
|1
i
9Eh
F0h,1Ch
F0h,1Ch
图
2
Does Keyboard
Work?
6
Key
board
功能虽然比较简单,只是让用户可以输入一些字符而已,可是它的工作原理却不
简单。从一个键被按下到操作系统识别它并送给其他的
driver
或者
AP
,中间经历了很多道
工序
。键盘是一种矩阵结构,每一个键都有一个行地址和列地址,用户按下键以后
,EC
p>
获得
该按键的
matrix
address
,
EC
将该
address
转化为
matrix
value
然后判断该键的类型是特
殊
功能键还是标准按键,然后采用不同的方法将
matrix
v
alue
转成
Set2
,最后在转成<
/p>
Set1
value
送给
host
,
host
收到就
可以送给其它需要的程序了。其完整的工作流程如下图
3
所
p>
示:
4
.
Customized
Hot
Key
NB
上有一些被称为
Hot Key<
/p>
(热键)的东东,比如用户可以按
Fn+F4/F5
调整亮度等。这些
是如何实现的呢?既然
key
board
部分是由
EC
FW
处理,那定制这些特殊功能键就不是什么
难事
了。
Fn
没有
scan
code
但是它有
matrix
address
所以
EC
收到该键按下后置一个
flag
,
后续检测到
F1-F12
被按下后,
EC
发一个
Q_EVENT
(
什么是
Q_EVENT?
后续会详细描述
?
)给
Host,Host
就可以和
EC
通信了。如此便可以定制出各种各样的功能了。
. ]4
X0
_-
u/
l&
l
~/
i-
]9
i
5
.
'
v$$
J#
0
f,
f-
g
IO
Port Command
Hos
t
通过
60h
,
64h
这两个
ports
和
Keyboard
进行通信,其中
60h
被称为数据端口,
64h
为命令端口。
Host
对
EC
发命
令是通过
64h
port
实现的命令分别为:
% M
A'
_9
_(
X%
q#
x#
a&
x%
J-
w/
e
Command
Description
设置
LED
。
Keyboard
< br>收到此命令后,一个
LED
设置会
话开始。
Keyboard
首先回复一个
ACK
(
FAh
)
,
然后等
待从
60h
端口写入的
LED
设置字节,如果等到一个,<
/p>
则再次回复一个
ACK
,
然后根据此字节设置
LED
。
然后
接着等待。
。
。
< br>直到等到一个非
LED
设置字节
(
高位被
设置
)
,此时
LED
设置会话结束。
p>
诊断
Echo
。
此
命令纯粹为了检测
Keyboard
是否正常,
EDh
EEh
如果正常,
当
Keyboard
< br>收到此命令后,
将会回复一个
EEh
字节。
选择
Scan
code
set
。
< br>Keyboard
系统共可能有
3
个
Scan
code set
。当
Keyboard
收到此命令后,将回复一个
< br>ACK
,然后等待一个来自于
60h
端口的
Scan
code
set
F0h
代码。系统必须在此命令之后发送给
Keyboard
一个<
/p>
Scan
code
set
代码。当
Keyboard
收到此代码后,将
p>
再次回复一个
ACK
,然后将
Scan code
set
设置为收
到的
Scan
code set
代码所要求的。
读取
Keyboard ID
。由于<
/p>
EC
芯片后不仅仅能够接
Keyboar
d
。
此命令是为了读取后所接的设备
I
D
。
设备
F2h
ID
为
2
个字节,
Keyboard ID
为
8
3ABh
。当键盘收到
此命令后,会首先回复一个
ACK
,然后,将
2
字节的
Keyboard
ID
一个一个回复回去。
设置
Typematic Rate/Delay
。当
Keyboard
收到此命
F3h
令后,将回复一个
ACK
。然后等待来自于
60h
的设置
字节。一旦收到,将回复一个
ACK
,然后将
Keyboard
Rate/Delay
设置为相应的值。
, I/
)
i&
K.
X(
{!
t:
c+
r.
W
清理键盘的
Output
Buffe
r
。一旦
Keyboard
收到此命<
/p>
F4h
令,将会将
Output
buffe
r
清空,然后回复一个
ACK
。
然后继续接受
Keyboard
的击键。
p>
设置默认状态
(w/Disable)<
/p>
。一旦
Keyboard
收到此命
F5h
令,
将会将
Keyboard
完全初始化成默认状态。
之前所
有对它的设置都将失效——
Output
buffer
被清空,
Typematic
< br>Rate/Delay
被设置成默认值。然后回复一
个<
/p>
ACK
,接着等待下一个命令。需要注意的是,这个
命令被执行后,键盘的击键接受是禁止的。如果想让
键盘接受击键输入,必须
Enable Keyboard
。
F6h
设置默认状态。
和
F5
命令唯一不同的是,
当此命令被
执行之后,键盘的击键接收是允许的。
Resend
。如果
Keyboard
收到此命令,则必须将刚才发送到
FEh
Output
Register
中的
数据重新发送一遍。
当系统检测到一个
来自于
< br>Keyboard
的错误之后,可以使用自命令让
Key
board
重新发送刚才发送的字节。
Reset
Keyboard
。如果
Keyboard
收到此命令,则首先回复一
< br>个
ACK
,
然后启动自身的
p>
Reset
程序,
并进行自身基本正确性<
/p>
FFh
检测(
BAT-Basic Assurance Test<
/p>
)。等这一切结束之后,
将返回给系统一个单字节的结束码(
p>
AAh=Success,
FCh=Failed
),并将键盘的
Scan code set
设置为<
/p>
2
。
准备读取芯片的
Command
Byte
;其行为是将当前
20h
Command
Byte
的内容放置于
Output
Register
中,下
一个从
60H
端口的读操作将会将其读取出来。
60h
准备写入
EC
芯片的
Command Byte
;下一个通过
60h
写入的字节将会被放入
Command Byte
。
测试一下键盘密码是否被设置;测试结果放置在
A4h
Output
Register
,<
/p>
然后可以通过
60h
读取出来。
测试
结果可以有两种值:
FAh=
密码被设置;
F1h=
没有密码。
< br>
设置键盘密码。其结果被按照顺序通过
60h
端口一个
A5h
一个被放置在
Input
Regis
ter
中。
密码的最后是一个
空字节(
内容为
0
)。
A6h
让密码生效。
在发布这个命令之前,
必须首先使用
A5h
命令设置密码。
自检。诊断结果放置在
Output Register
中,可以通
过
60h
读取。
55h=OK
。
禁止键盘接口。
Command
By
te
的
bit-4
被设置。当此
AAh
ADh
-
-
-
-
-
-
-
-
-
上一篇:会计银行英文用语汇总
下一篇:常见电脑故障及处理