单片机兼容USB2.0规范的描述符
扫描二维码
随时随地手机看文章
除了上述所介绍的描述符类型外,若用户想要将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规范中所定