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

[复制链接]
3269|11
 楼主| xusn 发表于 2007-9-28 15:04 | 显示全部楼层 |阅读模式
请教斑竹和各位高人,write10&nbsp;后主机不发数据的原因<br />21.1&nbsp;&nbsp;DO&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;55&nbsp;53&nbsp;42&nbsp;43&nbsp;&nbsp;18&nbsp;79&nbsp;5d&nbsp;82&nbsp;&nbsp;USBC.y].&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;15.1.0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00&nbsp;10&nbsp;00&nbsp;00&nbsp;&nbsp;00&nbsp;00&nbsp;0a&nbsp;2a&nbsp;&nbsp;.......*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;15.1.8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00&nbsp;00&nbsp;00&nbsp;00&nbsp;&nbsp;05&nbsp;00&nbsp;00&nbsp;08&nbsp;&nbsp;........&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;15.1.16&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00&nbsp;00&nbsp;00&nbsp;00&nbsp;&nbsp;00&nbsp;00&nbsp;00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.......&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;15.1.24&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />下面主机就停止了,没有数据出现在总线上,<br />请大伙给分析下什么原因,谢谢
devusb 发表于 2007-9-28 19:51 | 显示全部楼层

可能是数据已经发下去了

BUSHOUND是在发送的数据给设备接收到并应答ACK后才能显示的<br /><br />出现你这种情况,大概是因为你接收到write10命令,没有去读取USB设备的接收BUFFER,并清除pkt&nbsp;ready标志导致的。
 楼主| xusn 发表于 2007-9-29 10:07 | 显示全部楼层

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

谢谢斑竹,还有个问题就是:<br /><br />1,主机CBW&nbsp;要求8个SECTOR&nbsp;的数据,从机是不是必须把8个SECTOR&nbsp;数据发送<br />完毕后才能回传CSW,&nbsp;能不能发送1个SECTOR,&nbsp;然后回传CSW,在CSW中要求剩余的<br />7个SECTOR.<br /><br />2.我的程序里只有一对端点IN1,&nbsp;OUT1可以收发,其他两对端点从来没有中断过,<br />查了好长时间了,中断也开了,IN2,OUT2,IN3,&nbsp;OUT3,从没有中断过,我想用,<br />IN3,&nbsp;OUT3,他的FIFO为512B,&nbsp;IN1,OUT1&nbsp;只有64B<br /><br />第一次用,没有经验,谢谢斑竹的精彩分析
devusb 发表于 2007-9-29 22:39 | 显示全部楼层

做些实验

第一个问题,可以尝试一下,不过我估计PC机不会支持你这种做法<br />要应答少于请求的数据,我想需要STALL该端点才行
平常人 发表于 2007-9-29 22:55 | 显示全部楼层

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

问题1)请看BOT协议:“Mass&nbsp;Storage&nbsp;Class&nbsp;Bulk-Only&nbsp;Transport”<br />在第19页的表6.1中,你所说的情况是第(5)种:Hi&gtDi;这个文件中有说明如何处理。<br /><br />问题2)在上述文件的第4章中明确说明了:BOT只用到了默认的端点0和一个Bulk-In与一个Bulk-Out,没有用到中断端点。<br /><br />U盘就是使用的这个BOT协议!
 楼主| xusn 发表于 2007-9-30 08:34 | 显示全部楼层

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

谢谢斑竹和平常人老大的指点<br />谢谢!
computer00 发表于 2007-9-30 08:41 | 显示全部楼层

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

发送一个CBW,请求8个扇区,你可以先只返回一个,然后返回CSW失败,剩余长度为7,如此。
devusb 发表于 2007-9-30 23:36 | 显示全部楼层

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

  
xierunyan123 发表于 2013-3-12 17:24 | 显示全部楼层
computer00 发表于 2007-9-30 08:41
发送一个CBW,请求8个扇区,你可以先只返回一个,然后返回CSW失败,剩余长度为7,如此。  ...

想请教一下,write10主机不发数据,用逻辑分析仪抓包发现从机给主机返回的是NYET,是否可能是读取Buffer的速度太慢,导致没有足够的内存来存储下一个包导致的呢?
john_lee 发表于 2013-3-12 17:44 | 显示全部楼层
NYET是啥?
xierunyan123 发表于 2013-3-12 23:06 | 显示全部楼层
john_lee 发表于 2013-3-12 17:44
NYET是啥?

我用的是高速模式,不是全速,NYET高速模式下的一种握手包,高速主机还没准备好接数据包,但是这两天我上盘了之后,想格式化,但是总是失败,抓包发现卡在write10后面,而显示的write10命令后面的数据包长度为0,不过似乎是收到了数据包,挺奇怪的,你遇到过这种情况么?
xierunyan123 发表于 2013-3-12 23:10 | 显示全部楼层
devusb 发表于 2007-9-28 19:51
BUSHOUND是在发送的数据给设备接收到并应答ACK后才能显示的出现你这种情况,大概是因为你接收到write10命令 ...

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

本版积分规则

35

主题

159

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部