首页 理论教育 ARMCortexM4固件应用:USBlib库函数简介

ARMCortexM4固件应用:USBlib库函数简介

时间:2023-11-17 理论教育 版权反馈
【摘要】:德州仪器USB库用于创建USB设备、主机或OTG应用程序的一组数据类型和函数。3)USB设备类头文件。11)usbtick.c:内部USB库滴答时钟处理函数的源代码。

ARMCortexM4固件应用:USBlib库函数简介

德州仪器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的函数和类型描述可分为三大类:

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

图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所示)

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

图14-12 主机API的源代码

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

图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所示)

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

图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所示)

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

图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来实现,对目前还无法实现的功能,可以使用较低层的现有固件库函数来定制。

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

我要反馈