引言
市面上大多数RFID阅渎器采用串口或PS2接口与PC通信,串口方式需要安装USB转串口驱动,PS2接口不支持热插拔。为了弥补以上两者的缺陷,本文提出了采用USB接口与PC通信的方式。HID类设备是应用最广泛的一类USB设备,Windows等操作系统内嵌的HID类驱动程序、键盘、鼠标等通用HID设备得到了广泛的应用。从Windows98操作系统开始,为HID类设备提供了通用的驱动程序,所以只要按照HID设备类的规范编写设备的固件程序,就能够让Windows系统自动识别设备,省去了复杂的驱动程序编写过程。
1 HID设备描述符
在USB中,USB HOST通过各种描述符来识别设备。HID设备描述符包含5个USB基本描述符(设备描述符、配置描述符、接口描述符、端点描述符、字符串描述符)和3个HID设备类特定描述符(HID描述符、报告描述符、实体描述符),它们之间的关系如图1所示。
2 HID设备枚举
USB主机识别一个USB设备必须经过枚举过程,主机使用总线枚举来识别和管理设备状态的变化。总线枚举过程如下:
①连接设备。USB设备接入USB总线。
②设备上电。USB设备可使用USB总线供电,也可使用外部电源供电。
③主机检测到设备,发出复位。设备连接到总线后,主机通过检测设备在总线的上拉电阻,检测新的设备连接,并判断该设备是全速设备还是低速设备,然后向该端口发送一个复位信号。
④设备默认状态。设备要从总线上接收到一个复位信号后,才可以对总线的处理操作作出响应。设备接收到复位信号后,就使用默认地址(00H)来对其进行寻址。
⑤地址分配。当主机接收到有设备对默认地址(00H)响应的时候,就对设备分配一个空间地址,以后设备就只对该地址进行响应。
⑥依次读取HID设备的设备描述符、配置描述符、接口描述符、HID描述符、端点描述符、字符串描述符。
3 HID接口固件设计与实现
3.1 硬件连接
PDIUSBD12是一个纯粹的USB接口芯片,仅处理USB通信,自身不带微控制器,需要有一个微控制器对它进行控制。微控制器AT89S52与PDIUSBD12的连接如图2所示。ALE接低电平表示一个独立的地址和数据总线配置。PDIUSBD12的A0引脚控制PDIUSBD12的命令和数据状态。AT89 S52的地址和数据总线可直接与PDIUSBD12的数据总线相连。
3.2程序设计
PDIUSBD12接收主机的建立包时产生一个中断,微控制器响应中断,然后通过读PDIUSBD12的中断寄存器决定数据包是发送到控制端点还是普通端点。如果数据包是送往控制端点,微控制器通过读PDIUSBD12最后处理状态寄存器。进一步确定数据包是否是一个建立包。然后进入到控制端点输入或输出服务子程序。具体程序流程如图3所示。其中,USB没备的枚举过程由控制端点来完成,传入主机显示的数据由普通端点完成。
由于程序中将设备枚举为HID键盘,所以传输时应满足HID键盘的要求,例如在HID键盘的端点描述符中卢明,主机每10 ms之内响应一次设备,所以每传输一个数据必须等待10 ms才能传下一个,如果两次传输相同的数据,必须在其中插入一个空包(00,00,00,00,00,00,00,00),否则主机会认为只传输一个数据。键盘码详见HIDUsage Tables,数据包由8个字节构成,前两个字节为0,后面为键值,每一个字节表示一个按键。理论上一次可以传输6个按键,但是实验过程中丢失键值经常发生,所以只采用第3个字节传输,其余字节为0。
3.3 程序运行结果
设备枚举为HID键盘如图4所示,成功将设备枚举成HID键盘。
首先利用RFID阅读器的桌面DEMO程序给标签的USER区写入验证的数据,然后利用阅读器将写入的数据读取,经过HID方式传送到记事本上,数据传输如图5所示。
结语
本设计满足了RFID阅读器传输数据量不大,速度要求不高,但必须在短时间内作出响应的要求。设备无须编写驱动程序,连接PC后就能工作,缩短了开发的时间。