用到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
- 我使用UsbRequest API做了一个拥有大量usb流量的项目。 我从来没有对丢失数据提出过投诉。 但是,我记得我只使用UsbRequest.queue(..)来传入数据。 为了发送数据,我使用了超时1秒的同步API。 使用UsbRequest.queue(..)时,请确保您放入队列的请求与您从队列中收到的请求相同。 我还为每个阻塞阅读电话创建了一个新请求。 - Pablo Valdes 2016年 3月5日17:38
- https://stackoverflow.com/questions/9108548/android-usb-host-bulktransfer-is-losing-data
这个轮训下发命令:
我做同样的事情时,使用这样的东西真的帮助了我,我发现你必须做某种类型的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顺便说一句
【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);
}
}
};