自己用libusb试了一下,发现真的可以,固件程序读取批量端点2的数据,将数据写入批量端点6
上位机代码如下
- #include "../src/lusb0_usb.h"
- #include <stdio.h>
- // Enables this example to work with a device running the
- // libusb-win32 PIC Benchmark Firmware.
- //#define BENCHMARK_DEVICE
- //////////////////////////////////////////////////////////////////////////////
- // TEST SETUP (User configurable)
- // Issues a Set configuration request
- #define TEST_SET_CONFIGURATION
- // Issues a claim interface request
- #define TEST_CLAIM_INTERFACE
- #define TEST_BULK_WRITE
- // Attempts one bulk read.
- #define TEST_BULK_READ
- // Attempts one bulk write.
- // #define TEST_BULK_WRITE
- //////////////////////////////////////////////////////////////////////////////
- // DEVICE SETUP (User configurable)
- // Device vendor and product id.
- #define MY_VID 0x04B4
- #define MY_PID 0x1104
- // Device configuration and interface id.
- #define MY_CONFIG 1
- #define MY_INTF 0
- // Device endpoint(s)
- #define EP_IN 0x86
- #define EP_OUT 0x02
- // Device of bytes to transfer.
- #define BUF_SIZE 2048
- usb_dev_handle *open_dev(void)
- {
- struct usb_bus *bus;
- struct usb_device *dev;
- for (bus = usb_get_busses(); bus; bus = bus->next)
- {
- for (dev = bus->devices; dev; dev = dev->next)
- {
- if (dev->descriptor.idVendor == MY_VID
- && dev->descriptor.idProduct == MY_PID)
- {
- return usb_open(dev);
- }
- }
- }
- return NULL;
- }
- int main(void)
- {
- usb_dev_handle *dev = NULL; /* the device handle */
- unsigned char tmpwrite[BUF_SIZE] = "hello world\n";
- unsigned char tmpread[BUF_SIZE] = {0};
- for (int i = 0; i < BUF_SIZE;i++)
- {
- tmpread[i] = 0;
- }
- int ret;
- void* async_read_context = NULL;
- void* async_write_context = NULL;
- usb_init(); /* initialize the library */
- usb_find_busses(); /* find all busses */
- usb_find_devices(); /* find all connected devices */
- if (!(dev = open_dev()))
- {
- printf("error opening device: \n%s\n", usb_strerror());
- return 0;
- }
- else
- {
- printf("success: device %04X:%04X opened\n", MY_VID, MY_PID);
- }
- #ifdef TEST_SET_CONFIGURATION
- if (usb_set_configuration(dev, MY_CONFIG) < 0)
- {
- printf("error setting config #%d: %s\n", MY_CONFIG, usb_strerror());
- usb_close(dev);
- return 0;
- }
- else
- {
- printf("success: set configuration #%d\n", MY_CONFIG);
- }
- #endif
- #ifdef TEST_CLAIM_INTERFACE
- if (usb_claim_interface(dev, 0) < 0)
- {
- printf("error claiming interface #%d:\n%s\n", MY_INTF, usb_strerror());
- usb_close(dev);
- return 0;
- }
- else
- {
- printf("success: claim_interface #%d\n", MY_INTF);
- }
- #endif
- #ifdef TEST_BULK_WRITE
- #ifdef TEST_ASYNC
- // Running an async write test
- ret = transfer_bulk_async(dev, EP_OUT, tmp, sizeof(tmp), 5000);
- #else
- // Running a sync write test
- ret = usb_bulk_write(dev, EP_OUT, (char *)tmpwrite, 2045, 5000);
- #endif
- if (ret < 0)
- {
- printf("error writing:\n%s\n", usb_strerror());
- }
- else
- {
- printf("success: bulk write %d bytes\n", ret);
- }
- #endif
- #ifdef TEST_BULK_READ
- // Running a sync read test
- ret = usb_bulk_read(dev, EP_IN, (char *)tmpread, sizeof(tmpwrite), 4);
- if (ret < 0)
- {
- printf("error reading:\n%s\n", usb_strerror());
- }
- else
- {
- printf("success: bulk read %d bytes\n", ret);
- }
- #endif
- #ifdef TEST_CLAIM_INTERFACE
- usb_release_interface(dev, 0);
- #endif
- if (dev)
- {
- usb_close(dev);
- }
- printf("Done.\n");
- printf((char *)tmpread);
- system("pause");
- return 0;
- }
然后可以顺利从端点六读取数据
|