更新 2:
我已经通过短接其 IN 和 OUT 引脚对 FTDI 芯片进行了测试。controlTransfer()
总是返回 0,返回发送的bulkTransfer() - Write
数据长度并 bulkTransfer() - Read
返回发送的任何数据。
有人知道如何或在哪里可以找到 Prolific 的驱动程序吗?
更新 1:
我用 Slick USB 2 做了一些测试,我想我找到了我的问题。看起来我缺少一些驱动程序,因为通信无法正常工作。
我将我的开发板连接到 Slick USB 2,然后尝试使用我的应用程序连接并打印“打开设备并声明:false,file = 45,test = null”。我再次尝试,通信开始工作。我能够按预期写入和读取数据。此外,当我重新连接电缆时,通信停止工作。
我猜,Slick USB 2 正在安装一些通信所需的驱动程序。
有谁知道我在哪里或如何找到这个驱动程序?
我希望我的 Android 设备(Galaxy Tab 2.0 7",版本 4.0.3)与定制板通信。为此,我使用 OTG 电缆 + USB 到串行转换器(多产)。
我已经测试了与 Slick USB 2 应用程序的通信,一切正常。
现在,我正在尝试使用 USB Host API 创建自己的应用程序。我添加了意图过滤器,当我连接我的电路板时,它也会被识别。我正在使用以下代码:
UsbDevice usbDevice; // contains device from intent-filter
Context context; // activity object
UsbManager manager = (UsbManager) context.getSystemService(Context.USB_SERVICE);
Toast.makeText(context, "usb device perm: " + manager.hasPermission(usbDevice), Toast.LENGTH_LONG).show();
UsbInterface interfaceUsb = usbDevice.getInterface(0);
UsbDeviceConnection connection = manager.openDevice(usbDevice);
boolean resClaim = connection.claimInterface(interfaceUsb, true);
Toast.makeText(context, "open device and claim: " + resClaim + ", file = " + connection.getFileDescriptor() + ", test = " + connection.getSerial(), Toast.LENGTH_LONG).show();
// Prints "open device and claim: true, file = 45, test = null"
int result = connection.controlTransfer(0x40, 0x03, 0x0034, 0, null, 0, 0); // set baudrate 57600
Toast.makeText(context, "result: " + result, Toast.LENGTH_LONG).show(); // returns -1
int resultWrite = connection.bulkTransfer(endpointUsbWrite, new byte[]{'a'}, 1, 1000);
byte[] bytesRead = new byte[64];
int resultRead = connection.bulkTransfer(endpointUsbRead, bytesRead, bytesRead.length, 1000);
// resultWrite returns 1, resultRead returns -1
controlTransfer()
总是返回-1 。我也尝试过bulkTransfer() - write
,它返回发送的数据的长度,但板子没有收到任何数据。bulkTransfer() - read
返回 -1
我已经做了一个测试,我将我的开发板连接到我的应用程序并尝试连接到 Slick USB 2 应用程序并且 Slick USB 2 能够连接到我的开发板 - 这真的不应该工作。我想,我无法正确打开设备。
我在这里想念什么?我检查了许多线程,但未能解决问题。有人可以提出一些建议吗?