• 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

  • 相关阅读:
    计算机网络第4章(网际层)----总结1
    LLM - 大语言模型 基于人类反馈的强化学习(RLHF)
    第十一届蓝桥杯国赛C++B组题解(A - J)
    ​GOPS演讲 | 如何构建现代运营与支持体系,实现团队的高效协同
    十六、Vert.x、Actix-web、Warp、Axum 性能对比
    13个小众有趣的网站,只有程序员才看得懂
    git服务器宕机后,怎么用本地仓库重新建立gitlab服务器(包括所有历史版本)
    GitHub 基本操作
    flutter性能优化-UI重绘
    linux 拾遗之一
  • 原文地址:https://blog.csdn.net/fhb1922702569/article/details/136686558