PS2鼠标接口程序设计总结文档格式.docx
- 文档编号:5241289
- 上传时间:2023-05-04
- 格式:DOCX
- 页数:18
- 大小:153.89KB
PS2鼠标接口程序设计总结文档格式.docx
《PS2鼠标接口程序设计总结文档格式.docx》由会员分享,可在线阅读,更多相关《PS2鼠标接口程序设计总结文档格式.docx(18页珍藏版)》请在冰点文库上搜索。
D7
D6
D5
D4
D3
D2
D1
D0
Byte1
Y
overflow
X
signbit
Always1
Middle
Btn
Right
Left
Btn
Byte2
XMovement
Byte3
YMovement
位移计数器是一个9位2进制的补码整数。
它的最高位作为符号位出现,在位移数据包的第一个字节里,这些计数器在鼠标读取输入发现有位移时被更新。
这些值是自从最后一次发送位移数据包给主机后位移的累计量(即最后一次数据包发给主机后位移计数器被复位)。
位移计数器可表示的值的范围是-255到+255。
如果超过了范围,相应的溢出位就被设置,并且在复位前计数器不会增减。
一旦位移数据包成功地发送给主机,位移计数器就会复位,同样鼠标在收到主机不是“Resend”0xFE命令外的其他命令计数器也会复位。
1.1.3Intelimouse的扩展
对标准的PS/2鼠标的一个流行的扩展是微软的Intellimouse。
它包括支持五个鼠标按键和三个位移轴(左右上下和滚轮)。
这些附加特征要求使用4字节的位移数据包,而不是标准3字节包,因为标准PS/2鼠标驱动不认识这个数据包的格式,因此微软的Intellimouse要求严格按照标准PS/2鼠标来操作。
除非它知道驱动程序支持扩展数据包格式,如果微软的Intellimouse用于一台只支持标准PS/2鼠标的计算机它依然是有功能的,只是滚轮和第45个按键不起作用。
微软的Intellimouse工作起来象标准的PS/2鼠标,(也就是使用3字节位移数据包,和标准PS/2鼠标一样回应所有命令报告设备ID0x00)。
要进入滚轮模式,主机应该发送如下的命令序列:
设置采样速率200
设置采样速率100
设置采样速率80
要进入滚轮+5键模式,主机应该发送如下的命令序列:
主机然后应该发布“获得设备ID”命令0xF2并等待回应,如果安装的是是标准PS/2鼠标非Intellimouse,它回应设备ID0x00。
在这种情况下主机会辨认出实际这个鼠标没有滚轮并继续把它当作是标准PS/2鼠标。
但是如果安装的是微软的Intellimouse它返回的ID是0x03。
这就告诉主机挂接的定点设备有滚轮,并且主机认为鼠标使用4字节的位移数据包,如表1.3所示:
表1.34字节数据包格式
Yoverflow
Xoverflow
Ysignbit
Xsignbit
MiddleBtn
RightBtn
LeftBtn
Byte4
ZMovement
Z位移是2的补码,表示滚轮自上次数据报告以来的位移,有效值的范围在-8到+7这意味着数值实际只有低四位高四位仅用作符号扩展位。
主机接着发布“获得设备ID”命令(0xF2)并等待回应,微软的Intellimouse用0x04这样设备ID应答并且使用如下的4字节位移数据包,如表1.4所示:
表1.4五键4字节数据包格式
Always0
5thBtn
4thBtn
Z3
Z2
Z1
Z0
Z0-Z3是2的补码,用于表示从上次数据报告以来滚轮的位移量,有效范围从-8到+7。
第4键:
1=第4键按下了;
0=第4键没有按下。
第5键:
1=第5键按下了;
0=第5键没有按下。
1.2操作模式
根据鼠标工作的模式来处理的数据报告有四种标准的工作模式。
●Reset——鼠标在上电或收到“Reset”(0xFF)命令后进入Reset模式
●Stream——这是缺省模式在Reset执行完成后,也是多数软件使用鼠标的模式。
如果主机先前把鼠标设置到了Remote模式,那它可以发送SetStreamMode(0xEA)命令给鼠标,让鼠标重新进入Stream模式。
●Remote——在某些情况下Remote模式很有用可以通过发送SetRemoteMode(0xF0)命令进入。
●Wrap——除了为测试鼠标和它的主机之间的连接外这个模式不是特别地有用。
Wrap模式可以通过发送SetWrapMode(0xEE)命令给鼠标来进入,要退出Wrap模式主机必须发布Reset(0xFF)命令或ResetWrapMode(0xEC)命令。
如果Reset(0xFF)命令收到了,鼠标将进入Reset模式。
如果收到的是ResetWrapMode(0xEC)命令鼠标将进入Wrap模式前的那个模式。
(注意鼠标同样可以进入extended操作模式,正如本文后面所述但是这不是标准PS/2鼠标的
特征。
)
1.2.1、Reset模式
鼠标在上电后或应答“Reset”(0xFF)命令就进入reset模式。
进入这个模式后鼠标执行象前面提到的BAT(基本保证测试)一样的自检并设置如下的缺省值:
●采样速率100采样点/秒
●分辨率4个计数值/毫米
●缩放比例1:
●数据报告被禁止
然后发送BAT完成代码,这个代码不是0xAA(BAT成功)就是0xFC(错误)如果主机收到了不是0xAA的回应,它可能重新给鼠标供电,这样来引起鼠标复位并重新执行BAT。
接着BAT完成代码(0xAA或0xFC)的后面鼠标发送它的设备ID0x00。
这个ID用来区别设备是键盘还是处于扩展模式中的鼠标(从发复位命令到鼠标发送它的设备ID时间大概为360mS)。
在一些文件中说主机在没收到设备ID前不会假定发送任何数据。
但有些BIOS在上电复位并收到0xAA后立刻发送“Reset”(0xFF)命令。
鼠标发送自己的设备ID给主机后它就进入了Stream模式。
注意鼠标设置的一个缺省值之一是数据报告被禁止,这就意味着鼠标在没收到“使能数据报告”(0xF4)命令之前不会发送任何位移数据包给主机。
1.2.2、Stream模式
在Stream模式中,一旦鼠标检测到位移或发现一个或多个鼠标键的状态改变了就发送位移数据包。
数据报告的最大速率被认为是采样速率。
参数的范围从10采样点/秒到200采样点/秒,这个参数的缺省值是100采样点/秒。
主机可以用设置采样速率(0xF3)命令来改变它。
Stream模式是操作的缺省模式。
1.23、Remote模式
在这个模式下鼠标以当前的采样速率读取输入,并更新它的计数器和标志。
但是它只在主机请求数据的时候才报告给主机位移和按键状态。
主机通过“读数据”(0xEB)命令来获得数据,在收到命令后鼠标发送位移数据包并复位它的位移计数器
1.24、Wrap模式
这是一个回声模式,鼠标收到的每个字节都会被发回主机,甚至收到的是一个有效的命令鼠标都不会应答这条命令,它只把这个字节回送给主机。
但是有两个例外“Reset”(0xff)命令和“ResetWrapMode”(0xEC)命令鼠标认为这两条命令是一有效的命令,并且不会回送它们到主机。
1.3初始化
下面是在计算机运行Win98SE和鼠标之间的通讯。
启动的时候插有一个PS/2鼠标,PS/2鼠标的初始化过程相当的典型。
如果你要仿真一个PS/2鼠标必须至少能支持如下的命令序列:
上电复位
Mouse:
AA自我测检通过
00鼠标ID
Host:
FF主机发送复位命令
FA鼠标应答
F3设置采样速率,识别鼠标是否带滚轮
C8采样速率200点/秒
F3设置采样速率
64采样速率100点/秒
50采样速率80点/秒
F2获取设备ID
00鼠标ID,如果回应的是03带滚轮的三键鼠标
//-------------------------------此段不知有何作用-------------
0A采样速率10点/秒
00鼠标ID
//---------------------------------------------------------------------
E8设置分辨率
038个计数值/毫米
E6缩放比例1:
Host28采样速率40点/秒
F4使能数据报告
初始化完成
1.4命令集
下面列出的是仅可发送给鼠标的命令,如果鼠标工作在Stream模式,主机在发送任何其他命令之前,要先禁止数据报告(命令0xF5)。
●0xFF(Reset)——鼠标用应答0xFA,回应这条命令并进入Reset模式
●0xFE(Resend)——只要从鼠标收到无效数据,主机就发送这条命令,鼠标的回应是重新发送它最后发
给主机的数据包。
如果鼠标用了另外一个非法的包来回应主机,要么发布另一条Resend命令,要么发布Error命令要么让鼠标重新上电来复位它,或者禁止通讯把时钟线拉低,采取什么样的动作取决于主机。
●0xF6(SetDefaults)——鼠标用应答0xFA来回应,然后载入如下的值:
采样率=100,分辨率=4个值/毫米、比例1:
1禁止数据报告,接着鼠标清空它所有的位移计数器,并进入stream模式。
●0xF5(DisableDataReporting)——鼠标用应答0xFA回应命令,然后禁止数据报告,并复位它的位移计数器。
这仅对Stream模式下的数据报告有效。
并且它不能禁止采样。
禁止的stream模式功能和remote模式相同。
●0xF4(EnableDataReporting)——鼠标用应答0xFA回应命令,然后使能数据报告,并复位它的位移计数器。
这条命令可以对在Remote模式或Stream模式下的鼠标发布。
但只对Stream模式下的数据报告有效。
●0xF3(SetSampleRate)——鼠标用应答0xFA回应命令,然后从主机读入一个或更多字节。
鼠标保留这个字节作为新的采样速率在收到采样速率后,鼠标再次用应答0xFA回应,并复位它的位移计数器。
有效的采样速率是10、20、40、60、80、100和200采样点/秒。
●0xF2(GetDeviceID)——鼠标用应答0xFA回应命令,后面跟着它的设备ID,对标准PS/2鼠标来说是0x00;
鼠标同样会复位它的位移计数器。
●0xF0(SetRemoteMode)——鼠标用应答0xFA回应,然后复位它的位移计数器并进入盘Remote模式。
●0xEE(SetWrapMode)——鼠标用应答0xFA回应,然后复位它的位移计数器并进入wrap模式。
●0xEC(ResetWrapMode)——鼠标用应答0xFA回应,然后复位它的位移计数器并进入wrap模式之前的那个模式(stream模式或remote模式)。
●0xEB(ReadData)——鼠标用应答0xFA回应,然后发送位移数据包。
这是在remote模式中读数据的唯一方法,在数据包成功地被发送后,鼠标将复位它的位移计数器。
●0xEA(SetStreamMode)——鼠标用应答0xFA回应,然后复位它的位移计数器并进入stream模式。
●0xE9(StatusRequest)——鼠标用应答0xFA回应,然后发送如表1.5,3个字节的状态包,然后复位它的位移计数器。
表1.5鼠标状态包格式
Mode
Enable
Scaling
分辨率
采样速率
右键、中键、左键=1,表示键被按下;
=0,表示键没有按下。
Scaling=1缩放比例位2:
1;
=0,比例为1:
见命令0xE7和0xE6。
Enable=1表示数据报告被使能;
=0,示数据报告被禁止;
见命令0xF5和0xF4。
Mode=1表示remote模式被使能;
=0,表示stream模式被使能;
见命令0xF0和0xEA。
●0xE8(SetResolution)——鼠标用应答0xFA回应,然后从主机读取一个字节,并再次用鼠标用应答0xFA应然回应,然后复位它的位移计数器,从主机读入的字节决定了分辨率如表1.6所示:
表1.6鼠标位移分辩率对应表
主机发过来的数据
0x00
1计数值/毫米
0x01
2计数值/毫米
0x02
4计数值/毫米
0x03
8计数值/毫米
●0xE7(SetScaling2:
1)——鼠标用应答0xFA回应,然后使能2:
●0xE6(SetScaling1:
1)——鼠标用应答0xFA回应,然后使能1:
对于标准鼠标而言,只有(Resend)0xFE和(Error)0xFC命令会发送给主机。
这两条命令的工作情况和主机到设备间的命令一样。
注:
1、2:
1比例仅适用于Stream模式的自动数据报告中,对于回应ReadData0xEB命令的报告数据是无效的。
2、鼠标和主机不缓冲Resend0xFF命令,这意味着0xFE绝不会作为Resend命令的回应来发送。
3、一个数据包可以是3字节的位移数据包,或4字节的位移数据包,Intellimouse的或3字节的状态包StatusRequest0xE9命令或2字节的完成代码ID包,0xAA、0x00或0xFC、0x00或1字节的命令回应。
4、当PS/2数据线常置零时,PS/2鼠标将不断产生时钟脉冲。
1.5PS/2通讯协议
PS2通讯协议是一种双向同步串行通讯协议。
通讯的两端通过Clock(时钟脚)同步,并通过Data(数据脚)交换数据。
任何一方如果想抑制另外一方通讯时,只需要把clock(时钟脚)拉到低电平。
如果是PC机和PS2键盘间的通讯,则PC机必须做主机,也就是说,PC机可以抑制PS2键盘发送数据,而PS2键盘则不会抑制PC机发送数据,也即主机总是在总线上有优先权。
一般两设备间传输数据的最大时钟频率是33KHz,大多数PS2设备工作在10~20KHz。
推荐值在15KHz左右,也就是说,clock(时钟脚)高、低电平的持续时间都为40μs。
每一数据帧包含11~12个位,具体含义如表1.7所列。
表1.7PS/2通讯数据帧格式
1个起始位
总是逻辑0
8个数据位
(LSB)低位在前
1个奇偶校验位
奇校验
1个停止位
总是逻辑1
1个应答位
仅用在主机对设备的通讯中
表中,如果数据位中1的个数为偶数,校验位就为1;
如果数据位中1的个数为奇数,校验位就为0;
总之,数据位中1的个数加上校验位中1的个数总为奇数,因此总进行奇校验。
1.5.1、PS/2设备到主机的通讯
时钟频率为10-16.7kHz。
从时钟脉冲的上升沿到一个数据转变的时间至少要有5微秒。
数据变化到时钟脉冲的下降沿的时间至少要有5微秒,并且不大于25微秒。
这个定时非常重要你应该严格遵循它。
主机可以在第11个时钟脉冲停止位之前把线拉低,导致设备放弃发送当前字节,这是非常罕见的。
在停止位发送后设备在发送下个包前至少应该等待50微秒。
这将给主机时间,当它处理接收到的字节时抑制发送(主机在收到每个包时通常自动做这个)。
在主机释放抑制后,设备至少应该在发送任何数据前等50微秒。
其通讯时序图如图1.1所示。
从PS2向PC机发送一个字节可按照下面的步骤进行:
1)检测时钟线电平,如果时钟线为低,则延时50μs;
2)检测判断时钟信号是否为高,为高,则向下执行,为低,则转到
(1);
3)检测数据线是否为高,如果为高则继续执行,如果为低,则放弃发送(此时PC机在向PS2设备发送数据,所以PS2设备要转移到接收程序处接收数据);
4)延时20μs(如果此时正在发送起始位,则应延时40μs);
5)输出起始位(0)到数据线上。
这里要注意的是:
在送出每一位后都要检测时钟线,以确保PC机没有抑制PS2设备,如果有则中止发送;
6)输出8个数据位到数据线上;
7)输出校验位;
8)输出停止位
(1);
9)延时30μs(如果在发送停止位时释放时钟信号则应延时50μs);
按如下的过程发送单个位
1)设置/复位数据
2)延迟20微秒
3)把时钟拉低
4)延迟40微秒
5)释放时钟
6)延迟20微秒
图1.1设备到主机的通讯
1.5.2、主机到PS/2设备的通讯
首先PS/2设备总是产生时钟信号,如果主机要发送数据它必须首先把时钟和数据线设置为请求。
发送状态如下示
●通过下拉时钟线至少100微秒来抑制通讯
●通过下拉数据线来使用请求,发送然后释放时钟
设备应该在不超过10毫秒的间隔内就要检查这个状态。
当设备检测到这个状态,它将开始产生时钟信号,并且时钟脉冲标记下输入八个数据位和一个停止位。
主机仅当时钟线为低的时候改变数据线而数据在时钟脉冲的上升沿被锁存,当发生在设备到主机通讯的过程中时正好相反。
在停止位发送后,设备要应答接收到的字节,就把数据线拉低并产生最后一个时钟脉冲,如果主机在第11个时钟脉冲后不释放数据线,设备将继续产生时钟脉冲直到数据线被释放然后设备将产生一个错误。
通讯时序图如图1.2、1.3所示。
主机可以在第11个时钟脉冲应答位前中止一次传送,只要下拉时钟线至少100微秒。
主机必须按下面的步骤发送数据到PS/2设备
1)把时钟线拉低至少100微秒
2)把数据线拉低
3)释放时钟线
4)等待设备把时钟线拉低
5)设置/复位数据线发送第一个数据位
6)等待设备把时钟拉高
7)等待设备把时钟拉低
8)重复5-7步发送剩下的7个数据位和校验位
9)释放数据线
10)等待设备把数据线拉低
11)等待设备把时钟线拉低
12)等待设备释放数据线和时钟线
图1.2主机到设备的通讯
图1.3主机到设备通讯的详细过程
图1.3描述了两个重要的定时条件:
a和b。
a在主机最初把数据线拉低后,设备开始产生时钟脉冲的时间,必须不大于15ms;
b数据包被发送的时间,必须不大于2ms。
如果这两个条件不满足,主机将产生一个错误。
在包收到后,主机为了处理数据立刻把时钟线拉低来抑制通讯,如果主机发送的命令要求有一个回应,这个回应必须在主机释放时钟线后20ms之内被收到。
如果没有收到则主机产生一个错误,在设备到主机通讯的情况中,时钟改变后的5微秒内不应该发生数据改变的情况。
1.6方案设计
1.6.1、设计思想
针对FPGA做时序控制不方便的缺点,本设计简化了通讯协议,对PS2鼠标的操作只用了一条指令,使能数据报告(0xF4)。
利用鼠标上电自动复位并进入Stream模式后,送使能数据报告指令(0xF4),便完成对鼠标的初使化。
之后便可以接收PS2鼠标发送过来的数据包。
该方案的优点是简化程序,节省资源;
缺点是不能软复位,即鼠标由于出现异常情况而不正常工作,不能用软件复位,只能重新插拔鼠标。
但出现异常状况的情况比较少,所以总来的该方案是比较合理的。
1.6.2、接口和控制
●Clock(input)——系统时钟,默认为48MHz,如要改为其它频率,需要改动如下几个参数:
parameterWATCHDOG_TIMER_VALUE=19200;
//看门狗计时器,400uS
parameterWATCHDOG_TIMER_BITS=15;
//400uS计时器所需计数器位数
parameterTIMER_5US_VALUE=240;
//5uS计数值
parameterTIMER_5US_BITS=8;
//5uS计时器所需计数
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- PS2 鼠标 接口 程序设计 总结