Java 为AVR连接由V-USB库供电的libUSB设备
我编写了一个简单的程序(基于教程),通过USB端口将数据从AVR芯片(Attiny 2313)发送到计算机,因为这个设备没有内置USB端口,所以我使用库通过软件模拟这样的端口 该设备按预期工作,我使用库将其与C接口没有问题,但是我想用Java访问它,所以我查找了libusb的Java实现。我唯一成功设置的库,它在总线上成功找到了usb 唯一的问题是,当我尝试打开设备时,该设备会引发异常Java 为AVR连接由V-USB库供电的libUSB设备,java,c,usb,libusb,Java,C,Usb,Libusb,我编写了一个简单的程序(基于教程),通过USB端口将数据从AVR芯片(Attiny 2313)发送到计算机,因为这个设备没有内置USB端口,所以我使用库通过软件模拟这样的端口 该设备按预期工作,我使用库将其与C接口没有问题,但是我想用Java访问它,所以我查找了libusb的Java实现。我唯一成功设置的库,它在总线上成功找到了usb 唯一的问题是,当我尝试打开设备时,该设备会引发异常 ch.ntb.usb.USBException: No USB endpoints found. Check
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);
这是我得到的关于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
现在,您可以使用control endpoint与controlMsg()函数进行低速通信
在这里,您可以看到(通过USBview)设备现在有一个中断端点
Endpoint Descriptor:
bEndpointAddress: 0x81 IN
Transfer Type: Interrupt
wMaxPacketSize: 0x0008 (8)
bInterval: 0x0A
啊,对不起,没有看到你在我的帖子上的评论。。。是的,这对我来说也是同样的问题。我需要启用一个“真正的”端点,它可以通过java找到。但是如果端点存在,您可以使用基于中断的controlmsg样式。。。