libusb开源库使用说明

1 简介

libusb是一个跨平台的用户空间USB库,允许用户编写基于USB的应用程序,而无需了解底层的USB协议。它提供了一个可移植的、抽象的接口来访问USB设备,支持多个操作系统,包括Linux、macOS、Windows和其他类Unix系统。通过使用libusb,开发人员可以以设备为中心,而不是以系统为中心来开发USB应用程序,从而获得更好的可移植性和开发效率。libusb还包括用于设备描述符解析、传输、同步、异步传输、控制传输等功能的API。

2 优缺点

2.1 优点

跨平台性强:libusb可以在多种操作系统上使用,极大方便了开发者的使用和移植工作。

简单易用:libusb提供了一套简单的API,易于使用,减少了底层操作的复杂度。

稳定性高:libusb经过多年的发展和测试,已经变得非常成熟和稳定。

2.2 缺点

功能有限:libusb只能处理一些基本的USB操作,一些高级功能可能需要自己编写驱动。

需要安装libusb库:在使用libusb进行开发时,需要先安装libusb库,这可能会增加一定的开发难度和成本。

2.3 相关介绍

2.3.1 usb传输模式

USB的传输模式有4种,分别是控制传输(Control Transfer)、中断传输(Interrupt Transfer)、批量传输或叫块传输(Bulk Transfer)、实时传输或叫同步传输(Isochronous Transfer)。

2.3.1.1 控制传输

控制传输是USB通信中最常用的传输类型之一,用于在主机和设备之间进行控制和配置的通信。它使用USB的默认管道(Endpoint 0)进行传输,并通过控制请求(Control Request)来发送控制命令和接收设备的状态和响应。

usb控制传输的应用场景:

  • 在USB系统中,设备在正常工作之前必须先进行配置,USB主机必须为设备分配总线上唯一的设备地址,并完成读取设备的各种描述符,根据描述符的需求为设备的端点配置管道,分配带宽等工作。如:在设备插入通知的情况下,从机可以使用控制传输向主机发送一个特定的设备描述符,以通知主机有新的设备插入。主机接收到该控制传输后,可以执行设备的枚举和初始化操作。
  • 在设备的工作过程中,主机希望能及时地获取设备的当状态,或者设备出现问题时希望主机能及时做出补救措施,或者主机根据某些需求改变设备的当前配置等工作

usb控制传输特点:

  • 用于控制传输的设备的端点是双向的,即可以接收数据包又可以发送数据包,相应的控制传输的管道也是双向的。
  • 所有的设备必须有至少一个控制端点,且端点号为0
  • 是可靠的数据传输,支持错误检测和数据重传,并尽可能满足主机和设备的同步。USB协议为设备定义了标准的、设备类的或由设备生产商厂提供的命令(或叫请求),这些命令可操作设备的状态。同时协议又定义了一套描述符,用于存放USB设备的各种信息,用于对设备进行配置,这些都是通过控制传输完成
  • 系统没有为控制传输指定访问总线的频率和带宽,一般由USB协议软件(即主机操作系统的USB控制程序)从全局优化角度来决定。
2.3.2 中断传输

中断传输(Interrupt Transfer)是USB通信中的一种传输类型,用于在USB设备和主机之间传输实时数据和通知。中断传输适用于需要周期性地传输数据或发送通知,并对传输的实时性有较高要求的应用场景。

usb中断传输的应用场景:

  • 音频设备:USB麦克风和耳机、USB音频接口
  • 输入设备:USB键盘和鼠标
  • 触摸屏设备:USB触摸屏
  • 系统监控设备:温度传感器、湿度传感器

usb中断传输特点:

  • 周期性传输:中断传输以固定的时间间隔进行数据传输或通知发送,具有周期性特点。
  • 实时性要求:中断传输适用于对实时性要求较高的应用,例如音频流、输入设备等。传输的数据或通知需要及时地被主机或设备处理。
  • 低带宽占用:中断传输的带宽要求相对较低,适用于传输小量的数据或通知。
2.3.3 批量传输

批量传输(Bulk Transfer)是USB通信中的一种传输类型,用于在USB设备和主机之间传输大量的数据。与中断传输和控制传输相比,批量传输具有更高的传输速度和较低的实时性要求。

usb批量传输的应用场景:

  • 文件传输
  • 大容量数据存储

usb批量传输特点:

  • 可靠的数据传输和重发:USB的批量传输本身是一种可靠的数据传输方式,它会进行错误检测和纠正。如果发生错误,USB协议会自动进行重传,确保数据的完整性。
  • 大容量传输:批量传输适用于传输大量的数据。
2.3.4 实时传输

实时传输是一种特殊的数据传输方式,它对数据传输的实时性和可靠性有更高的要求。

usb实时传输的应用场景:

  • 音频和视频传输

usb批量传输特点:

  • 严格的时间约束:实时传输需要在预定的时间范围内完成数据传输。它要求数据在固定的时间间隔内被发送或接收,并且传输的延迟要尽量小。
  • 高带宽要求:实时传输通常需要高带宽以支持实时数据的传输,特别是在需要传输大量数据的情况下。
  • 不可靠的数据传输:充许有一定的误码率。
  • 对于实时传输来说,实时性比正确性和数据重传更重要。考虑到总线的错误率较低,协议就认为传送一般都可以成功,即使有少量的数据出错,也不会对应用软件产生太大的影响(如音频软件)。实时传输的接收端可以判断自己是否在一个帧内错过了一些数据,而且能知道丢了多少数据。
  • 在实时传输的过程中,因为没有握手信号来指示中止,所以实时传输的端点从不中途停止。即使能够查到错误,实时管道也不会因此停下,USB主机也仍继续处理下一帧的数据。因为实时传输的协议不支持每次事务处理都进行握手,所以错误检测的功能相对弱了许多

2.4 libusb同步、异步传输

同步传输(Synchronous Transfer):

  • 在libusb中,同步传输是指在进行数据传输时,应用程序会阻塞等待传输完成,并在传输完成后继续执行后续操作。
  • 同步传输使用的函数是libusb_bulk_transfer()、libusb_interrupt_transfer()和libusb_control_transfer()等。
  • 当应用程序调用这些同步传输函数时,函数会在传输完成之前一直阻塞,直到数据传输完成或发生错误。
  • 同步传输适用于简单的数据传输场景,其中应用程序可以等待数据传输完成后再继续处理数据。

异步传输(Asynchronous Transfer):

  • 在libusb中,异步传输是指在进行数据传输时,应用程序可以继续执行其他操作,而不需要等待传输完成。
  • 异步传输使用的函数是libusb_bulk_transfer()、libusb_interrupt_transfer()和libusb_control_transfer()等,并通过传入异步回调函数来处理传输完成后的结果。
  • 当应用程序调用这些异步传输函数时,函数会立即返回,允许应用程序继续执行其他操作。
  • 传输完成后,libusb将调用事先注册的异步回调函数来通知应用程序传输结果。

总结:
libusb提供了同步传输和异步传输两种方式,用于满足不同应用场景的需求。同步传输在数据传输期间会阻塞等待传输完成,而异步传输允许应用程序在传输进行期间执行其他操作。

3 安装

在Linux下使用libusb,需要安装相关的开发包,并在项目中链接相应的库文件。

  1. 下载libusb:

下载地址:Release v1.0.26: libusb 1.0.26 · l

你可能感兴趣的:(linux,c++)