2024年6月14日发(作者:)

FDR工作室制作更多资料:il:fdrstudio@

实验十六:PS2鼠标控制

一.实验目的

:

1.了解PS2鼠标键盘协议

2.学会分析简单的数字信号和使用单片机捕捉及解码信号

二,实验原理:

PS/2 鼠标键盘协议

引脚定义如下所示

线

F

D

R

PS/2 鼠标和键盘履行一种双向同步串行协议,换句话说,每次数据线上发送一位数据并

且每在时钟线上发一个脉冲就被读入,键盘/鼠标可以发送数据到主机而主机也可以发送数据

到设备,但主机总是在总线上有优先权。它可以在任何时候抑制来自于键盘/鼠标的通讯,只

要把时钟拉低即可。从键盘/鼠标发送到主机的数据在时钟信号的下降沿,当时钟从高变到低

的时候被读取,从主机发送到键盘/鼠标的数据在上升沿,当时钟从低变到高的时候被读取。

不管通讯的方向怎样,键盘/鼠标总是产生时钟信号。如果主机要发送数据它。必须首先告诉

设备开始产生时钟信号。最大的时钟频率是33kHz 而且大多数设备工作在10 20kHz 如果你要

制作一个PS/2 设备我推荐你把频率控制在15kHz 左右这就意味着时钟应该是高40 微秒低40

微秒

所有数据安排在字节中每个字节为一帧包含了11个位,这些位的含义如下

1 个起始位总是为0

8 个数据位低位在前

1 个校验位奇校验

1 个停止位总是为1

如果数据位中包含偶数个1,校验位就会置1 ;如果数据位中包含奇数个1,校验位就会置0,

数据位中1的个数加上校验位总为奇数,这就是奇校验,这是用来错误检测。

当主机发送数据给键盘/鼠标时,设备回送一个握手信号来应答数据包已经收到,这个位

不会出现在设备发送数据到主机的过程中,设备到主机的通讯过程数据和时钟线都是集电极

开路结构,正常保持高电平当键盘或鼠标等待发送数据时它首先检查时钟以确认它是否是高

电平,如果不是,那么是主机抑制了通讯,设备必须缓冲任何要发送的数据直到重

新获得总线的控制权。键盘有16 字节的缓冲区而鼠标的缓冲区仅存储最后一个要发送的数据

包,如果时钟线是高电平设备就可以开始传送数据。

键盘和鼠标使用一种每帧包含11 位的串行协议这些位含义是

1 个起始位总是为0

8 个数据位低位在前

1 个校验位奇校验

1 个停止位总是为1

每位在时钟的下降沿被主机读入,时钟频率为10--16.7kHz。从时钟脉冲的上升沿到一个数

据转变的时间至少要有5 微秒,数据变化到时钟脉冲的下降沿的时间至少要有5 微秒并且不

大于25 微秒,这个定时非常重要你应该严格遵循它!主机可以在第11 个时钟脉冲停止位之

前把线拉低,导致设备放弃发送当前字节。这是非常罕见的。在停止位发送后,设备在发送

下个包前至少应该等待50 毫秒,这将给主机时间,当它处理接收到的字节时抑制发送,主机

FDR工作室制作更多资料:il:fdrstudio@

在收到每个包时通常自动做这个,在主机释放抑制后设备至少应该在发送任何数据前等50 毫

我推荐下面的过程发送一个单一字节从仿真键盘/鼠标到主机

1) 等待Clock = high

2) 延时 50 微秒

3) Clock s 仍旧为 high?

No—到第1 步

4) Data = high

No—放弃 (并且从主机读取字节)

5) 延迟 20 毫秒 (=40 微秒 to the time Clock is pulled low in sending the start bit。)

6) 输出起始位 (0) 在发送所有这些位的每一位后

7) 输出 8 个数据位 > 测试时钟确认主机是否把它拉低了

8) 输出校验位 / 这说明主机要放弃这次传送

9) 输出停止位 (1)

10) 延迟30 毫秒

按如下的过程发送单个位

1) 设置/复位数据

2) 延迟20 微秒

3) 把时钟拉低

4) 延迟40 微秒

5) 释放时钟

6) 延迟20 微秒

主机到设备的通讯

被发送的包有点不同于主机到设备通讯过程,首先PS/2 设备总是产生时钟信号。如果主

机要发送数据它必须首先把时钟和数据线设置为请求发送状态,如下:

通过下拉时钟线至少100 微秒来抑制通讯

通过下拉数据线来应用请求发送然后释放时钟

设备应该在不超过10 毫秒的间隔内就要检查这个状态,当设备检测到这个状态它将开始

产生时钟信号并且时钟脉冲标记下输入八个数据位和一个停止位,主机仅当时钟线为低的时

候改变数据线,而数据在时钟脉冲的上升沿被锁存,这在发生在设备到主机通讯的过程中正

好相反,在停止位发送后设备要应答接收到的字节就把数据线拉低并产生最后一个时钟脉冲,

如果主机在第11 个时钟脉冲后不释放数据线,设备将继续产生时钟脉冲直到数据线被释放,

然后设备将产生一个错误,主机可以在第11个时钟脉冲应答位前中止一次传送,只要下拉时

钟线至少100 微秒,要使得这个过程易于理解主机必须按下面的步骤发送数据到PS/2 设备

1) 把时钟线拉低至少100 微秒

2) 把数据线拉低

3) 释放数据线

4) 等待设备把时钟线拉低

5) 设置/复位数据线发送第一个数据位

6) 等待设备把时钟拉高

7) 等待设备把时钟拉低

8) 重复 5-7 步 发送剩下的7 个数据位和校验位

9) 释放数据线

线

F

D

R