TM4C USBlib概况了解学习

usbdevice.h包含库提供的设备模式函数原型和数据类型的头文件。此文件是定义USB设备API的主头文件。

usbdbulk.h定义USB通用大容量设备类驱动程序API的头文件。

usbdcdc.h定义USB通信设备类(CDC)设备类驱动程序API的头文件。

usbdhid.h定义USB人机接口设备(HID)设备类驱动程序API的头文件。

usbdhidkeyb.h定义USB HID键盘设备类API的头文件。

usbdhidmouse.h定义USB HID键盘设备类API的头文件。

usbdenum.c库提供的USB设备枚举函数的源代码。

usbdhandler.c USB设备中断处理程序的源代码。

usbdconfig.c USB设备配置函数的源代码。

usbdcdesc.c用于解析根据节数组定义的配置描述符的函数的源代码(与USB设备API一起使用)。

usbdbulk.c USB通用大容量设备类驱动程序的源代码。

usbdcdc.c USB通信设备类(CDC)设备类驱动程序的源代码。

usbdhid.c USB人机接口设备(HID)设备类驱动程序的源代码。

usbdhidkeyb.c USB HID键盘设备类的源代码。

usbdhidmouse.c USB HID键盘设备类的源代码。

usbdevicepriv.h包含设备目录中不同源文件之间共享的定义的私有头文件。应用程序不能包含此头。

 

1USB DriverLib API USB设备堆栈中的最低层是USB驱动程序,可以在驱动程序库(DriverLib)中找到,源代码在USB.c和头文件USB.h中。上图中的“应用程序1”通过直接写入这个API来提供设备功能。由于此API是USB控制器硬件寄存器之上的一个非常薄的层,因此,它不提供任何更高级别的USB事务支持(例如端点零事务处理、标准描述符和请求处理等),应用程序通常不会将此API用作访问USB功能的唯一方式。但是,如果开发第三方USB堆栈,这个驱动程序将是一个合适的接口。

 

 USB库设备API

USB库设备API提供了一组专门用于开发功能齐全的USB设备应用程序的功能,其中尽可能多的类独立代码包含在USB库中。API通过来自主机的标准请求支持设备枚举,并代表应用程序处理端点零状态机。使用此接口的应用程序提供其希望在初始化期间发布到主机的描述符,这些描述符提供USB设备API配置硬件所需的信息。与USB设备相关的异步事件通过在初始化时还提供给USB设备API的回调函数集合通知给应用程序。此API用于开发USB设备类驱动程序,也可以直接用于希望提供现有类驱动程序不支持的USB功能的应用程序。这类设备的例子是那些需要复杂的备用接口设置的设备。USB设备API可以看作是对usbdriverlibapi的一组高级设备扩展,而不是它的包装器。在开发USB设备API时,仍然需要调用底层的USB DriverLib API。USB设备API的头文件是Device/usbdevice.h。

 

USB设备功能

API USB库提供了一种为USB设备配置全局设置的方法。USBDCDFeatureSet()函数允许应用程序在启动USB库之前通过设置功能来修改库的可配置功能选项。这允许在运行时自定义USB库,而不需要重建库。应用程序使用这些可配置选项来控制诸如电源设置和时钟选项等功能。

 

USB设备PLL功能在某些设备类上,如TM4C129x,USB库必须知道应用程序用于主PLL的是什么,因为USB控制器使用它来生成USB时钟。USB库默认为480 MHz PLL频率,但如果不是这样,则应用程序必须使用USBLIB_FEATURE_USB PLL选项调用USBDCDFeatureSet()函数,以通知USB库非默认PLL频率。以下是配置USB库以在应用程序使用320 MHz PLL时运行的示例。示例:使用320MHz PLL设置uint32_t ui32pllferquency;ui32pllferquency=320000000;///通知USB库系统正在使用320 MHz PLL运行。//USBDCDFeatureSet(0,USBLIB_FEATURE_USBPLL,&ui32pllferquency);

 

USB设备

电源功能由于许多USB设备需要确定自己的电源配置选项,USB库还提供电源的功能设置。电源选项使用USBLIB_FEATURE_power值和以下选项设置:USBLIB_FEATURE_power_BUS-USB设备模式为总线供电(默认)。USBLIB_FEATURE_POWER_SELF-USB设备模式为自供电。USBLIB_FEATURE_REMOTE_WAKE-启用USB远程唤醒功能。下面是将USB库配置为启用远程唤醒的自供电的示例。示例:通过远程唤醒配置为自供电

uint32_t ui32Power;

ui32ULPI = USBLIB_FEATURE_POWER_SELF | USBLIB_FEATURE_REMOTE_WAKE;

//

// Configure as self powered with remote wake capabilities.

//

USBDCDFeatureSet(0, USBLIB_FEATURE_POWER, &ui32Power)

 

唯一的USB设备模式运行时电源函数是USBDCDRemoteWakeupRequest()和USBDCDRemoteWakeLPM()函数,它们都用于触发对USB主机控制器的远程唤醒请求。USBDCDRemoteWakeupRequest()用于设备接收到正常的USB挂起请求并且应用程序需要唤醒USB主机时。当设备由于LPM suspend事件进入挂起状态并需要唤醒USB主机时,使用USBDCDRemoteWakeLPM()。

 

设备类驱动程序为希望提供特定USB功能的应用程序提供高级USB功能,而无需处理大多数USB事务处理和连接管理(否则将需要)。这些驱动程序为几个常用的USB设备类提供了高级api,具有以下特性。非常容易使用。设备设置包括创建一组静态数据结构和调用单个初始化API。

 

USB设备类驱动程序

API设备类驱动程序为希望提供特定USB功能的应用程序提供高级USB功能,而无需处理大多数USB事务处理和连接管理,否则将是必需的。这些驱动程序为几个常用的USB设备类提供高级api,具有以下特性。

非常容易使用。设备设置包括创建一组静态数据结构和调用单个初始化

API。可配置的VID/PID,电源参数和字符串表,允许轻松定制设备,无需修改任何库代码。一致的接口。所有设备类驱动程序都使用类似的api,因此在它们之间移动非常简单。最小的应用程序开销。绝大多数USB处理是在类驱动程序和较低层中执行的,应用程序只处理读写数据。可与可选的USB缓冲区对象一起使用,以进一步简化数据传输和接收。使用USB缓冲区,与设备类驱动程序的交互可以变得像读/写API一样简单,无需状态机来确保在正确的时间发送或接收数据。设备类驱动程序API完全封装了底层USB设备和USB驱动程序API,因此应用程序只使用单个API接口。

在平衡这些优势的同时,应用程序开发人员应该注意在使用设备类驱动程序api时应用的以下限制。

在使用设备类驱动程序API时,不能调用任何其他USB层

提供的设备类驱动程序不支持备用配置。

当前提供的设备类驱动程序允许创建通用批量设备、通信设备类(虚拟串行端口)设备和人机界面设备类设备(鼠标、键盘、操纵杆等)。还包括用于复合设备的特殊类驱动程序。它充当一个包装器,允许在单个设备中使用多个设备类驱动程序。关于这些类的详细信息可以在本文档后面找到。

USB设备类API在某些情况下,标准设备类可以提供使用同一类创建大量不同和变化的设备的可能性,在这些情况下,可以提供额外的API层以进一步专门化设备操作并简化与应用程序的接口。Human Interface Device(HID)类就是这样一个类。它被用于支持多种设备,包括键盘、操纵杆、鼠标和游戏控制器,但接口的指定方式可以用于提供数据收集功能的大量特定于供应商的设备。因此,HID设备类驱动程序非常通用,可以支持尽可能广泛的设备。为了简化接口的使用,提供了特定的api来支持与BIOS兼容的键盘和鼠标操作。使用鼠标类API而不是基本HID类驱动程序API,应用程序可以使用一个极其简单的接口(由初始化调用和通知主机鼠标移动或按键的调用组成)使自己作为鼠标对USB主机可见。类似地,使用键盘设备类API,应用程序可以使用单个API向主机发送键接通和断开信息,而不必知道底层HID结构和USB协议。示例应用程序usb开发鼠标和usb开发键盘分别使用HID鼠标和键盘设备类API

音频设备类驱动程序USB音频设备类提供一个回放接口,允许应用程序作为通用USB音频设备,连接到本机支持USB音频设备的任何主机操作系统。大多数操作系统为通用音频类设备提供本机支持,这意味着不需要特定于操作系统的驱动程序。USB音频设备类以48kHz采样率提供单个16位立体声播放接口,还提供音量和静音控制。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值