usb设备是串行数据,要等待数据通信完成?

解决方案 »

  1.   

    会不会是优先级低,导致USB接收缓冲区不能及时收到数据或者你读数据时指定了数量,但因为操作系统调度问题导致数据数量不够使你的读函数进入阻塞并导致这次的读取失败
      

  2.   

    worldy您好:
    24   DI 01 01                     43ms      USB人体输入学设备驱动
    23.1 DI 01 01 00 00 00 00 00      10ms     HID compliant device驱动
    您看抓包的数据。一个是43ms,一个是10ms, 10ms数据通信还不能完成么!要真是这样也太慢了!太七个字节!hdg3707您好:
    1.读线程的优先级是THREAD_PRIORITY_TIME_CRITICAL,是最高的了,HID compliant device设备驱动的优先级无从得知!很象是USB接收缓冲区不能及时收到数据!如何提前检测到呢!有没有方法!2.读数据时我中指定了Capabilities.InputReportByteLength(即最长报告的长度,HID始有多个报告,是需要读最大报告的长度的),数据数量不够,数据也应该被放到了USB接收缓冲区!可为什么下次成功读到时,这部分不全的数据会被忽略了呢!因为下次成功时,我读到的数据就是设备新发过来的数据。原来不全的数据去哪了呢!驱动是以什么机制清理的缓冲区呢!网上查到USB缓冲区是一个可指定大小的缓冲区,我指定的大小是256,可以循环存256个报告,所以应该不会有后一个报告数据覆盖掉前一个不全的报告数据!搞不明白HID compliant device设备驱动这块对数据缓冲区及如何与Readfile交互的机制!有明白这块的大牛给解析一下吗!
      

  3.   

    看这包!
    23.1 DI 01 01 00 00 00 00 00      10ms     HID compliant device驱动HID compliant device设备驱动好象已经向USB人体输入学设备驱动请求数据了!也得到了回应,数据也在总线上传递了!所以BUS HOUND抓包才能抓着上面这包数据。但好象HID compliant device设备驱动 可能没能正确的接收到这段数据。或收到了不能放到自已的USB接收缓冲区中,或收到了不全的数据,Readfile读不到足够的数据。有没有方法来判断具体是那种情况!即在Readfile失败后有相关的错误信息指明是何种错误引起的!有没有明白这块驱动机制的达人细一点的讲述一下,HID compliant device设备驱动请求数据及和Readfile交互的细节!猜想分析都行!
      

  4.   

    看过一个文章“Windows主机端与自定义USB HID设备通信详解",有这样一段文字。1 、 ReadFile 的调用不会引起设备的任何反应,即 HID 设备与主机之间的中断 IN 传输不与 ReadFile 打交道。实际上主机会在最大间隔时间(由设备的端点描述符来指定)内轮询设备,发出中断 IN 传输的请求。“读取”即意味着从某个 buffer 里面取回数据,实际上这个 buffer 就是 HID 设备驱动中的 buffer 。这个 buffer 的大小可以通过 HidD_SetNumInputBuffers 来改变。在 XP 上缺省值是 32 (个报告)。实贱表明:是”USB人体输入学设备驱动“会在最大间隔时间(由设备的端点描述符来指定)内轮询设备,发出中断 IN 传输的请求。然后将数据收到自已驱动中的 buffer!但ReadFile也不直接与”USB人体输入学设备驱动“打交道!有兴趣大家可以用BUS HOUND看一下!你只监视”USB人体输入学设备“,你不调用ReadFile,下位机也会有数据发上来。BUS HOUND可以看到数据。下位机没数据时!你调用ReadFile,”USB人体输入学设备“,也不会有动作!而当您监视了!HID compliant device设备,你不ReadFile,就是”USB人体输入学设备“有接收到数据,HID compliant device设备也不会有数据请求的!只有当你ReadFile了!HID compliant device设备就会出现一次数据请求!你就能看到HID compliant device的数据。更细一点的测试是!HID下位机连发了向个报告时(ReadFile不去读),”USB人体输入学设备驱动“会都接收这些报告数据,然后放在自己的buffer中!接收你调用一次ReadFile,”HID compliant device驱动“就会向”USB人体输入学设备驱动“请求一次数据,然后它如果和ReadFile相交成功的话,ReadFile就会正确读到一个报告数据。你再调用ReadFile会再读到一个!直到”USB人体输入学设备驱动“收到的数据全部被读完!现在的我的情况就出现在HID compliant device驱动和ReadFile相交这块!ReadFile绝大多数时可以成功读到数据,但总会不定期的有一次不成功!还有一个怪的现象!ReadFile好象只是发出了一个Windows IO请求,而这个Windows IO请求好象没成功和”HID compliant device驱动“交互。因为从现象上看HID compliant device设备驱动好象没有超时机制!如ReadFile后 wait用永久等待的方式在等,当出现这种情况程序会卡死在这里永远等待,但当下一次下位机设备发上新的数据时!wait也会结束等待,读出最新的数据。而不成功的那次数据就好象从来没出现过一样,人间蒸发了!这中间到底那块出了问题!是我想知道的!有没有明白这块驱动机制的达人细一点的讲述一下,HID compliant device设备驱动向”USB人体输入学设备“请求数据 及和Readfile交互的细节!猜想分析都行!
      

  5.   

    因为你的数据不能正好塞满一个buff,某条数据就塞了一半,导致这条数据就没了?猜的
      

  6.   

    vipcxj:这条数据是如何及所种原因被滤掉了呢!
    23.1 DI 01 01 00 00 00 00 00      10ms     HID compliant device驱动
    BUS HOUND 都能截获这包数据,BUS HOUND 其本质也是一个过滤驱动程序!同一条数据,为什么它成功了!HID compliant device驱动 失败了呢!w110223:本贴意在!请教明白这块驱动机制的达人细一点的讲述一下,HID compliant device设备驱动向”USB人体输入学设备“请求数据 及和Readfile交互的细节!因为关于这块的资料很少有描述的!至于通讯出错,丢了再发,这类的处理手段!大家一般都能处理好的!