2

このデバイスにはUSBポートが組み込まれていないため、AVRチップ(Attiny 2313)からコンピューターにUSBポートを介してデータを送信する簡単なプログラム(のチュートリアルに基づく)を作成しました。 V-USBライブラリを使用して、ソフトウェアを介してそのようなポートをエミュレートしました。

デバイスは期待どおりに動作し、 libusbライブラリを使用してCとインターフェイスするのに問題はありませんでしたが、Javaでアクセスしたいので、libusbのJava実装を探しました。私が管理した唯一のライブラリセットアップするために、バス上のusbが「libusb-win32ラッパー」であることが正常に検出されました。

唯一の問題は、デバイスを開こうとすると例外がスローされることです。

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 に答える