设备应用于智能遥控器中的设计与实现
、Y 轴和Z 轴方向的加速度数据,Gyro产生X 轴、Y 轴和Z 轴方向的角速度数据。MCU 通过I2C 总线不断的轮询传感器模块来获取这些数据,并把这些数据分析整理成8 个字节的数据包, 再以2.4 GHz 射频通信协议打包发送给Dongle 端。
图2 传感器与MCU 之间连接的电路图
Dongle 端通过射频收发模块与遥控器端进行数据传输,通过USB 总线与电视机之间进行数据传输。Dongle 端模块的硬件电路比较简单, 功能模块框图如图3 所示, 采用单片机IA2E 作为它的MCU。由于IA2E 中包含了射频收发模块和USB 接口模块,所以只需要一个MCU 即可。IA2E 集成了USB通讯中的底层协议, 具有省事的内置固件模式和灵活的外置固件模式,它只是负责数据交换,所以单片机程序设计非常简洁。另外,可以在Dongle 端设计LED 灯电路模块,不仅美观,而且可以辅助软件更好地实现体感游戏手柄的功能, 还可以用来标识电视机的工作状态,保证Dongle 端做出正确的响应。
图3 Dongle 端功能模块框图
2.2 软件系统设计
本系统所设计和实现的体感游戏手柄具有输入和输出的功能,即它具有输入和输出HID 数据包。它不像键盘和鼠标是标准的HID 设备,需要根据HID 规范自定义它的数据包格式。根据数据包的格式,写出其报告描述符,以保证在枚举过程中正确识别出体感游戏手柄设备。Dongle 端分析整理从遥控器端获取到的数据,根据设备的报告描述符,识别出体感游戏手柄数据,并把这些数据整理成符合其输入数据包格式的数据,然后Dongle 端再以USB 协议的通信方式,将整理好的数据传输给电视机。同时Dongle 端接收电视机反馈回来的数据信息, 并整理成符合其输出数据包格式的数据,然后将信息反馈给遥控器端,遥控器端再作出相应的响应。
与所有HID 设备一样,具有体感游戏手柄功能的智能遥控器Dongle 端的应用程序设计也主要包括以下4 个方面的工作:1)查找所有HID 设备;2)确定哪一个是用户需要的HID 设备,并连接该设备;3)获得HID 设备的信息;4)根据用户需要,读取HID 输入报告或者写入HID 输出报告。
智能遥控器中可能定义了多个HID 设备,需要使用两个接口,接口0 用于实现其他HID 设备的功能,接口1 用于实现体感游戏手柄的功能。因此需要两个非零端点,因为同一配置下的不同接口,必须使用不同的端点。而数据是通过非零端点进行传输的,体感游戏手柄的接口选用端点2 返回或发送报告数据。Dongle 端通过端点2 输入向电视机返回体感游戏手柄的数据,电视机通过端点2 输出中断将反馈给遥控器的信息发出。
Dongle 插入后,怎样让电视机识别出USB 体感游戏手柄呢?设备枚举的功能就是实现电视机识别设备的过程,只有枚举成功了,电视机才能识别出设备,建立电视机与设备之间的通信。设备的枚举过程都是通过端点0 实现的。电视机通过端点0 输出中断发出各种请求,数据存放在端点0 的输出缓冲区中。Dongle 端读取并分析端点0 输出缓冲区的数据,然后通过端点0 输入中断做出相应的响应,数据存放到端点0输入缓冲区中, 在电视机下一次发送IN 令牌包后,MCU 会自动将端点0 输入缓冲区数据返回给电视机。当Dongle 端有多个报告描述符时,程序怎么知道电视机请求的是哪个呢? 电视机要获取报告描述符时,请求是发送到接口的。当电视机发出发送到接口1 的报告描述符请求时,Dongle 端会返回体感游戏手柄的报告描述符数据给电视机, 从而成功完成枚举过程。电视机识别出体感游戏手柄,建立它们之间的通信。
在本系统中,通过在芯片的集成开发环境中添加USB 模块,根据实现设备的功能特点,做出相应设置并编译,实现设备枚举过程的功能及所需的代码, 然后再根据设备的实际需求做相应的修改, 在Dongle 端程序的主函数中初始化USB 模块,就可以实现电视机识别Dongle,进而识别出体感游戏手柄设备。Dongle 端程序主流程图如图4 所示。进入主函数,MCU 首先完成一系列初始化,包括中断配置和USB模块初始化(开始枚举过程)。然后程序就处于一个无限循环中,实现电视机和设备之间的实时通信。
图4 Dongle 端程序主流程
电视机和设备之间不是随时都能够进行通信的,只有设置了非零配置之后才能进行数据传输。在无限循环中,首先判断电视机和Dongle 端的通信是否准备好,即设备的枚举过程是否成功完成。这需要获取配置值,进行判断,若配置值非零,说明电视机和Dongle 端的通信已建立。Dongle 端不断的获取从遥控器端发来的数据,根据设备的设备描述符、配置描述符集合(包括断点描述符、接口描述符等),分析整理后存放到相应HID 设
- 一款基于安卓手机wifi的智能遥控器设计(08-26)
- FPGA的DSP性能揭秘(06-16)
- 基于单片机通用引脚的软件UART设计(10-16)
- 分时操作系统思想在单片机中的具体应用 (10-30)
- 基于AT89C51+DSP的双CPU伺服运动控制器的研究(05-26)
- 关于RTX51 TINY的分析与探讨(05-30)