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,必要安装相关的开发包,并在项目中链接相应的库文件。
[*]下载libusb:
下载地址:Release v1.0.26: libusb 1.0.26 · l
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]