打印

【讨论】关于大量存储设备的数据收发(非枚举过程)问题

[复制链接]
1609|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 l_lin2003 于 2012-5-28 11:05 编辑

最近在研究MSC类的数据收发,在其协议《Mass Storage Class Bulk-Only Transport》中时通过CBW命令来控制数据的OUTIN,采用的端点传输类型为bulk

比如说主机要发送一个OUT数据,首先要发送一个方向为OUTCBW,接下来才能传输OUT令牌包发送OUT数据,最后是CSW;当主机要获取设备的信息或者响应数据,则先发一个数据方向为INCBW,然后再发IN令牌包,获取IN数据;

一次数据收发需要两条CBW来控制的(一个方向为OUT,一个方向为IN),那么现在有个问题:能不能只通过主机发送一个方向为OUTCBW来控制数据的收发(也就是说主机不用发送数据方向为INCBW了),或者说只用一个方向为OUTCBW来输出数据,对于设备的响应数据则采用中断输入管道Interrupt—IN来传输,也就是主机可以通过一定的时间周期去查询设备的响应。我试了一下,即把大量存储设备的端点描述符中IN端点的bmAttributes改为03Interrupt),轮询时间bInterval设为10ms,其他不变,如下所示:

/**********************IN端点描述符定义***********************/
    0x07,                          /*bLength 07)*/
    0x05,                          /*bDescriptorType Endpoint=05)*/
    0x82,                          /*EndpointAddress EP2_IN)*/
   
0x03,                          /*bmAttributes Interrupt)*/
    0x40,                          /*wMaxPacketSize 64 byte)*/
    0x00,
   
0x01,                          /*bInterval*/

/**********************OUT端点描述符定义***********************/
    0x07,                          /*bLength 07)*/
    0x05,                          /*bDescriptorType Endpoint=05)*/
    0x02,                          /*EndpointAddress EP2_OUT)*/
    0x02,                          /*bmAttributes (BULK)*/
    0x40,                          /*wMaxPacketSize(64 byte)*/
    0x00,
    0x00,                          /*bInterval*/

但这样修改后,在枚举过程中设备端点就挂起了,PC硬件安装期间出现一个问题。。。。

通过bus hound抓取的数据如下:
见附件插图00

通过USB分析仪抓取的数据如 下

见附件插图01:




拿出来和大家讨论一下,看看我这样的想法合不合乎逻辑

谢谢!

相关帖子

沙发
平常人| | 2012-5-28 13:26 | 只看该作者
这样的想法合乎逻辑,但不符合协议规范。

如果你要想兼容现在市场上所有的PC和U盘,就老老实实地按照协议规范的要求做。如果只是想玩玩,随便怎么做都可以。

使用特权

评论回复
板凳
aozima| | 2012-5-28 13:51 | 只看该作者
不知道楼主用的是哪个 USB分析仪 ?看起来挺强大

使用特权

评论回复
地板
l_lin2003|  楼主 | 2012-5-28 16:41 | 只看该作者
嗯,谢谢啦 2# 平常人

使用特权

评论回复
5
l_lin2003|  楼主 | 2012-5-28 16:42 | 只看该作者
是catalyst的分析仪,强大不强大不知道,没用过其他牌子的 3# aozima

使用特权

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

本版积分规则

9

主题

103

帖子

1

粉丝