已经通过bulkendpoint实现对usb的写入和读取。
现在情况是,usb那边每40微秒生成512bytes的数据。
上位机这边在一个while(ture){}循环内部一直调用BulkInEndPoint->xferdata(data[],len)来获取USB的数据。
CCyUSBDevice *USBDevice = new CCyUSBDevice(NULL);
CCyBulkEndPoint *bulkIn = NULL;
bulkIn = (CCyBulkEndPoint *)USBDevice->EndPoints[3];
bulkIn->TimeOut = 1000;
unsigned char data2[512];
LONG len =512;
while(true)
{
while(!flag)
{
//当false之后重新执行xferdata。
flag = bulkIn->XferData(data2,len);
if(!flag)
{
std::cout<<std::endl;
std::cout<<packetCounter;
std::cout<<"failed code: "<<flag<<" error: ";
std::cout<<bulkIn->LastError<<std::endl;;
std::cout<<"close USBDevice and reStart";
USBDevice->Close();
USBDevice->Open(0);
bulkIn = (CCyBulkEndPoint *)USBDevice->EndPoints[3];
flag = bulkIn->XferData(data2,len);
}
else
{
flag = false;
}
}
}
查到是xferdata()方法返回false。
这时while(!flag)判真,重新调用bulkInEndPoint->XferData(data[], len);
但自这之后xferdata一直就返回false了。
同事用抓包工具说,阻塞之后上位机没有发出SOF命令。
正常一次包的发送应该是SOF-In-DATA-ACK。 |