海底大作战下载:PS2协议开发心得

来源:百度文库 编辑:中财网 时间:2024/04/29 08:55:51
PS2协议开发心得2010-06-24 12:09

欢迎看看我的另一个小窝,说不定有意外的惊喜哦 ^_^ www.devres.info

最近在开发一款PS2产品(这里说的PS2是指使用PS2协议的键盘鼠标,不是PS2游戏机,呵呵),学到了很多东西,也遇到很多问题,在这里把自己认为重要的东西记下来,作为以后的备忘,如果你在这篇文章中学到哪怕一点点东西,我都将会感到很荣幸。

关于PS2更详细的文章,应该算是Adam Chapweske著Roy Show译的“PS2技术参考”,其实开发一款PS2产品,兼容性是很重要的,在我们开发的这款PS产品中就出现过这样的问题,我们测试了几十台PC都是没问题的,可是偏偏就在一台HP的PC上不能识别,找了很久才发现问题所在。

设备到主机的通信,当设备要发送数据给主机时,只要检测到总线有空,就可以发了,这里简单给出波形图,更详细的请参考“PS2技术参考“。

(原文件名:d to H.JPG)


下面是主机到设备通信的简单波形图:

(原文件名:H to D.JPG)


使用示波器抓下来的主机跟设备通信的实际波形:

(原文件名:PS2KB_WF01.JPG)


主机到设备的通信,当主机要发送数据给设备时,大部分PC都会先拉低时钟线至少100us来抑制通信,然后才开始产生数据发送请求状态,但是也有部分PC不会拉低时钟来抑制通信,而是直接产生数据发送请求状态,所以在检测主机有没有数据发送的时候直接检测有没有数据发送请求是比较好的,一般情况下,当PC要发送数据给设备时,会重试三次,每次10ms超时,如果在重试三次设备都没有响应,那就比较危险了,如果是要发送关健的数据,可能会直接导致设备不能识别的情况

对于PS2键盘,必须要回复的命令如下:

1,         主机命令设备复位(0xff),设备必须应答0xfa后回复0xaa;
2,         主机请求获得设备ID命令(0xf2),设备必须应答0xfa后回复0xab,0x83;
3,         主机ECHO命令(0xee),设备直接回复0xee;

除以上命令之外的其它命令,设备只要回复0xfa即可,当然要视设备的功能作相应的动作。

对于PS2鼠标,要做的事情比较多,而且比键盘更容易不被PC识别,一个简单的PS2鼠标,必须支持STREAM模式及WRAP模式,STREAM为鼠标的主要功能,但是有些PC刚开机的时候会命令鼠标进入WRAP模式,否则就不识别此设备,还有一点比较重要的就是不要在PC发送使能鼠标(命令0xf4)之前发送移动及按键数据,而且一旦收到禁止数据命令(0xf5)后立即停止发送移动及按键数据,直到主机再次发送使能命令之后。否则会出现在有些PC中虽然鼠标能被识别,而且在Windows也能移动,但是快速移动几秒钟之后鼠标就死了,使用示波器量数据线,发现数据还在传输,实际上在这种情况下,主机并没有拉低时钟来禁止鼠标,而是认为这个设备是一个疯狗,不会理会它发送的任何数据。

除了要支持以上二种模式之外,必须回复的命令如下:

1.         主机命令设备复位命令(0xff),设备必须应答0xfa后回复0xaa,0x00
2.         主机请求获得设备ID命令(0xf2),设备必须应答0xfa后回复ID:0x03(适用于标准的3D鼠标);
3.         主机请求状态命令(0xe8),设备回复:0xfa,0x00,0x02,0x64;



PS鼠标使用如下的坐标系,这跟USB鼠标使用的坐标系是不同的:

(原文件名:坐标.JPG)

不管是键盘还是鼠标,在整个Windows启动的过程中会被检测二次,第一次是BIOS检测,第二次是Windows检测,如果第一次未通过,则第二次不会再检测,而且二次检测都必须通过再能使用,有趣的是有些PC在BIOS检测之后,Windows启动之前再插入键盘,还是可以使用的,但是Windows启动之后就会拉低时钟来禁止设备,