用到android与芯片通过usb通信,发现有延迟,最高50ms,再高有数据丢失,网上的解决办法:

这个增加fifo的缓冲区

https://stackoverflow.com/questions/9405710/android-losing-incoming-hi-speed-usb-data

 

这个用usbrequest

UsbRequest.queue(..)100%无故障地工作吗? 我也遇到了那种问题。 - support_ms 2016年 3月4日11:17

这个轮训下发命令:

我做同样的事情时,使用这样的东西真的帮助了我,我发现你必须做某种类型的while循环。

对于我的设备,我有64个字节的数据包进给我,数据包将是两个控制字节和62个数据,所以对于我的传输,我不得不做类似的事情

StringBuilder sb = new StringBuilder(); while(bulkTransfer(UsbEndpoint endpoint, byte[] buffer, int length, int timeout) > 2){ for(int i = 2; i < buffer.length(); i++){ sb.append((char) buffer[i]); } }

这些线条对我来说很有用,我有完全相同的问题,这就是我修复它的方法。 如果您需要,我会提供更多信息。 只是评论:)。 我知道这对我来说真的很令人沮丧。 我使用Acer Iconia A500与Android 4.0.3顺便说一句

https://stackoverflow.com/questions/10889461/android-usb-host-api-bulk-transfer-buffer-size?noredirect=1&lq=1

【android之USB通信】android之USB数据传输

这个说有四总传输方式,但是都没有相应说明


 

这段代码是中断传输吗?

mHandler = new Handler() {
            public void handleMessage(Message msg) {                    
                if (msg.what == 1) { // 1 means send a 64 bytes array in msg.obj
                    ByteBuffer buffer = ByteBuffer.allocate(BUFFER_SIZE);
                    final byte[] array = (byte[]) msg.obj;                      
                    buffer.clear();
                    buffer.put( array );
                    UsbRequest outRequest = new UsbRequest();
                    outRequest.initialize(mUsbConnection, mUsbEndpointOut);
                    outRequest.queue(buffer, BUFFER_SIZE);
                    Log.d(L.TAG, "Queueing request:"+outRequest);
                    // don't do a mConnection.requestWait() here, ReceiveThread is already listening 
                } else if (msg.what == 2) { // 2 means exit
                    Log.d(L.TAG,  "SenderThread::handleMessage(): terminate");
                    Looper.myLooper().quit();
                } else {
                    Log.e(L.TAG, "SenderThread::handleMessage(): unknow message type: " + msg.what);
                }
            }
        };