欢迎访问ic37.com |
会员登录 免费注册
发布采购

单片机兼容USB2.0规范的描述符

日期:2009-1-5标签: (来源:互联网)
除了上述所介绍的描述符类型外,若用户想要将1.x规范的设各兼容2.0规范,就必须对描述符作若干的修正。在双速度设各中,如 何通过读取其描述符来检测设备的目前速度,就是一个非常重要的课题。

如表1所列,为1.x规范设备要与2.0规范设备兼容时,所须修改的描述符字段。其中,用户会发现仅具各等时端点的设各须去修 改等时端点描述符的内容,而在设备描述符中,唯一也是仅须去修改的字段是bcddevice,且将其更改为0200h。

在此须知道,设备的预设上,必须要求无等时的带宽。这是因为这些接口并没有使

用等时传输的数据,若设各想要去执行等时传输,它必须支持至少一个接口设置,其中还须内含至少一个端点描述符。而有部分1.x 设备也已经符合了这个要求。所以说,若没有使用等时传输,也就无须更改这些字段设置值。

在2.0规范中对于已存在的字段的若干位,增加了2个新的描述符与功能。但是如表1所列,所使用到的新描述符仅用在双速度的设 各上。而所存在的描述符也与规范1.x向下兼容。

表1 1.x规范与2.0规范兼容所须改变的描述符类型及其字段

而高速设备必须以全速的方式来响应设备列举的标准要求的过程,以及也可能具备与全速完全兼容的功能。

前面的章节有提及过,如果一个具备与高速兼容的设备连接至1.x规范主机,或如果介于主机与设备之间使用1.x规范集线器,就必 须使用全速的功能。

而对于应用程序与设备驱动程序通常无须知道这双速度设备是使用何种速度,因为所有的应用程序与设备驱动程序若与速度相关的 都可以以较低阶的方式来加以处理。事实上,windows操作系统没有直接的方法可以知道设备的速度是什么,但是,还是有一些小技巧,可以让主机知道有一些设备仍可提供相关信息。

例如,如果设备具有批量端点,用户即可通过设备列举,以主动的方式去取得并检查端点描述符的信息。其中,对maxpacksize字段 来说,若设置为512(个字节),即可知道目前所连接上的是高速设备。这是因为全速设备不能设置这个数值。若以此方式来推演, 假设没有批量端点,也可以使用中断端点与等时端点所设置的maxpacksize字段,同样地,用户也可用来判断此设备是属于哪一种速 度。其中,针对中断端点的maxpacksize字段来说,若设置超过64的数值,就可表示目前是高速设备。但是,若高速设各也有可能设 置为64,或更低的maxpacksize值。再者同样的道理,对于等时端点的maxpacksize字段来说,若设置为1 024的数值,表示目前连接 上的是一个高速设各。但是,相对的高速设备也有可能设置为l 024或更低的maxpacksize值。因此,这种方式并不能绝对保证此设备 一定是高速设备。

如果用户曾经编写过固件程序代码,用户可以通过配置描述符或other_speed_configuration描述符,利用可选择性的配置字符串 索引来添加一些与速度相关的信息。例如,以cypress ez-usb fx2(usb 2.0)的固件范例程序代码bulkloop来说明。以下列出其描 述符文件的内容。

从这个程序范例码中观察到,可以把描述符分成:highspeedconfigdscr与full-speedconfigdscr两组,分别设置高速与全速的各种描述符。其中,设备描述符的bcd-device字段设置成:dw 0002h方式(因为是little endian),用来表示高速设备。

在稍前所叙述的usb设备描述符的“设备群组”字段以及“设备次群组”字段中,定义了设备群组。那什么是设各群组呢?在usb的 文件中,定义了将某种相同属性的设备整合在一起的群体,称之为群组(class)。而将这些相同属性的设备组合在一起的优点是, 可以同时开发该群组以pc主机为主的驱动程序。

例如,鼠标是属于人工接口设备的一种,其群组驱动程序已包含在操作系统下。如果鼠标也遵循了设备群组规范,那么鼠标的制造 商在出售时,根本就无须另外再附一套驱动程序。也就是可以直接使用windows 98 se或windows 2000所内建的人工接口设备的驱动 程序。这样,硬件的制造商只须专心开发其硬件电路即可。相对的,倘若该设备并不符合人工接口设备群组,就必须使用含有win32 api调用的vb、c++或delphi等高级程序,另外再编写其驱动程序。

以下列出usb规范中所定义的群组。

●audio:如喇叭等音频设各。

●communication:如调制解调器等通信设备。

display:如显示器等设备。

●human interface:包含了鼠标、键盘与摇杆等人工接口设备。

●mass storage:如软、硬盘等存储设备。

●image:如扫描仪或数码摄影机。

●printer:如打印机等打印设备。

●power:如ups等电源设备。

●physical interface:如动力响应式游戏摇杆等物理响应设备。

而相对的类别常数,列在表2中。

表2 各种群组的范例与类别常数

这些类别常数是编写驱动程序所加以定义的。

在所有的群组中,最常使用的就是human interface device,即人工接口设备(简称hid)群组。而关于hid群组的应用与特性将于 稍后的章节中,详细地加以介绍。此外,在表3中.分别列出了各个群组规范所设置的设备群组码与接口群组码。这些值分别设置于 稍前所叙述的设备描述符与接口描述符中。

而之所以那么繁琐地设置各种设备群组码与接口群组码的原因,在于usb是一种正如其名的通用串行总线。因此,为了与各种设备连 接在一起,就必须加以分类。因此所有的usb设各除了必须符合稍前所描述的usb规范外,群组中所自定义的设备,也必须符合该群组 的特性与规范。(不然,怎能称之为群组呢?)更进一步地说,用户不可

能设计或自创一种不在表3所列的usb设各或操作系统不曾认可的设备。而这也是用户在设计usb外围设各的困难之处。因此,在稍后 的章节中,将会探讨设各与驱动程序部分,了解各设备与驱动程序相关联之处。

表3 设备群组码与接口群组码

*指的是irda/usb bridge,而其次群组码是0x01。