嵌入式Linux如何用C读写usb
时间: 2024-05-11 13:14:20 浏览: 163
在嵌入式Linux中,可以使用libusb库来读写USB设备。以下是一个简单的示例程序,演示如何使用libusb库来读取USB设备的数据:
```c
#include <stdio.h>
#include <stdlib.h>
#include <libusb-1.0/libusb.h>
#define VENDOR_ID 0x1234
#define PRODUCT_ID 0x5678
int main(int argc, char *argv[])
{
libusb_device_handle *devh;
int r;
r = libusb_init(NULL);
if (r < 0) {
fprintf(stderr, "libusb_init error\n");
exit(1);
}
devh = libusb_open_device_with_vid_pid(NULL, VENDOR_ID, PRODUCT_ID);
if (!devh) {
fprintf(stderr, "libusb_open_device_with_vid_pid error\n");
exit(1);
}
// 读取数据
unsigned char data[64];
int len = sizeof(data);
r = libusb_bulk_transfer(devh, 0x81, data, len, &len, 0);
if (r < 0) {
fprintf(stderr, "libusb_bulk_transfer error\n");
exit(1);
}
// 打印读取的数据
for (int i = 0; i < len; i++) {
printf("%02x ", data[i]);
}
printf("\n");
// 写入数据
unsigned char out_data[] = {0x01, 0x02, 0x03};
len = sizeof(out_data);
r = libusb_bulk_transfer(devh, 0x01, out_data, len, &len, 0);
if (r < 0) {
fprintf(stderr, "libusb_bulk_transfer error\n");
exit(1);
}
libusb_close(devh);
libusb_exit(NULL);
return 0;
}
```
在上面的示例程序中,首先通过`libusb_init()`函数初始化libusb库,然后使用`libusb_open_device_with_vid_pid()`函数打开指定的USB设备。接着,使用`libusb_bulk_transfer()`函数读取和写入USB设备的数据。读取数据时,传入的端点地址为`0x81`,表示从设备的端点1(IN)读取数据;写入数据时,传入的端点地址为`0x01`,表示向设备的端点1(OUT)写入数据。
需要注意的是,使用libusb库需要在编译时链接相应的库文件,可以在Makefile中添加以下语句:
```
LIBS += -lusb-1.0
```
阅读全文