阅读:1696回复:1
请教CY7C68013 Bulk传输的问题(非常感谢大家)
非常感谢大家!!!
今有一个采用请教CY7C68013的采集板, 上层应用程序单独启动了一个监视读USB数据的线程,但是发现在每一次读数据之后,再读取下一次数据之间总是会丢掉一大串的数据 另外有个问题,比如在操作RS232口的时候,可知设置发送和接收缓冲区,不知道自带的驱动有没有这个功能。 读函数如下: m_InPipeNum = 2; 调用是在一个线程中不停的调用该函数。 UINT CUsbDevice::ReadUsbDevice(HANDLE hInDevice,UINT ReadLen, LPVOID pReadBuffer) { BULK_TRANSFER_CONTROL inBulkControl; THREAD_CONTROL inThreadControl; memset(pReadBuffer,0,ReadLen); // initialize data structures for the read thread inBulkControl.pipeNum = m_InPipeNum; inThreadControl.hDevice = hInDevice; inThreadControl.Ioctl = IOCTL_EZUSB_BULK_READ; inThreadControl.InBuffer = (PVOID)&inBulkControl; inThreadControl.InBufferSize = sizeof(BULK_TRANSFER_CONTROL); inThreadControl.OutBuffer = pReadBuffer; inThreadControl.OutBufferSize = ReadLen; inThreadControl.completionEvent = m_hReadCompleteEvent; inThreadControl.status = FALSE; inThreadControl.BytesReturned = 0; //启动读写线程 CWinThread * rd = AfxBeginThread(TransferThread,&inThreadControl); inThreadControl.hThread = rd->m_hThread; //等待读写操作完成 WaitForSingleObject(m_hReadCompleteEvent,INFINITE); // if either the read or write failed, we want to stop the test if (!inThreadControl.status) { TRACE0("Read UsbDevice Error!\r\n"); return 0; } return inThreadControl.BytesReturned; } I/O操作线程定义如下: UINT CUsbDevice::TransferThread(LPVOID pParam) { PTHREAD_CONTROL threadControl = (PTHREAD_CONTROL)pParam; // perform the ISO transfer threadControl->status = DeviceIoControl ( threadControl->hDevice, threadControl->Ioctl, threadControl->InBuffer, threadControl->InBufferSize, threadControl->OutBuffer, threadControl->OutBufferSize, &threadControl->BytesReturned, NULL); // if an event exists, set it if (threadControl->completionEvent) { SetEvent(threadControl->completionEvent); } return 0; } |
|
沙发#
发布于:2007-09-24 10:50
你要分辨是软件还是硬件问题,cy7c68013开发包里有标准程序,建议你先试试硬件、firmware,再动驱动。
|
|