使用libusb库笔记

4 篇文章 0 订阅

libusb简介

libusb是一套可以比较简单的访问usb设备的api. libusb在不同的语言和不同的系统平台上都有实现,关于libusb的其他优点,可以访问libusb官网(http://libusb.org). 几经折腾,终于可以在ubuntu上用libusb读写数据了. 记录一下容易忽略的地方.

常见返回错误码解决

1. configuration选择,interface认领和endpoint地址

需要先行了解usb设备的配置,接口和端点概念.启用的配置,认领的接口和端点地址存在包含关系.认领某接口需要确定当前选择的配置包含该接口,读写数据时,需要确定当前接口包含这些端点,同时端点类型和地址无误.

2. libusb_ -7 (Operation time out)

同步io操作比较简单,但可能会出现超时. 将超时设置为0,永不超时,可以解决返回超时错误.

3. libusb_claim_interface 函数总是返回 -6 (Resource busy).

解决这个问题,花费的时间最多.即使按照libusb的example 和stackoverflow上提到的,先调用libusb_detach_kernel_driver函数,也不能解决.
后来查看libusb.h文件,发现有libusb_reset_device函数,尝试在认领接口前,先调用该函数,发现认领接口不再返回错误码.
经测试,只要调用了libusb_reset_device函数,不需要再调用libusb_detach_kernel_driver方法.
该方法可以临时解决问题,不确定会不会产生其他问题.

总结

  1. device or resource busy 或者 entity not found 可能需要参考解决方法1
  2. 上一条确认没问题,即使调用libusb_detach_device_driver 也没解决,可以试试解决方法3
  3. 同步操作,timeout问题试试解决方法2
  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: libusb是一款开源的USB设备访问,用于在用户空间下与USB设备进行通信,它支持设备的(初始化、发送控制传输命令、批量传输、中断传输、异步传输),不仅支持在Linux平台上使用,还支持在Windows、MAC OS X等平台上使用。对于具有以下情况的开发者只能使用libusb进行开发:需要快速开发应用程序;需要具有跨平台的移植性;需要在用户空间与USB设备进行通信;需要使用USB的批量传输、中断传输、异步传输等传输方式;需要控制USB设备的状态信息。 使用libusb需要先安装libusb-1.0的开发包,在使用函数前需要先调用libusb_init()函数对进行初始化,获取设备列表可通过调用libusb_get_device_list()函数,获取设备描述符可通过libusb_get_device_descriptor()函数。对于USB通信可通过libusb_control_transfer()函数进行设备控制传输。同时还有异步传输和同步传输两种方法,可通过回调函数获取传输状态。 libusb的优点是它是跨平台的,能够支持不同操作系统和编译平台。使用libusb的开发者可以轻松地在不同的操作系统中进行开发和调试。同时,由于使用libusb,将不再需要内核模块支持,它可以帮助开发者轻松地实现USB设备的协议规范和必要的数据处理,从而更加高效地进行开发。不过需要注意的是,由于libusb在进行USB通信时需要进行复杂的数据传输协议和校验,因此其编程难度较大,需要开发者拥有较好的编程基础。 ### 回答2: libusb是一个跨平台的开源用户空间USB,可用于在Linux、Windows、macOS等不同操作系统中进行USB通信。它提供了丰富的API,可以用于设备的发现、配置、数据传输和控制等方面。 使用libusb进行USB通信需要首先初始化,并对设备进行枚举,从而获得正确的设备句柄。之后可以通过读/写数据端点来进行数据传输,还可以进行控制传输,调整设备配置,发送控制命令等操作。在传输数据时,可以设置超时时间以避免阻塞。 与其他USB相比,libusb具有跨平台,轻量级,可移植性高等优点。它可以使用自由软件协议开源自由使用,而且易于添加到项目中。在开发USB设备应用程序时,使用libusb可以大大提高开发效率,并降低开发难度。 总之,libusb是一个功能强大的USB通信,适用于各种应用领域,它为软件开发人员提供了接口,使得USB设备与计算机之间的通信变得更加简单和高效,而且易于移植和开发。 ### 回答3: libusb是一个可移植且独立于操作系统的应用程序接口,主要用于在用户空间进行USB通信。该支持操作系统如Windows、Linux、Mac OS、FreeBSD等,同时也支持USB设备的各种功能,例如控制传输、批量传输、中断传输和同步传输等。 通过使用这个,应用程序就能够直接访问USB设备,无需编写复杂的驱动程序,从而简化了开发流程,并提高了应用程序的可移植性和可维护性。 使用libusb时,我们可以使用其API来设置USB设备的传输方式、检测USB设备的插拔状态、请求和接收数据等操作。 另外,该还提供了对USB控制请求和端点映射的支持,并允许应用程序与多个USB设备进行通信。 需要注意的是,在使用libusb时,需要设置USB设备的访问权限,以避免权限访问限制导致的访问失败等问题。同时,在进行数据传输时也需要遵循USB传输协议,如控制传输时需要按照设备描述符、配置描述符等协议进行相关的控制。 总之,使用libusb做USB通信可以方便地实现对USB设备的控制和数据传输,并且能够跨平台使用,具有良好的可移植性和可维护性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值