2

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

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

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

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)

如何修复?还有另一种方法吗?有什么建议吗?

这是引发异常的代码

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

这是我得到的关于设备视图 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 完成?

4

1 回答 1

2

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

要启用另一个端点,请打开 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
于 2013-01-04T13:51:42.033 回答