android 通讯usb;为什么总是需要重新插拔USB才能获取响应数据?

android communication usb; why always need to replug USB to get responds data?

我创建了一个 Android 通信来发送和接收数据 to/from USB

int iRes2 = conn.bulkTransfer(epOUT, bcdInfo.cbwBuffer.array(), 31, 2000);
iRes2 = conn.bulkTransfer(epOUT, bcdInfo.finalBSTD.array(), 512, 2000);
                bcdInfo.requestData();
iRes2 = conn.bulkTransfer(epIN, bcdInfo.cswBuffer, 512, 2000); 
iRes2 = conn.bulkTransfer(epOUT, bcdInfo.cbwBuffer.array(), 31, 2000);
iRes2 = conn.bulkTransfer(epIN, bcdInfo.cswBuffer, 512, 2000);

我收到了正确的数据。问题是,我只在 :

时得到正确的数据
  1. 我删除了另一个命令通信。假设上面的代码是 命令 A。如果我将命令 B 放在命令 A 的上方,那么我得到了 命令A的数据错误。
  2. 我每次都将 USB 插入 Android 设备 想调试。意味着我需要拔下 USB 并重新插入 Android 每次调试前再次设备。

我需要向 USB 发送默认命令以告知 USB 通信已完成。之后 USB 将准备好接收新命令。下面是我的默认命令,我称之为 OK 命令。

 public void goOkCommand(UsbDeviceConnection conn, UsbEndpoint epOUT, UsbEndpoint epIN) {

        ByteBuffer goOk = ByteBuffer.allocate(31);
        goOk.putInt(0xVALUE);
        goOk.putInt(0xVALUE);
        goOk.put(index, (byte) 0xVALUE);
        int iRes2 = conn.bulkTransfer(epOUT, goOk.array(), 31, 2000);//1. SEND OK COMMAND

        //2. PREPARE MEMORY FOR RECEIVED DATA
        byte cswBuffer[] = new byte[13];
        Arrays.fill(cswBuffer, (byte) 0);// put ALL 0 first

        iRes2 = conn.bulkTransfer(epIN, cswBuffer, 13, 2000);//3. RECEIVED OK MESSAGE
        iRes2 = conn.bulkTransfer(epIN, cswBuffer, 13, 2000);
    }