PS2鼠标使用USB接口的转换器.doc

  1. 1、本文档共4页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
PS2鼠标使用USB接口的转换器 发布: 2011-8-17 | 作者: —— | 来源:baijianyue| 查看: 261次 | 用户关注: 刘亮为了出差方便,笔者购置了笔记本电脑,由于笔记本电脑已淘汰了PS2接口,于是家中的PS2鼠标就被闲置了起来,笔者突发奇想,USB鼠标可以通过一个简易的转接器插到台式机的PS2口中使用,反过来行不行呢?笔者做了试验,结果却很失望,根本不行。看来需要另辟蹊径,于是,一不做二不休,用PDIUSBD12和51单片机设计了一个PS2转USB的协议转换器。原本其实并不抱太大的希望,结果却神奇般地成功了,而且不需要另外编写驱动,采用USB直 刘亮 为了出差方便,笔者购置了笔记本电脑,由于笔记本电脑已淘汰了PS2接口,于是家中的PS2鼠标就被闲置了起来,笔者突发奇想,USB鼠标可以通过一个简易的转接器插到台式机的PS2口中使用,反过来行不行呢?笔者做了试验,结果却很失望,根本不行。看来需要另辟蹊径,于是,一不做二不休,用PDIUSBD12和51单片机设计了一个PS2转USB的协议转换器。原本其实并不抱太大的希望,结果却神奇般地成功了,而且不需要另外编写驱动,采用USB直接供电,识别为USB鼠标,十分好用,现将制作成果分享如下。 硬件设计 电路原理图如图1所示。 其中鼠标PS2接口的引脚定义如图2。 电路的主体为ATMEL公司的51系列芯片ATMEL89S52(以下简称S52)和PHILIPS公司的并行传输USB接口芯片PDIUSBD12(以下简称D12)。S52相信读者已经非常熟悉了,最高24MHz的主频,256字节的RAM,4组8位I/O口,没有什么特别的功能,一切中规中矩,本设计在此仅用到一个外部中断。但这同时也说明,任何51内核(带总线)的单片机都可以适用。 PDIUSBD12是应用十分广泛的并行接口USB控制芯片,作为实现USB接口的标准组件,D12使设计者能够灵活选择合适的MCU,用最经济最快的方式实现USB外设的解决方案。 S52主要完成PS2接口鼠标的控制与数据获取,并通过PDIUSBD12与PC完成鼠标协议数据的传输。 为了精简电路,S52使用D12的可编程时钟源,通过编程输出高达24MHz的时钟,供S52使用;观察调试输出的Uart波特率需要为19200bps,便于快速输出信息,不耽误正常的USB枚举。 软件设计 鼠标的工作模式有四种,分别为Reset模式,Wrap模式,Remote模式和Stream模式。前两种作为测试用,Remote模式为主机有需要时,发送命令使鼠标回送位移数据,Stream模式是上电的初始模式,每当鼠标产生位置或者按键状态的改变就自动发送数据。显而易见,第四种模式最为合适。正常读取鼠标数据前只需发送命令(0xF4),此命令告知鼠标,主机已经准备完毕,可以接受位移数据。 但是这样简单的初始化存在着一个显著的缺陷,就是笔者发现滚轮无法使用了。这个问题困扰了笔者很久,原以为是软件编写出现小错误,引起鼠标能工作,但工作不正常。后来仔细查看了相关文档才发现,鼠标的初始化远没有那么简单,有点复杂却非常有趣:首先进行复位,这时的鼠标还是不带滚轮的,然后依次设置鼠标的采样率为200、100、80,这时候,就可以被识别为带滚轮的鼠标了,随后就根据需要,设置所需的采样率,一般默认的100即可。 PS/2鼠标与控制器间履行一种双向同步串行数据帧协议,每帧为11~12Bit,如图3所示。 按照标准的三键鼠标的数据包有效数据为3个字节,如图4所示。 读取PS/2鼠标数据后需要按照USB鼠标的格式进行转换。USB鼠标的数据格式如图5所示: 此鼠标的重点调试重点是S52的USB控制代码。笔者参考了PHILIPS的标准固件驱动代码,并进行了一定优化。 USB的控制代码通常由三部分组成。 (1)初始化:初始化主要对S52以及外围电路的初始化,通过复位,初始化USB并读取D12的ChipID进行确认(D12的ChipID为0x1012); (2)中断服务:用于对主机的令牌包的响应,主要包括StandardDeviceReq标准请求,VendorDeviceReq用户厂商请求和ClassFunctionReq类设备请求等,其中比较重要的为标准请求。标准请求的作用是告诉PC这是一个什么样的USB设备,包括USB类型、USB设备的描述符等; (3)主循环处理数据:用于对获得的USB鼠标数据的处理填充,并等待PC要求数据时将数据传送给PC。 Windows对USB设备的枚举顺序: (1)GetDeviceDescriptor:主机主要对Length感兴趣,即第2字节type必须为0x01,即Device,否则PC将重复2次后放弃(注意:此步只发送前16字节设备描述符); (2)SetAddress:

文档评论(0)

638922bb + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档