德州仪器USB库用于创建USB设备、主机或OTG应用程序的一组数据类型和函数。它提供了多个编程接口,从仅提取底层USB控制器硬件的最薄层到为特定器件提供简单API支持的高级接口。USB库的内容和相关的头文件分为四个主要组:
①通用函数:可用于设备、主机和双模式应用程序中。包含解析USB描述符和USB库的配置特点。
②设备模式的特定函数:提供所有USB器件应用程序需要的类独立功能,例如主机连接信令和对标准描述符请求的响应。
③主机模式的特定函数:提供所有USB主机应用程序需要的类独立功能,例如器件检测和枚举以及端点管理。
④模式检测与控制函数:用于USB的操作模式检测,如检测USB设备间的接入,以及监测VBUS和ID引脚信号等。
此外,库中还提供驱动程序与“.inf”文件,这将有助于开发人员为新设备定制驱动程序和“.inf”文件。
1.USBlib目录结构概述
TivaWare 2.0版软件的USBlib目录结构如图14-11所示。
2.通用API
下面介绍USB库中通用API的数据类型和函数,不包括特定于USB主机、设备或OTG操作。通用API的函数和类型描述可分为三大类:
图14-11 USB库的目录结构
1)USB标准类型定义(USB2.0规范第9章)和函数解析。
2)主机/设备模式切换为OTG或双模式应用。
3)USB设备类头文件。
通用API的源代码(如图14-11所示)如下:
1)usblib.h:包含USB库中所有数据类型和定义(将库作为一个整体)的主头文件。并且包含通用API函数的原型以及USB库的所有客户端应用程序都应包含该头文件。
2)usb-ids.h:包含评估套件中每个USB例子的德州仪器的厂商号(VID)和产品号(PID)的头文件。
3)usbmsc.h:包含USB大容量存储类定义的头文件。
4)usbcdc.h:包含USB通信设备类定义的头文件。
5)usbhid.h:包含USB人机接口设备类定义的头文件。
6)usblibpriv.h:用于在USB文库的各种组件中共享变量和定义的私有头文件,客户端应用程序不应包括这个头文件。
7)usbdesc.c:解析USB描述符函数的源代码。
8)usbbuffer.c:用于支持一些应用中USB端点数据流缓冲区的一组函数源代码。
9)usbringbuf.c:实现简单环缓冲区的一组函数源代码。
10)usbmode.c:用于在主机和设备操作之间切换的一组函数源代码。
11)usbtick.c:内部USB库滴答时钟处理函数的源代码。此文件不包含由应用程序访问的任何功能。
3.主机API
下面介绍在主机模式下由USB库提供的对USB控制器的支持。为了简化应用程序与添加新的设备和设备类,USB库为USB主机控制器提供了一个分层接口。在USB库的顶层提供了由USB库支持的方便访问各类外设的应用程序接口。下面这个层是处理每种类型设备细节的USB主机控制器的设备接口,以及如何与USB主机类驱动程序进行通信。USB主机类驱动程序是处理整个设备类的基础,如HID和大容量存储类设备。USB主机类驱动程序层与最底层的USB主控制器驱动程序库通信。通过直接访问最底层DriverLib中的函数来提供与已连接的USB设备进行通信。
主机接口的分层如下:
1)Device APIs(鼠标、键盘、文件系统)。
2)USB Class Driver APIs(HID、大容量存储、HUB)。
3)USB Host Controller APIs。
4)DriverLib USB Driver APIs。
(1)主机API的源代码(如图14-12所示)
1)usbhost.h //在USB库中包含主机模式的函数原型和数据类型定义的头文件
2)usbhaudio.h //包含主机支持的特定音频类定义的头文件
3)usbhhid.h //包含与USB主机HID类驱动程序交互所需定义的头文件
4)usbhhub.h //包含与USB主机Hub类驱动程序交互所需定义的头文件
5)usbhhidkeyboard.h //包含与USB主机HID类键盘设备交互所需定义的头文件
6)usbhhidmouse.h //包含与USB主机HID类鼠标设备交互所需定义的头文件
7)usbhmsc.h //包含主机支持的特定大容量存储类定义的头文件
8)usbhostenum.c //由库提供的USB主机枚举函数的源代码
9)usbhaudio.c //USB主机音频类驱动程序的源代码
10)usbhhid.c //USB主机HID类驱动程序的源代码
11)usbhhub.c //USB主机集线器(HUB)类驱动程序的源代码(www.xing528.com)
12)usbhhidkeyboard.c //USB主机HID类键盘设备的源代码
13)usbhhidmouse.c //USB主机HID类的鼠标设备的源代码
14)usbhmsc.c //USB主机大容量存储类驱动程序的源代码
15)usbhscsi.c //调用主机大容量存储类驱动程序的高级SCSI接口的源代码
(2)主机专用类及定义(如图14-13所示)
图14-12 主机API的源代码
图14-13 主机专用类及定义
由于USBlib固件库的手册多达300页,这里就不一一介绍了,需要这部分知识的读者可以参考USBlib库手册图示的内容。而具体用法可参考DK-TM4C123G开发板提供的例程:
1)usb_host_audio。
2)usb_host_keyboard。
3)usb_host_mouse。
4)usb_host_msc。
4.设备API函数
下面介绍USB库中提供支持USB设备应用程序的各种API层。一些编程接口提供了从仅抽象底层USB控制器硬件的最薄层到提供简单API支持的特定设备接口的高层。
USB库包含了与开发USB设备应用程序相关的四个API层。从上往下向堆栈移动,虽然每个API层给编程USB应用程序提供了更大的灵活性,但使用较低层需要耗费更多的时间来实现同样的功能。与USB库的主机编程接口类似,设备接口的分层如下:
1)Device Class APIs。
2)Device Class Driver APIs。
3)The USB Device API。
4)The USB Driver LibAPI。
(1)设备API的源代码(如图14-14所示)
图14-14 设备API的源代码
1)usbdbulk.h //定义USB通用批量设备类驱动程序API的头文件
2)usbdcdc.h //定义了USB通信设备类(CDC)设备类驱动程序API的头文件
3)usbdhid.h //定义USB人机接口设备(HID)设备类驱动程序API的头文件
4)usbdhidkeyb.h //定义USBHID键盘设备类API的头文件
5)usbdhidmouse.h //定义USBHID鼠标设备类API的头文件
6)usbdevicepriv.h //用于在USB文库的各种组件中共享变量和定义的私有头文件//客户端应用程序不应包括这个头文件
7)usbdenum.c //由库提供的USB设备枚举函数的源代码
8)usbdhandler.c //USB设备中断处理程序的源代码
9)usbdconfig.c //USB设备配置函数的源代码
10)usbdcdesc.c //解析配置描述符定义函数的源代码(与USB设备API一起使用)
11)usbdbulk.c //USB通用批量设备类驱动程序的源代码
12)usbdcdc.c //USB通信设备类(CDC)设备类驱动程序的源代码
13)usbdhid.c //USB人机接口设备(HID)设备类驱动程序的源代码
14)usbdhidkeyb.c //USBHID键盘设备类的源代码
15)usbdhidmouse.c //USBHID鼠标设备类的源代码
(2)设备专用类及定义(如图14-15所示)
图14-15 设备专用类及定义
图14-15的内容较多,这里就不一一介绍了,需要用到这部分知识的读者可以参考USBlib库手册的图示部分。而具体USB设备API的用法可参考TI提供的例程,比如EK-TM4C123GXL(LaunchPad)开发板提供了usb_dev_bulk和usb_dev_serial两个有关USB设备的例程,DK-TM4C123G开发板除这两个例程外还提供了usb_dev_keyboard和usb_dev_msc两个USB设备例程。下面将以usb_dev_bulk例程来介绍设备专用库、描述符、底层驱动等的用法。
注意:在开发基于USB的应用时,原则上尽量采用TIUSBlib库提供的专用类API来实现,对目前还无法实现的功能,可以使用较低层的现有固件库函数来定制。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。