这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 电子DIY » [转]什么是N-key与按键冲突?原理说明、改善技术、选购注意完全解析

共34条 2/4 1 2 3 4 跳转至
工程师
2015-08-22 23:53:42     打赏
11楼
USB照样能N-Key
目前键盘连接界面以PS/2与USB为主,而这2种界面的传输方式与内容都不相同。在前一单元有提到,键盘控制器(Keyboard Controller)由行列信息查出是哪颗键被触发后,就将按键信息传输到电脑中。这只能算是简略的说法,其实在这段过程中,键盘还做了许多事情。

工程师
2015-08-22 23:54:44     打赏
12楼
随时监控按键状态
键盘控制器(Keyboard Controller)大部分时间都在扫描键盘矩阵,以及监控键盘是否有更动按键状态。当按键被按下或将按键放开时,都会送一组扫描码(Sacn Code)给电脑。这组扫描依不同情况分为2种:Make Code与Break Code。Make Code是在使用者按下按键时立即送出,Break Code是使用者放开按键时送出。这2种的内容都是独一无二,方便给电脑主机能够准确辨识之用。

工程师
2015-08-22 23:56:17     打赏
13楼
先找出按键位置

送出Mack Code与Break Code信号,得要先找到使用者是按下哪颗键才行。键盘无论采用何种键位配置,都会针对每一颗按键定义一个键盘号码(Key Number)。当使用者压下按键时,键盘控制器由行列资讯找出哪颗按键被压下,再从键盘表中查出此按键位置所代表的是哪一个按键信号。这中间过程无论是在PS/2界面或USB界面下都是相同的,但之后查表送出的信号就有所不同了。

▲无论是101键与102键的按键配置,每个按键都会有1组按键号码。

工程师
2015-08-22 23:59:08     打赏
14楼
进行查表
知道按键位置之后,便会从Scan Codes Tables(扫描码表格)中查询Scan Codes(扫描码)并送出信号。其中Scan Codes Tables有分为Set 1、Set 2、Set 3共3组,一般系统预设是查询Scan Codes Tables Set 2。

工程师
2015-08-23 00:06:02     打赏
15楼
预设查表Set 2
在Scan Codes Tables Set 2中,键盘主要键位区Make Code每颗按键都是由1组8-bit位码(1Byte)组成,Break Code为2Bytes,其中Break Code第1个Byte皆为十六进位的F0,第2个Byte则与Mack Code相同。在主要键位区中,只有右侧Ctrl键与右侧Alt键不同,分别与左侧Ctrl键与左侧Alt键相比较,在Make Code部分多十六进位的E0,Break Code多十六进位的E0F0。
扩展功能键(Extended Keys)如键盘中间九宫格区(Insert、Delete等)、方向键区与右侧数字键区,与Number Lock关闭时的右侧数字键区功能重复。换句话说,因为扩展功能键常会随着Shift键与Number Lock键的开启与关闭而影响输出结果,所以独立定义出一组规则,不会与主要键位区相同。在Make Code会增加十六进位的E0,Break Code多出十六进位的E0F0。另外数字键区「/」、PrintScreen键、Pause键,这些也是有独立的Make Code与Break Code表示。

工程师
2015-08-23 11:38:34     打赏
16楼
电脑转ASCII使用

当电脑接收到键盘所送出的扫描码,会再转成ASCII。最后这部分是由系统中驱动程序来完成,以便套用多普通话系的设定。用PS/2界面的键盘运作状况大致是如此,若用USB界面,就又是下面这种情况。

▲IBM技术参考手册有将每一个按键的Make Code与Break Code一一条列出来。

(后面还有更多键盘功能的介绍!)


工程师
2015-08-23 11:40:28     打赏
17楼
USB HID限制6+2键
PS/2按键压下与放开,是分Make Code与Break Code送出,而USB界面下则完全不同。依据USB HID(Human Interface Devices)规范,它是将正在压下的按键信号送出,没有压下按键的信号就不送出。压下的信号按键每一次的封包为8 Bytes,其中2 Bytes为Modifier Keys与Reserved保留键。

Modifier Keys为1Byte即8 bit,每一个bit可以记录Shift、Ctrl、Alt、Windows键,左右侧各有1颗键共8键。Reserved保留键可以做为Caps Lock、Number Lock、Scroll Lock等等键使用。扣除Modifier Keys与Reserved Keys之后,其他按键最多只有6键可以输出。

USB键盘按键定义


▲由USB HID 1.11中可以明确看到USB键盘使用8 Bytes。

▲Reserved Keys保留键可以让厂商做为多种用途。

▲Modifier Keys每1个bit各代表着不同按键信号。

▲其他按键的信号送出的定义也与Scan Codes Tables Set 2不同,USB有自己的一套查表,详细可以查询USB HID Uasage Tables。


工程师
2015-08-23 11:41:17     打赏
18楼
信号先进先出不打结

在USB HID中,我们真正可以使用的按键只有6键。如果按下超过6键,或者送出Ghost Key时,键盘便会送出错误讯息而停止。有些厂商在这里的处理方式为采用FIFO(First In First Out,先进先出),当已经满6颗信号时,再读取使用者新输入的第7键信号,就舍弃原本的第1键信号,持续保持同时6键输出。

▲USB按键送出示例:此示例以4 Bytes封包送出键盘信号,其中1 Byte保留给Modifier Keys使用。如果键盘没有动作时(None),送出的封包信号与前一次相同。

工程师
2015-08-23 11:41:41     打赏
19楼
解开HID封印可行
USB HID只是对USB设备设立的规范,USB装置也能照着自己的规则走,所以USB键盘同时输出6键还是可行,在这分享几种USB键盘突破限制的方法。只是这些方法都需要付出额外的成本,早期键盘几乎都是遵守USB HID规范,所以才会有许多人认为多键输出在USB界面下是不可能的任务。

工程师
2015-08-23 11:42:22     打赏
20楼
模拟多把键盘
但其实仍有办法遵守USB HID规范,又能突破限制。最简单的方法,就是利用键盘芯片,让电脑在使用1把键盘情形下,误认为同时连接多把键盘。就能将键盘按键,透过模拟的键盘分送信号。原本限制的6颗键就能串联起来,而重复的Modifier Keys与Reserved Keys位置,也能重新定义新按键送出,达成多颗键同时输出。

此种方法稳定性较高,造成系统误判的机率较低,许多键盘都采用这种方式。不过每多模拟1把键盘,至少就需要多1颗芯片,还要将芯片互接连接并将信号分配控制,成本也随之增加。通常采用此方法时会猜测玩家的按键需求,而非无上限地模拟键盘。

▲由操作系统的装置管理员中,可以观察到微软SideWinder X4键盘模拟出2把键盘。

共34条 2/4 1 2 3 4 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]