关于libusb在arm-linux的使用总结

关于libusb库的安装

关于libusb库的安装教程网上一大堆,就不具体介绍了。
libusb官网: link
查看libusb API的网址: link

关于libusb库的使用

在安装了libusb库后,在它的目录下会有几个demo可以用来参考。
开始时和结束时使用来初始化了关闭libusb库

int libusb_init(libusb_context **context)
int libusb_exit(libusb_context **context)

demo里面使用了

libusb_device_handle* libusb_open_device_with_vid_pid(libusb_context * ctx,uint16_t vendor_id,uint16_t product_id )

来打开USB设备,但是在我这个项目中,USB设备的PID、VID可能是一样的,所以无法用来区分USB设备。
后来在提供的API中找到了

int libusb_open (libusb_device * dev, libusb_device_handle ** dev_handle )

这个函数可以根据设备描述符来打开USB设备进行操作。

接着又找到了获取设备描述符的函数

int libusb_get_device_descriptor (libusb_device *dev, struct libusb_device_descriptor *desc)

在打开设备后,紧接着就是获取设备输入输出端点地址,从而才能控制数据传输。获取描述符的函数为

int libusb_get_config_descriptor (libusb_device *dev, uint8_t config_index, struct libusb_config_descriptor **config)

这个函数获取描述符比较迟内存,所以在获取到我们需要的信息并转存后,我们要释放掉config结构体。释放函数为

void libusb_free_config_descriptor (struct libusb_config_descriptor *config)

释放完成后,我们要继续使能libusb内核驱动自动卸载,然后在需要的设备句柄上声明接口,必须声明接口才可以操作I/O,它们通过下面两个函数实现

int libusb_set_auto_detach_kernel_driver(libusb_device_handle * dev_handle,int enable)
int libusb_claim_interface(libusb_device_handle * dev_handle,int interface_number)

在完成上述操作后,我们就可以使用libusb库正式来操作我们的USB设备了。

下面是几个常用的传输数据的函数

int libusb_control_transfer(libusb_device_handle * dev_handle,uint8_t bmRequestType,uint8_t bRequest,uint16_t wValue,uint16_t 	wIndex,unsigned char *data,uint16_t 	wLength,unsigned int 	timeout )
int libusb_bulk_transfer(struct libusb_device_handle * dev_handle,unsigned char endpoint,unsigned char * data,int length,int * transferred,unsigned int timeout )
int libusb_interrupt_transfer(struct libusb_device_handle * dev_handle,unsigned char endpoint,unsigned char * data,int length,int * transferred,unsigned int timeout )	

它们分别是控制传输、批量传输、终端传输,后两个的传输方向由endpoint也就是端点地址来决定。

在所有操作完成以后,要使用

int libusb_release_interface(libusb_device_handle * dev_handle,int interface_number)
int libusb_close(libusb_device_handle * dev_handl)

来关闭声明的接口和设备句柄

使用过程中遇到的一些问题

项目的USB设备需要先传入一个bin文件后才能开始通信,所以我使用U盘拷贝了一份bin文件到了arm板子上,去读文件时发现总是打开失败,后来发现是bin文件拷贝到U盘后失去了权限,但是使用chmod无法赋与它权限,后来百度找到了解决办法
使用 mount -t vfat /dev/sdb1 /mnt/usb 重新挂载U盘就可以解决。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值