嵌入式Linux如何用C读写usb
时间: 2024-05-16 12:12:04 浏览: 27
在嵌入式Linux中,可以使用libusb库来进行USB的读写操作。下面是一个简单的示例程序:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>
#include <libusb-1.0/libusb.h>
#define VENDOR_ID 0x1234
#define PRODUCT_ID 0x5678
int main(int argc, char **argv)
{
libusb_device_handle *dev_handle;
int r;
// 初始化libusb
r = libusb_init(NULL);
if (r < 0) {
fprintf(stderr, "libusb initialization failed: %s\n", libusb_error_name(r));
return 1;
}
// 打开指定VID/PID的设备
dev_handle = libusb_open_device_with_vid_pid(NULL, VENDOR_ID, PRODUCT_ID);
if (dev_handle == NULL) {
fprintf(stderr, "Failed to open USB device.\n");
goto out;
}
// 进行读写操作
unsigned char buf[64];
int transferred;
// 读取数据
r = libusb_bulk_transfer(dev_handle, 0x81, buf, sizeof(buf), &transferred, 1000);
if (r == 0) {
printf("Read %d bytes from USB device.\n", transferred);
// 处理读取到的数据
} else {
fprintf(stderr, "Failed to read from USB device: %s\n", libusb_error_name(r));
}
// 写入数据
memset(buf, 0, sizeof(buf)); // 准备写入的数据
r = libusb_bulk_transfer(dev_handle, 0x01, buf, sizeof(buf), &transferred, 1000);
if (r == 0) {
printf("Wrote %d bytes to USB device.\n", transferred);
} else {
fprintf(stderr, "Failed to write to USB device: %s\n", libusb_error_name(r));
}
// 关闭设备
libusb_close(dev_handle);
out:
// 释放libusb资源
libusb_exit(NULL);
return 0;
}
```
在上面的示例程序中,首先使用libusb_init()函数初始化libusb库,然后使用libusb_open_device_with_vid_pid()函数打开指定VID/PID的设备。接着使用libusb_bulk_transfer()函数进行USB的读写操作,最后使用libusb_close()函数关闭设备并使用libusb_exit()函数释放libusb资源。需要注意的是,读写操作的数据传输端点地址需要根据实际情况进行修改。