最近在开发一款 PS2 游戏机产品,学到了很多东西,也遇到很多问题,在这里把自己认为重要的东西记下来, 作为以后的备忘, 如果你在这篇文章中学到哪怕一点点东西, 我都将会感到很荣幸。关于 PS 2 游戏机更详细的文章, 应该算是 Adam Chapwesk e著 Roy Sho w 译的“ PS 2 技术参考”, 其实开发一款 PS2 产品, 兼容性是很重要的, 在我们开发的这款 PS 产品中就出现过这样的问题,我们测试了几十台 PC 都是没问题的,可是偏偏就在一台 HP 的 PC 上不能识别,找了很久才发现问题所在。设备到主机的通信, 当设备要发送数据给主机时, 只要检测到总线有空, 就可以发了, 这里简单给出波形图,更详细的请参考“ PS2 技术参考“。( 原文件名:d to ) 下面是主机到设备通信的简单波形图: 使用示波器抓下来的主机跟设备通信的实际波形: ( 原文件名:) 主机到设备的通信,当主机要发送数据给设备时,大部分 PC 都会先拉低时钟线至少 100u s 来抑制通信, 然后才开始产生数据发送请求状态, 但是也有部分 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 鼠标使用的坐标系是不同的: ( 原文件名: ) 不管是键盘还是鼠标, 在整个 Windows 启动的过程中会被检测二次, 第一次是 BIOS 检测, 第二次是 Windows 检测,如果第一次未通过,则第二次不会再检测,而且二次检测都必须通过再能使用,有趣的是有些 PC 在 BIOS 检测之后, Windows 启动之前再插入键盘,还是可以使用的,但是 Windows 启动之后就会拉低时钟来禁止设备, 附件是实际的波形及部份代码 PS2 实际波形 ( 文件大小:65K) ( 原文件名:PS2 ) PS2 键盘鼠标例程 ( 文件大小:4K) ( 原文件名:) 1. #include <> 2. #include <> 3. #include <> 4. #define uchar unsigned char 5. #define uint unsigned int 6. 7. uchar code dout[5]={0x01,0x42,0x00,0x00,0x00}; 8. uchar data din[5]={0x00,0x00,0x00,0x00,0x0
PS2游戏机手柄资料 来自淘豆网m.daumloan.com转载请标明出处.