连接由V-USB库驱动的libUSB设备用于AVR

我写了一个简单的程序(基于以下教程),通过USB端口将数据从AVR芯片(Attiny 2313)发送到计算机,因为这个设备没有内置USB端口,我已经使用V-USB库通过软件模拟这样的端口。

设备按预期工作,我使用libusb库将它与C接口没有问题,但是我想用Java访问它,所以我查找了libusb的java实现。我管理的唯一库设置,它已成功找到总线上的USB是“libusb-win32包装” 。

唯一的问题是当我尝试打开它时设备会抛出exception

ch.ntb.usb.USBException: No USB endpoints found. Check the device configuration at ch.ntb.usb.Device.updateMaxPacketSize(Device.java:82) at ch.ntb.usb.Device.initDevice(Device.java:114) 

怎么修好? 还有另外一种方法吗? 任何建议?

这是抛出exception的代码

 Device dev = USB.getDevice((short) 0x16c0, (short) 0x05dc); dev.open(1, 0, -1); 

这里是关于设备viw USBview的数据

 Device Descriptor: bcdUSB: 0x0110 bDeviceClass: 0xFF bDeviceSubClass: 0x00 bDeviceProtocol: 0x00 bMaxPacketSize0: 0x08 (8) idVendor: 0x16C0 idProduct: 0x05DC bcdDevice: 0x0100 iManufacturer: 0x01 0x0409: "mymail@gmail.com" iProduct: 0x02 iSerialNumber: 0x00 bNumConfigurations: 0x01 ConnectionStatus: DeviceConnected Current Config Value: 0x01 Device Bus Speed: Low Device Address: 0x03 Open Pipes: 0 Configuration Descriptor: wTotalLength: 0x0012 bNumInterfaces: 0x01 bConfigurationValue: 0x01 iConfiguration: 0x00 bmAttributes: 0x80 (Bus Powered ) MaxPower: 0x32 (100 Ma) Interface Descriptor: bInterfaceNumber: 0x00 bAlternateSetting: 0x00 bNumEndpoints: 0x00 bInterfaceClass: 0x00 bInterfaceSubClass: 0x00 bInterfaceProtocol: 0x00 iInterface: 0x00 

相关的问题答案,但我无法理解要改变什么,如果它与设备有关,如何用VUSB完成?

以下库不支持没有端点的设备,并且不将控制端点计为端点。我通过启用另一个我不会使用的端点来解决这个问题。

要启用另一个端点, 在V-usb文件夹中打开以下文件usbconfig.h ,然后查找以下行并将其更改为1。

 #define USB_CFG_HAVE_INTRIN_ENDPOINT 1 //default 0 

现在,您可以使用控制端点与controlMsg()函数进行低速通信。

在这里你可以看到(通过USBview)设备现在有一个中断端点

 Endpoint Descriptor: bEndpointAddress: 0x81 IN Transfer Type: Interrupt wMaxPacketSize: 0x0008 (8) bInterval: 0x0A