icnet
驱动牛犊
驱动牛犊
  • 注册日期2002-04-05
  • 最后登录2004-03-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2526回复:12

usb读前,为何要先写??

楼主#
更多 发布于:2002-07-15 21:03
我采用9603+89C51 ,底层设备驱动都编好了,上层的读写,用READFILE  ,WRITEFILE,但奇怪的是PC机这边读前,必须选 写一次USB,不然就会死在readfile().上,而且要读两次,第一次随便读几个数,第二次读进的才是C51中的送过来的数??
遇过这种情况没?????

最新喜欢:

Jkw_DevJkw_De...
huangfajin
驱动牛犊
驱动牛犊
  • 注册日期2002-07-14
  • 最后登录2004-01-02
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-07-15 23:31
我也选类似的方案,不过速度要求高,9603或D12+RISC MCU,不过刚接触,以后侵夺多指教
Bluetooth
liudongm
驱动牛犊
驱动牛犊
  • 注册日期2002-06-20
  • 最后登录2018-05-29
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-07-16 20:28
看<<USB大全>>第14章讲到这个问题
study
驱动牛犊
驱动牛犊
  • 注册日期2001-05-14
  • 最后登录2010-08-04
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-07-16 21:41
最开始用的时候好像也碰到过(不过好像读的是两组相同的数),只是后来没这现象了。
学无止境
cracjy
驱动牛犊
驱动牛犊
  • 注册日期2002-04-26
  • 最后登录2003-08-17
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-07-30 12:04
TO ICNET:
小弟最近用9602+C51开发驱动,被搞地一头雾水,能否给小弟一点资料,以供参考,THANK YOU VERY MUCH
custjcy
驱动牛犊
驱动牛犊
  • 注册日期2002-03-31
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-07-30 22:29
我的也是这样
icnet
驱动牛犊
驱动牛犊
  • 注册日期2002-04-05
  • 最后登录2004-03-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2002-07-31 10:24
我现在解决了先写后读的问题:原来是固件初始化时,没读使能,而在写后给了一个读使能,所以需先写后读才行

不过,要读2次(第一次读出来为空,第二次才读出有效值)的问题还是没解决,问过一些行家,他们说可能是时序匹配的问题,但我也有疑问,那为什么接着读第3,4---次都能读出来呢。而非要每次都得连读2次。

[编辑 -  7/31/02 by  icnet]
icnet
驱动牛犊
驱动牛犊
  • 注册日期2002-04-05
  • 最后登录2004-03-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2002-07-31 18:17
这是一个关于USB键盘驱动的例子,可以参考一下,好像本站就有啊
icnet
驱动牛犊
驱动牛犊
  • 注册日期2002-04-05
  • 最后登录2004-03-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2002-07-31 18:20
to 楼上的两位仁兄

这个好像本网上也有的,down下去看看吧
fuguang_y
驱动牛犊
驱动牛犊
  • 注册日期2002-07-30
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2002-08-03 18:22
请教大虾:
在枚举设备过程中,主机发出out请求后,单片机根据请求号将相应的描述符放在DB12缓冲区中,那么主机在什么时候、怎样读取这个缓冲区呢?

icnet
驱动牛犊
驱动牛犊
  • 注册日期2002-04-05
  • 最后登录2004-03-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
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]
skying
驱动牛犊
驱动牛犊
  • 注册日期2002-08-04
  • 最后登录2003-03-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2002-08-08 15:09
 各位仁兄,我现在在调试9604+C51,希望能和大家共同讨论进步
我的qq11248664 email tokyo_dj@sohu.com
hzangqiong
驱动牛犊
驱动牛犊
  • 注册日期2002-06-28
  • 最后登录2007-03-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
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也是这种情况。

急切希望高手给与解答。:)
游客

返回顶部