引言
随着USB通信技术的不断发展,USB接口得到了广泛的应用。单一功能的USB设备,如USB键盘、USB鼠标、USB调制解调器等,已经不能满足人们对USB设备功能的要求。多功能的USB设备正不断涌现出来,常见的有带话筒的USB摄像头、USB可视电话等[1]。因此,研究多功能USB设备对于满足人们对新型USB设备的需求是十分必要的。
1 多功能USB设备的结构模型
多功能USB设备通常是通过单个或多个USB控制器连接不同类型的设备来实现的。而在一个USB接口上实现多个设备有两种方法:一种是复合设备(Compound Device),一种是组合设备(Composite Device)[2]。图1和图2分别给出了复合设备和组合设备的结构模型。
实际上,USB设备应该被视为不同的功能。多个功能可以被封装在一起形成一个物理设备。所以复合设备其实就是几个设备通过一个USB Hub形成的单一设备,复合设备内的Hub和与Hub相连的各个功能会分配各自的设备地址。组合设备也就是具有多个接口的设备,每个接口代表一个独立的设备,但是组合设备只有一个设备地址[3]。
图1 复合设备结构模型
图2 组合设备结构模型
采用复合设备方法开发多功能USB设备时,其开发过程同开发两种不同类型的USB设备相同,开发难度较低。本文重点介绍组合设备的设计方法,并举例加以实现。
2 组合设备的设计方法
2.1 组合设备的特点
USB组合设备是指具有多个接口且接口间相互独立的USB设备。一个USB设备只有一个设备地址,可以将不同的功能与不同的接口对应,来开发多功能USB设备。
组合设备采用一个USB控制芯片,同时接A设备和B设备。主机可以同时与A设备和B设备通信。
2.2 组合设备的描述符结构
如图3所示,以两个接口的组合设备为例,来说明组合设备的描述符结构。一个设备描述符下有一个配置描述符,一个配置描述符下可以有多个接口描述符,分别对应不同的设备。每个接口描述符下又包含多个端点描述符。一个USB逻辑设备对USB系统来说就是一个端点集合。端点可以根据它们实现的接口来分类。所有的USB设备都需要实现一个缺省的控制方法。这种方法将端点0作为输入端点,同时也将端点0作为输出端点。USB系统用这个缺省方法初始化及一般地使用逻辑设备(即设置此设备)。设备可以有除端点0以外的其他端点,这取决于这些设备的实现。低速设备除端点0外,只能有2个额外的可选端点。而高速设备可具有的额外端点数仅受限于协议的定义。除缺省控制通道的缺省端点外,其他端点只有在设备被设置后才可使用。而且除端点0外,其他端点在不同接口间不能共享[4]。
图3 组合设备描述符结构
组合设备使用一个USB控制芯片,通过控制不同的接口与不同的设备进行通信,解决了主机与组合设备内各个设备数据流的区分问题。
3 组合设备的硬件实现
3.1 USB接口部分
设备采用Holtek公司的8位USB多媒体键盘编码器HT82K95E作为本系统的核心。鼠标、键盘等HID类设备为低速设备,所以该设备要能同时实现鼠标和键盘数据同PC机的双向传输,MCU首先必须具有低速的USB接口,并且支持3个端点(包括端点0)[5]。综合考虑,选用了HT82K95E作为本系统的主控芯片。由于鼠标和键盘均属于低速设备,所以应在USB信号线上加1.5 kΩ的上拉电阻[4]。
3.2 MCU部分
USB接口部分原理图如图4所示。MCU的复位电路采用由R1和C1组成的RC积分电路来实现上电复位功能。上电瞬间,由于电容电压不能突变,所以复位引脚为低电平,然后电容开始缓慢充电,复位引脚电位开始升高,最后变为高电平,完成芯片的上电复位。HT82K95E微控制器内部还包含一个低电压复位电路(LVR)用于监视设备的供电电压。如果设备的供电电压下降到0.9VLVR的范围内并且超过1 ms的时间,那么LVR就会自动复位设备[6]。
应当注意的是,对于该设备的复位电路,还应加一个BAT54SW二极管,接法如图4中D1所示。如果不加D1,设备在第一次使用时能够正常复位,但在以后的使用中却无法正常复位,原因是电容中的电荷无法释放掉,而D1可以通过整个电路快速释放掉电容中的电荷[7]。
该组合设备采用HT82K95E USB控制芯片,通过对两个接口的管理,实现了鼠标和键盘的功能。
4 固件设计
USB固件程序是USB设备功能的核心。对于HID设备,其主要的功能设计都是在固件程序中进行的。这里采用Holtek C语言进行带键盘的鼠标组合设备的开发。
HT82K95E芯片的ROM空间是按页(page)来划分的,1页为256个字。这样,整个ROM空间正好划分为若干连续的页。单片机ROM中的任何区域都可以用来查表[5]。在这里只介绍Holtek C中的一种查表指令:TABRDL [m]。该指令用于查ROM中最后1页的数据。HT82K95E具有表指针寄存器TBHP,在使用TABRDL指令时,TBHP默认为最后1页的首址高位。通过查表,表格的低位字节送入[m],高位字节送入TBLH寄存器。
在固件设计中,将描述符存储在ROM的最后1页,当主机请求设备的各种描述符时,通过TABRDL指令将描述符从最后1页取出,并传送给主机,完成设备的枚举过程。该组合设备的描述符在下面给出。
图4 USB接口部分原理图
设备描述符:
DeviceD:
DW 00112H, 00110H,00000H,00800H,01241H, 07fEEh, 07fEEh,00100H,00200H,00100H
配置描述符:
ConfigurationD:
DW 00209H
Wtotallength:
DW ASM_CONFIG_LEN
bNumberInterface:
DW 00102H,07f00h, 032A0h
接口0描述符:
InterfaceD_0:
DW 00409H,00000H,00301h,00201H,07f00H
HID_0:
DW 02109H,00110H,00100H,07F22H, ASM_ENTITY_LEN_0
EndpointD_0:
DW 00507H,00381H,00008H,07f10H
接口1描述符:
InterfaceD_1:
DW 00409H,00001H,00301H,00101H,07f00H
HID_1:
DW 02109H,00110H,00100H,07f22H,ASM_ENTITY_LEN_1
EndpointD_1:
DW 00507H,00382H,00008H,07f10H
ASM_CONFIG_LEN为配置描述符的大小,其值为配置描述符、接口描述符、HID描述符和端点描述符的大小的总和。ASM_ENTITY_LEN_0为鼠标报告描述符的大小,ASM_ENTITY_LEN_1为键盘报告描述符的大小[8]。描述符中其他各项的意义在本文中不作详细解释,通过使用周立功公司的USB分析仪USBAnalyser,可分析出该组合设备的枚举过程流程,如图5所示。
图5 组合设备枚举流程
结语
本文简要分析了多功能USB设备两种结构模型的不同,重点介绍了组合设备的设计方法。基于该设计方法,采用Holtek的8位单片机HT82K95E芯片设计了一款鼠标键盘组合设备。在开发此组合设备的过程中,可以分别调试两个接口,如果每个接口都可正确运行,接着就可编写两个接口的描述符,实现组合设备的功能。组合设备对USB控制器可提供的端点数量和这些端点所支持的传输类型有所限制。USB控制器需较好的支持设备A和设备B间的传输协议。目前,不少芯片厂商也逐渐提供了组合设备的芯片方案。