阅读:2526回复:12
usb读前,为何要先写??
我采用9603+89C51 ,底层设备驱动都编好了,上层的读写,用READFILE ,WRITEFILE,但奇怪的是PC机这边读前,必须选 写一次USB,不然就会死在readfile().上,而且要读两次,第一次随便读几个数,第二次读进的才是C51中的送过来的数??
遇过这种情况没????? |
|
最新喜欢:![]() |
沙发#
发布于:2002-07-15 23:31
我也选类似的方案,不过速度要求高,9603或D12+RISC MCU,不过刚接触,以后侵夺多指教
|
|
|
板凳#
发布于:2002-07-16 20:28
看<<USB大全>>第14章讲到这个问题
|
|
地板#
发布于:2002-07-16 21:41
最开始用的时候好像也碰到过(不过好像读的是两组相同的数),只是后来没这现象了。
|
|
|
地下室#
发布于:2002-07-30 12:04
TO ICNET:
小弟最近用9602+C51开发驱动,被搞地一头雾水,能否给小弟一点资料,以供参考,THANK YOU VERY MUCH |
|
5楼#
发布于:2002-07-30 22:29
我的也是这样
|
|
6楼#
发布于:2002-07-31 10:24
我现在解决了先写后读的问题:原来是固件初始化时,没读使能,而在写后给了一个读使能,所以需先写后读才行
不过,要读2次(第一次读出来为空,第二次才读出有效值)的问题还是没解决,问过一些行家,他们说可能是时序匹配的问题,但我也有疑问,那为什么接着读第3,4---次都能读出来呢。而非要每次都得连读2次。 [编辑 - 7/31/02 by icnet] |
|
7楼#
发布于:2002-07-31 18:17
这是一个关于USB键盘驱动的例子,可以参考一下,好像本站就有啊
|
|
8楼#
发布于:2002-07-31 18:20
to 楼上的两位仁兄
这个好像本网上也有的,down下去看看吧 |
|
9楼#
发布于:2002-08-03 18:22
请教大虾:
在枚举设备过程中,主机发出out请求后,单片机根据请求号将相应的描述符放在DB12缓冲区中,那么主机在什么时候、怎样读取这个缓冲区呢? |
|
10楼#
发布于:2002-08-08 13:35
windows对usb设备的枚举顺序:
1.GetDeviceDescriptor 主机读Length域 2. Setaddress 一般为02或03 3. 连续3次GetDeviceDscriptor,读取全部设备描述符,一般为18Bytes 分为多次传输 4. GetConfigDescirptor 5. GetStringDescriptor(可能没有)根据在设备描述符中是否有string索引而定。 6.读取全部ConfigDescriptor ,读取次根据描述符大小而定 7.如果以上步骤都正确,主机将找到新设备,提示安装驱动程序。 [编辑 - 8/8/02 by icnet] |
|
11楼#
发布于:2002-08-08 15:09
各位仁兄,我现在在调试9604+C51,希望能和大家共同讨论进步
我的qq11248664 email tokyo_dj@sohu.com |
|
12楼#
发布于:2002-08-09 11:09
遇到了先读后写,导致PC端读失败的情况。具体情况如下:
用windrv做的驱动,管道是Bulk。 Pipe2 :Out 32 bulk(只发标志Pipe6长度的两个字节) Pipe6: Out 64 bulk(可能为大量数据) Pipe81:In 32 bulk(只发标志Pipe85长度的两个字节) Pipe85:In 64 bulk.(可能为大量数据) 应用启动后,先读81,固件内确实收不到中断; 再发送一遍,读取81,固件内收到了中断,但是PC端却没有受到任何数据,(按照bulk协议,既然固件收到了中断,说明PC收到了合法的数据,给了固件一个ACK),读取85,成功接收到数据; 所以推断PC端有问题。此后如果再读取81,再发送和接收,接收81,85,就能成功接收到。Windrv Wizard也是这种情况。 另外一种情况,应用启动后,先读85,固件内确实收不到中断; 再发送一遍,读取81,接受正常,再读取85,接收到的数据少了64字节; 此后如果再读取85,再发送和接收,接收81,85,就能成功接收到。Windrv Wizard也是这种情况。 急切希望高手给与解答。:) |
|