今天有空写以下bulk传输。bulk的话,cy开发包里有个例子cybulk写的很好,不过说实话,那个太烦琐了,基本上我们自己只用到其中的一部分,另外,就是局限性很大,例如它只是512字节的倍数,对于任意数目的字节貌似是不支持的,数据会不同步。 为了提高传输速度与效率,一般要把数据采集放在另外一个线程,单独开启一个bulk线程。恩,前面的还是稍微提一下,在打开USB,设定端点后,紧接着开启线程,进行bulk采集: if (USBDevice->IsOpen()) { //如果USB设备已经打开 然后是线程中的处理,在这里上位机用异步接收,创建异步事件: OVERLAPPED inOvLap; inOvLap.hEvent = CreateEvent(NULL, false, false, "CYUSB_IN"); 线程循环: bool success; 主要是三步,调用三个函数BeginDataXfer,WaitForXfer,FinishDataXfer。按照手册上说的,BeginDataXfer发起异步传输,并且立即返回。也就是说,发起此次的inlen后,并不会等inlen传输完,而是立即开始下一次inlen字节传输;WaitForXfer,异步传输{zd0}等待时间;FinishDataXfer,到这里才开始真正的写内存,将读到的数写到缓冲区indata中。 {zh1},完了别忘记释放对象: CloseHandle(inOvLap.hEvent); 另外,如果要传输非512字节整数倍的数据,而且不是一次传输完的话,{zh0}在线程中用SetXferSize()重新设置传输大小,否则会导致数据不同步。 好了,写到这里,本来以前写了个bulk数据采集简单的例子的,可惜baidu传不了附件,呵呵。。。。。。 【谷】
|