基于verilog的PS2键盘设计进阶.docx

上传人:b****5 文档编号:5853241 上传时间:2023-01-01 格式:DOCX 页数:10 大小:74.91KB
下载 相关 举报
基于verilog的PS2键盘设计进阶.docx_第1页
第1页 / 共10页
基于verilog的PS2键盘设计进阶.docx_第2页
第2页 / 共10页
基于verilog的PS2键盘设计进阶.docx_第3页
第3页 / 共10页
基于verilog的PS2键盘设计进阶.docx_第4页
第4页 / 共10页
基于verilog的PS2键盘设计进阶.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

基于verilog的PS2键盘设计进阶.docx

《基于verilog的PS2键盘设计进阶.docx》由会员分享,可在线阅读,更多相关《基于verilog的PS2键盘设计进阶.docx(10页珍藏版)》请在冰豆网上搜索。

基于verilog的PS2键盘设计进阶.docx

基于verilog的PS2键盘设计进阶

实验九、基于verilog的PS/2键盘设计进阶

一、  前言及背景:

说到PS/2相信大家都不会陌生,不错的,我们日常的鼠标键盘大多是基于PS/2接口设计的。

虽然USB鼠标大有取而代之之势,但是依然阻止不了我们这群IT菜鸟掌握它的强烈欲望,而使用verilog来做PS/2的解码更是需要我们把PS/2的传输协议理解的更透彻一些。

所以,下面就让特权同学带领大家一步一步掌握PS/2。

PS/2接口标准的发展过程

随着计算机工业的发展,作为计算机最常用输入设备的键盘也日新月异。

1981年IBM推出了IBMpc/XT键盘及其接口标准。

该标准定义了83键,采用5脚DIN连接器和简单的串行协议。

实际上,第一套键盘扫描码集并没有主机到键盘的命令。

为此,1984年IBM推出了IBMAT键盘接口标准。

该标准定义了84~101键,采用5脚DIN连接器和双向串行通讯协议,此协议依照第二套键盘扫描码集设有8个主机到键盘的命令。

到了1987年,IBM又推出了PS/2键盘接口标准。

该标准仍旧定义了84~101键,但是采用6脚mini-DIN连接器,该连接器在封装上更小巧,仍然用双向串行通讯协议并且提供有可选择的第三套键盘扫描码集,同时支持17个主机到键盘的命令。

现在,市面上的键盘都和PS/2及AT键盘兼容,只是功能不同而已。

二、  基础知识:

电气特性

管脚说明:

1

DATA

Keydata

2

N.C

Noconnected

3

GND

GND

4

VCC

+5V

5

CLK

Clock

6

N.C

Noconnected

 

数据格式

数据帧格式说明:

1个起始位

总是逻辑0

8个数据位

(LSB)低位在前

1个奇偶校验位

奇校验

1个停止位

总是逻辑1

1个应答位

仅用在主机对设备的通讯中

表中,如果数据位中1的个数为偶数,校验位就为1;如果数据位中1的个数为奇数,校验位就为0;总之,数据位中1的个数加上校验位中1的个数总为奇数,因此总进行奇校验。

(是不是发现它的数据传输协议和串口很像呢!

呵呵)

 

PS/2发送数据到PC的时序

键盘接口时序:

(a)键盘发送时序(b)键盘接收时序

注:

在时钟的下降沿读取数据。

以下可做具体写代码设计参考:

从PS/2向PC机发送一个字节可按照下面的步骤进行:

(1) 检测时钟线电平,如果时钟线为低,则延时50us;

(2) 检测判断时钟信号是否为高,为高,则向下执行,为低,则转到(1);

(3) 检测数据线是否为高,如果为高则继续执行,如果为低,则放弃发送(此时PC机在向 PS/2设备发送数据,所以PS/2设备要转移到接收程序处接收数据);

(4) 延时20us(如果此时正在发送起始位,则应延时40us);

(5) 输出起始位(0)到数据线上。

这里要注意的是:

在送出每一位后都要检测时钟线,以确保PC机没有抑制PS/2设备,如果有则中止发送;

(6) 输出8个数据位到数据线上;

(7) 输出校验位;

(8) 输出停止位

(1);

(9) 延时30us(如果在发送停止位时释放时钟信号则应延时50us);

通过以下步骤可发送单个位:

(1) 准备数据位(将需要发送的数据位放到数据线上);

(2) 延时20us;

(3) 把时钟线拉低;

(4) 延时40us;

(5) 释放时钟线;

(6) 延时20us。

PS/2设备从PC机接收一个字节

由于PS/2设备能提供串行同步时钟,因此,如果PC机发送数据,则PC机要先把时钟线和数据线置为请求发送的状态。

PC机通过下拉时钟线大于100us来抑制通讯,并且通过下拉数据线发出请求发送数据的信号,然后释放时钟。

当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) 延时45us,以便PC机进行下一次传输。

读数据线的步骤如下:

(1) 延时20us;

(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) 释放数据线。

键盘编码返回值介绍:

注意:

键盘的返回值并不是和一般ASCII码相对应!

键盘的处理器如果发现有键被按下、释放或按住键盘,将发送扫描码的信息包到计算机。

扫描码有两种不同类型的通码和断码,当一个键被按下或按住,就发送通码;当一个键被释放,就发送断码。

每个按键被分配了唯一的通码和断码,这样主机通过查找唯一的扫描码就可以测定是哪个按键。

每个键一整套的通断码组成了扫描码集,有三套标准的扫描码集,分别是第一套、第二套和第三套。

所有现代的键盘默认使用第二套扫描码。

虽然多数第二套通码都只有一个字节宽,但也有少数扩展按键的通码是两字节或四字节宽,这类的通码第一个字节总是为E0H。

正如有键按下,通码就被发往计算机一样,只要键一释放,断码就会被发送。

每个键都有它自己唯一的通码,它们也都有唯一的断码。

幸运的是你不用总是通过查表来找出按键的断码,在通码和断码之间存在着必然的联系。

多数第二套断码有两字节长,它们的第一个字节是F0H;第二个字节是这个键的通码扩展按键的断码,通常有三个字节,它们前两个字节是E0H,F0H,最后一个字节是这个按键通码的最后一个字节。

作为例子讲解,下面列出了几个按键的第二套通码和断码。

No.

KEY

通码(第二套)

断码(第二套)

1

"A"

1C

F01C

2

"5"

2E

F02E

3

"F10"

09

F009

4

RightArrow

E0 74

E0F074

5

Right"Ctrl"

E014

E0F014

一个键盘发送值的例子:

     通码和断码是以什么样的序列发送到你的计算机,从而使得字符G出现在你的字处理软件里的呢?

因为这是一个大写字母,需要发生这样的事件次序:

按下Shift键,按下G键,释放G键,释放Shift键,与这些时间相关的扫描码如下:

Shift键的通码12H,G键的通码34H,G键的断码F0H34H,Shift键的断码F0H12H,因此发送到你的计算机的数据应该是:

12H34HF0H34HF0H12H。

第二套扫描码:

101102和104键的键盘:

KEY

通码

断码

 

 KEY

 通码

 断码

 

 KEY

 通码

断码 

A

1C

F01C

   

9

46

F046

   

[

54 

F054 

B

32

F032

 

`

0E

F00E 

 

INSERT

E070 

E0 F070

C

21

F021

 

-

4E 

F04E 

 

HOME

E06C 

E0 F0 6C

D

23

F023

 

=

55 

F055 

 

PGUP

E07D 

E0 F0 7D

E

24

F024

 

\

5D 

F05D 

 

DELETE

E071 

E0 F0 71 

F

2B

F02B

 

BKSP

66 

F0 66 

 

END

E069 

E0 F0 69 

G

34 

F0 34 

 

SPACE

29 

F0 29 

 

PGDN

E07A 

E0 F0 7A 

33 

F0 33 

 

TAB

0D 

F0 0D 

 

UARROW

E075 

E0 F0 75 

I

43 

F0 43 

 

CAPS

58 

F0 58 

 

LARROW

E06B 

E0 F0 6B 

J

3B 

F0 3B 

 

LSHFT 

12 

F0 12 

 

DARROW

E072

E0 F0 72 

42 

F0 42 

 

LCTRL

14 

F0 14 

 

RARROW

E074

E0 F0 74 

4B

F0 4B 

 

LGUI

E01F 

E0F01F

 

NUM

77 

F0  77

3A 

F0 3A 

 

LALT

11 

F0 11 

 

KP/

E04A 

E0 F0 4A 

31 

F0 31 

 

RSHFT 

59 

F0 59 

 

KP*

7C

F0  7C

44 

F0 44 

 

RCTRL 

E014 

E0 F014 

 

KP-

7B

F0 7B 

4D 

F04D

 

RGUI

E027 

E0F0 27 

 

KP+

79

F0 79 

15 

F0 15 

 

RALT

E011 

E0F0 11 

 

KPEN

E05A

E0 F0 5A 

2D

F0 2D 

 

APPS

E02F 

E0F02F 

 

KP 

71

F0 71 

1B 

F0 1B 

 

ENTER

5A

F0 5A 

 

KP0

70

F0 70 

2C 

F0 2C 

 

ESC

76 

F0 76 

 

KP 1

69

F0 69 

3C

F0 3C 

 

F1

05 

F0 05 

 

KP 2 

72

F0 72 

2A

F0 2A 

 

F2 

06

F0 06 

 

KP 3 

7A

F0 7A 

1D

F0 1D 

 

F3 

04 

F0 04 

 

KP 4 

6B

F0 6B 

22

F0 22 

 

F4 

0C 

F0 0C 

 

KP 5 

73

F0 73 

35 

F0 35 

 

F5 

03 

F0 03 

 

KP 6 

74

F0 74 

1A 

F0 1A 

 

F6 

0B 

F0 0B 

 

KP 7 

6C 

F0 6C 

0

45 

F0 45 

 

F7 

83 

F0 83 

 

KP 8 

75

F0 75 

16 

F0 16 

 

F8 

0A 

F0 0A 

 

KP 9 

7D

F0 7D 

1E 

F0 1E 

 

F9 

01 

F0 01 

 

]

58

F0 58 

26 

F0 26 

 

F10 

09 

F0 09 

 

;

4C

F0 4C 

25 

F0 25 

 

F11 

78 

F0 78 

 

'

52

F0 52 

2E 

F0 2E 

 

F12 

07 

F0 07 

 

41

F0 41 

36

F0 36 

 

PRNT

SCRN

E012

E07C

E0F0

7CE0

F012 

 

.

49

F0 49 

3D 

F0 3D 

 

SCROLL

7E

F0,7E 

 

/

4A

F0 4A 

3E 

F0 3E 

 

PAUSE

E11477

E1F014

F077

 -NONE-

 

 

 

 

ACPI扫描码:

KEY

通码

断码

Power

E0,37

E0,F0,37

Sleep

E0,3F

E0,F0,3F

Wake

E0,5E

E0,F0,5E

Windows多媒体扫描码:

KEY

通码

断码

NextTrack

E0,4D

E0,F0,4D

PreviousTrack

E0,15

E0,F0,15

Stop

E0,3B

E0,F0,3B

Play/Pause

E0,34

E0,F0, 34 

Mute

E0,23 

E0,F0, 23 

VolumeUp 

E0,32

E0,F0, 32 

VolumeDown 

E0,21 

E0,F0, 21 

MediaSelect 

E0,50 

E0,F0, 50 

E-Mail

E0,48 

E0,F0, 48 

Calculator

E0,2B 

E0,F0, 2b 

MyComputer

E0,40 

E0,F0, 40 

WWWSearch 

E0,10 

E0,F0, 10 

WWWHome 

E0,3A 

E0,F0, 3a 

WWWBack

E0,38 

E0,F0, 38 

WWWForward

E0,30 

E0,F0, 20 

WWWStop

E0,28 

E0,F0, 28 

WWWRefresh

E0,20

E0,F0, 20 

WWWFavorites 

E0,18 

E0,F0, 18 

三、实验说明

上面说了这么一大通,如果是第一次接触PS/2协议的朋友一定是头大了,如果你用别的MPU做过PS/2的通信,那么上面的协议对于你只是小case,权当复习一下好了。

下面要开始动手实践了,协议一大堆内容,我们要做的是一个相对比较容易的实验,达到入门的目的即可,当然更深入的探讨有兴趣的朋友可以在这个基础上继续。

实验内容

通过FPGA把大写字母A-Z转换成相应的ASCII码,只要字母按键被按下,就能在串口调试助手里显示相应大写字母。

四、verilog代码以及详细注释

除了顶层模块(ps2_key),三个底层模块分别为PS/2传输处理模块(ps2scan)、串口传输模块(my_uart_tx)以及串口波特率选择模块(speed_select)(下面只给出顶层模块和PS/2传输处理模块的verilog代码,串口部分的设计可以参考串口通信设计)。

详细的project代码参考在同目录文件夹ps2verilog下,该代码下载配置后,接上PS/2键盘(注意PS/2一般不支持热拔插,最好CPLD下载后在掉电状态下插入PS/2键盘,然后上电),随后打开串口调试助手,如果按下键盘上A-Z任意个键,串口调试助手即可显示相应字母。

(串口调试助手在附赠光盘软件目录下,注意设置好波特率,默认波特率为9600bps,代码中可以随意调整;8位数据,不需要校验位)。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1