PS2协议开发心得 【恢复】
最近在开发一款PS2产品(这里说的PS2是指使用PS2协议的键盘鼠标,不是PS2游戏机,呵呵),学到了很多东西,也遇到很多问题,在这里把自己认为重要的东西记下来,作为以后的备忘,如果你在这篇文章中学到哪怕一点点东西,我都将会感到很荣幸。关于PS2更详细的文章,应该算是Adam Chapweske著Roy Show译的“PS2技术参考”,其实开发一款PS2产品,兼容性是很重要的,在我们开发的这款PS产品中就出现过这样的问题,我们测试了几十台PC都是没问题的,可是偏偏就在一台HP的PC上不能识别,找了很久才发现问题所在。
设备到主机的通信,当设备要发送数据给主机时,只要检测到总线有空,就可以发了,这里简单给出波形图,更详细的请参考“PS2技术参考“。
http://cache.amobbs.com/bbs_upload782111/files_11/ourdev_546117.JPG
(原文件名:d to H.JPG)
下面是主机到设备通信的简单波形图:
http://cache.amobbs.com/bbs_upload782111/files_11/ourdev_546137.JPG
(原文件名:H to D.JPG)
使用示波器抓下来的主机跟设备通信的实际波形:
http://cache.amobbs.com/bbs_upload782111/files_11/ourdev_546157.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鼠标使用的坐标系是不同的:
http://cache.amobbs.com/bbs_upload782111/files_11/ourdev_546158.JPG
(原文件名:坐标.JPG)
不管是键盘还是鼠标,在整个Windows启动的过程中会被检测二次,第一次是BIOS检测,第二次是Windows检测,如果第一次未通过,则第二次不会再检测,而且二次检测都必须通过再能使用,有趣的是有些PC在BIOS检测之后,Windows启动之前再插入键盘,还是可以使用的,但是Windows启动之后就会拉低时钟来禁止设备,
附件是实际的波形及部份代码
PS2实际波形ourdev_546437.rar(文件大小:65K) (原文件名:PS2 Waveform.rar)
PS2键盘鼠标例程ourdev_546438.rar(文件大小:4K) (原文件名:PS2KM_CODE.rar)
本贴被 cody 编辑过,最后修改时间:2008-12-16,14:06:49. 沙发 收下了,想问下LZ的上面的哪个波形图是什么东东做的,还是测试出来的。 mark 好东西一定要收藏! 回2楼:
收下了,想问下LZ的上面的哪个波形图是什么东东做的,还是测试出来的。
-----------------------------
使用示波器测量再存储下来的。 先做记号! 谢谢.. 顶一下,还用不着PS2 MARK 支持楼主,虽然暂时用不着。 mark LZ是真正在做事情,表扬一下。 可是偏偏就在一台HP的PC上不能识别,找了很久才发现问题所在
想问一下 问题在哪里啊 好动西,收藏啦! 好东西,收藏 示波器不错 收藏 这样的开发心得很难德... 收藏 什么示波器???正准备买个好点的。。。。 谢谢了 【20楼】 wkman
什么示波器???正准备买个好点的。。。。
----------------------
LeCroy的,这个示波器比较贵,很大个,有四五十斤重(我亲自搬过),听测试工程师说当时买了40多W,不知道是不是真的,没有去考证. 好东西,收藏 mark 谢了·· 写的很好,收藏。
以前我也做过PS2,当时费了好大劲。
我的感受是,PS2资料比较少,网上最全的资料也只是“PS2技术参考”。
论通用性,USB HID键盘是更通用的方式,而且价格也在不断的降低,最近我正要把PS2的产品转型到USB HID PS2确实难搞~~谢谢 前几天有同学在弄PS2接口的扫描仪,呵呵,自带两个PS2接口一公一母,但是两个PS2接口不是全部相通,只有电源线是通的,查了老半天才查出来! MARK 顶一下 谢谢楼主的分享 收藏 MARK 不错。,好像mcu用的奇怪点。是松瀚的??? 谢谢咯 很想知道为什么偏偏在HP那台不通过 mark! 好贴一定要顶! 谢谢。MARK mark MARK
收藏了先! 谢谢! 谢谢 mark,好东东! 收藏 好东西,做个记号! mark 谢谢! 好东西支持。。1! 可是偏偏就在一台HP的PC上不能识别,找了很久才发现问题所在
想问一下 问题在哪里啊 可是偏偏就在一台HP的PC上不能识别,找了很久才发现问题所在
想问一下 问题在哪里啊 Thanks & mark 占位 可是偏偏就在一台HP的PC上不能识别,找了很久才发现问题所在
想问一下 问题在哪里啊 收藏 可是偏偏就在一台HP的PC上不能识别,找了很久才发现问题所在
想问一下 问题在哪里啊 MARK 设备到主机的时序图是不是有错误啊?
设备发数据到主机,不是在下降沿被读取的吗?怎么看那图片好象是上升沿被读取似的!!! 收藏 以后要用到 先做个几号 厉害啊。。调了好几天,都快垮了示波器看不到全部的信号啊,这次看来有戏了谢谢楼主 收下了,谢谢 MARK
收藏好 作个记号哈! mark 做个标记,以便以后查找方便。。。PS2。。。。 非常好的东西 做个标记! 好东西,支持一下 mark MARK mark 谢谢!LZ 正是我想要的 mark mark 好文章啊!马克 收藏 正想学学ps2谢谢LZ MARK mark,很好,很不错。 留个记号,以后好看。 学习 mark 书签。 好贴,记录一下,有空看 mark 标记。回家再看 可是偏偏就在一台HP的PC上不能识别,找了很久才发现问题所在
想问一下 问题在哪里啊 mark mark 学习了
这在调试单片机模拟的PS2键盘,开机初始化通过,可以往windows记事本发字符。
但是,只要移动鼠标(买来的标准PS2鼠标),键盘的MCU就能接收到数据。不知道为啥? mark mark 回复【楼主位】cody
-----------------------------------------------------------------------
ding 【57楼】 abcling
设备到主机的时序图是有错误,是在下降沿被读取的。
http://cache.amobbs.com/bbs_upload782111/files_27/ourdev_537104.gif
(原文件名:PS2_wave_1.gif)
http://cache.amobbs.com/bbs_upload782111/files_27/ourdev_537105.gif
(原文件名:PS2_wave_capture.gif) 好东西,mark!! 正想学学ps2谢谢LZ 333333333 先Mark一下吧 mark
页:
[1]
2