打印

请教斑竹和各位高人,write10 后主机不发数据的原因

[复制链接]
2033|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xusn|  楼主 | 2007-9-28 15:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
请教斑竹和各位高人,write10 后主机不发数据的原因
21.1  DO     55 53 42 43  18 79 5d 82  USBC.y].                15.1.0        
               00 10 00 00  00 00 0a 2a  .......*                15.1.8        
               00 00 00 00  05 00 00 08  ........                15.1.16       
               00 00 00 00  00 00 00     .......                 15.1.24       
下面主机就停止了,没有数据出现在总线上,
请大伙给分析下什么原因,谢谢

相关帖子

沙发
devusb| | 2007-9-28 19:51 | 只看该作者

可能是数据已经发下去了

BUSHOUND是在发送的数据给设备接收到并应答ACK后才能显示的

出现你这种情况,大概是因为你接收到write10命令,没有去读取USB设备的接收BUFFER,并清除pkt ready标志导致的。

使用特权

评论回复
板凳
xusn|  楼主 | 2007-9-29 10:07 | 只看该作者

谢谢斑竹,还有个问题就是,我的程序里只有一对端点可以收发

谢谢斑竹,还有个问题就是:

1,主机CBW 要求8个SECTOR 的数据,从机是不是必须把8个SECTOR 数据发送
完毕后才能回传CSW, 能不能发送1个SECTOR, 然后回传CSW,在CSW中要求剩余的
7个SECTOR.

2.我的程序里只有一对端点IN1, OUT1可以收发,其他两对端点从来没有中断过,
查了好长时间了,中断也开了,IN2,OUT2,IN3, OUT3,从没有中断过,我想用,
IN3, OUT3,他的FIFO为512B, IN1,OUT1 只有64B

第一次用,没有经验,谢谢斑竹的精彩分析

使用特权

评论回复
地板
devusb| | 2007-9-29 22:39 | 只看该作者

做些实验

第一个问题,可以尝试一下,不过我估计PC机不会支持你这种做法
要应答少于请求的数据,我想需要STALL该端点才行

使用特权

评论回复
5
平常人| | 2007-9-29 22:55 | 只看该作者

回3楼的问题:1)请看BOT协议;2)U盘只用3个端点

问题1)请看BOT协议:“Mass Storage Class Bulk-Only Transport
在第19页的表6.1中,你所说的情况是第(5)种:Hi>Di;这个文件中有说明如何处理。

问题2)在上述文件的第4章中明确说明了:BOT只用到了默认的端点0和一个Bulk-In与一个Bulk-Out,没有用到中断端点。

U盘就是使用的这个BOT协议!

使用特权

评论回复
6
xusn|  楼主 | 2007-9-30 08:34 | 只看该作者

谢谢斑竹和平常人老大的指点

谢谢斑竹和平常人老大的指点
谢谢!

使用特权

评论回复
7
computer00| | 2007-9-30 08:41 | 只看该作者

前面的CBW能够正常吗?前面还有些读的。

发送一个CBW,请求8个扇区,你可以先只返回一个,然后返回CSW失败,剩余长度为7,如此。

使用特权

评论回复
8
devusb| | 2007-9-30 23:36 | 只看该作者

PC会认为你发的CSW是他要的剩下的7个扇区,可能无法支持

使用特权

评论回复
9
xierunyan123| | 2013-3-12 17:24 | 只看该作者
computer00 发表于 2007-9-30 08:41
发送一个CBW,请求8个扇区,你可以先只返回一个,然后返回CSW失败,剩余长度为7,如此。  ...

想请教一下,write10主机不发数据,用逻辑分析仪抓包发现从机给主机返回的是NYET,是否可能是读取Buffer的速度太慢,导致没有足够的内存来存储下一个包导致的呢?

使用特权

评论回复
10
john_lee| | 2013-3-12 17:44 | 只看该作者
NYET是啥?

使用特权

评论回复
11
xierunyan123| | 2013-3-12 23:06 | 只看该作者
john_lee 发表于 2013-3-12 17:44
NYET是啥?

我用的是高速模式,不是全速,NYET高速模式下的一种握手包,高速主机还没准备好接数据包,但是这两天我上盘了之后,想格式化,但是总是失败,抓包发现卡在write10后面,而显示的write10命令后面的数据包长度为0,不过似乎是收到了数据包,挺奇怪的,你遇到过这种情况么?

使用特权

评论回复
12
xierunyan123| | 2013-3-12 23:10 | 只看该作者
devusb 发表于 2007-9-28 19:51
BUSHOUND是在发送的数据给设备接收到并应答ACK后才能显示的出现你这种情况,大概是因为你接收到write10命令 ...

我也觉得是这样,因为格式化的时候write10后会跟着read10,能够读出刚才写进去的数据,但是在第三个write10后就没反应了,不知道什么情况,请教一下

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

35

主题

159

帖子

0

粉丝