首页 理论教育 USB分层框架结构及其应用

USB分层框架结构及其应用

时间:2023-11-17 理论教育 版权反馈
【摘要】:图14-9USB库的框架结构在图14-9中所示的4种可能的应用程序,将使用不同的编程接口来实现自己的USB功能。USB设备API可看作是一组扩展USB DriverLib库的高层次API,而不仅仅是对其进行简单的封装。因此,在开发USB设备API时,调用一些底层USB驱动API仍然是必要的。⑤可选配的USB缓冲区对象可用来进一步简化数据发送和接收。

USB分层框架结构及其应用

固件库分层结构可使开发人员依照自己的需求来调用不同层的API,如图14-9所示。

978-7-111-51624-8-Chapter14-17.jpg

图14-9 USB库的框架结构

在图14-9中所示的4种可能的应用程序,将使用不同的编程接口来实现自己的USB功能。下面将简要介绍图中4层API函数的特点:

1)USB驱动程序库API(USB DriverLib API):是USB设备堆栈中最底层的USB驱动程序,位于DriverLib库中的usb.c源代码和头文件usb.h.中。在图14-9中的“应用程序1”提供了直接编写设备功能的API。其实,这个API(固件库)是上面USB控制器硬件寄存器中非常薄的一层,因此不提供任何更高级别的USB事务支持(如端点零事务处理,标准描述符和请求处理等),应用程序通常不会仅使用这个API来访问USB功能。所以,该驱动程序库在开发USB应用时适合作为一个接口来使用,例如,第三方的USB堆栈。

2)USB设备API(USB Device API):USB设备API在USB库用尽可能多的类独立代码为开发全功能的USB设备应用程序提供了一组专门的函数。该API通过从主机标准请求支持设备枚举并处理代表应用程序的端点零状态机。使用该接口的应用程序将提供在初始化期间要发布到主机的描述符,以及提供配置硬件所需的USB设备API信息。不但与异步事件有关的USB设备通过回调函数集来通知应用程序,而且还提供了对USB设备初始化的API。该API用于在USB设备类驱动程序的开发以及提供现有类驱动程序不支持的USB功能应用程序的直接使用,也可以被现有的类驱动程序API(USB Device Class Driver API)不支持的USB功能应用直接使用。该设备的例子需要复杂的接口切换设置。USB设备API可看作是一组扩展USB DriverLib库的高层次API,而不仅仅是对其进行简单的封装。因此,在开发USB设备API时,调用一些底层USB驱动API仍然是必要的。

3)设备类驱动程序API(USBDevice Class Driver API):设备类驱动程序库提供了所需高层次特定的USB功能,而无需大多数的USB事务处理和所需的连接管理。这些驱动程序提供高层次的API,几种常用USB设备类的特点如下:

①使用极为方便。即设备设置包括创建一组静态的数据结构和调用单一的初始化API。

②可配置的VID/PID、电源参数和字符串表、使设备易于定制,而无需修改任何库函数代码。

③一致的接口。即所有的设备类驱动程序库使用类似的API,使其非常简捷地在它们之间移动。(www.xing528.com)

④最小的应用程序开销。即绝大多数的USB处理都是在类驱动程序中进行的,低层只用于处理应用程序中的数据读/写。

⑤可选配的USB缓冲区对象可用来进一步简化数据发送和接收。即使用USB缓冲区,与设备类驱动程序的互动可变为一个简单的读/写API,而无需状态机来确保在正确的时间发送或接收数据。

⑥设备类驱动程序的API完全封装了底层USB设备和USB驱动程序的API,使应用程序只有一个单一的API接口。

折中这些优势,要求应用程序开发人员在使用设备类驱动程序库API时应注意以下限制:

①当设备类驱动程序API在使用时,不可调用其他任何的USB层。

②设备类驱动程序不支持切换配置。

注意:目前提供的设备类驱动程序,允许创建一个通用的大容量设备、一个通信设备类设备(虚拟串口)和人机接口设备类设备(鼠标、键盘、游戏杆等),也包括用于复合设备的特殊类驱动程序。作为一个包装,允许在一台设备中使用多个设备类驱动程序。

4)USB设备类API(USB Device Class API):在某些情况下,使用标准的设备类可创建多种不同和多样的设备,在该状况下,一个额外的API层将为专门的设备提供进一步的操作和简化应用程序的接口。例如,人机接口设备(HID)类就是这样的一个类,用于支持多种设备,包括键盘、游戏杆、鼠标和游戏控制器等。HID设备类驱动程序是非常通用的,可支持尽可能宽泛的设备。为了简化使用的接口,它提供特定的API来支持BIOS兼容的键盘和鼠标操作,使用鼠标类API替代基本的HID类驱动程序API,因而,应用程序可使自己对于USB主机使用非常简单的接口作为一个鼠标可见,包括初始化调用和鼠标移动或按钮按下的通知调用等。在使用键盘设备类的API时,应用程序可使用单一API发送按键以及间断信息到主机而无需知道底层结构和USB HID协议,因而可大大简化USB设备的编程及操作。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈