l_lin2003
驱动牛犊
驱动牛犊
  • 注册日期2012-04-17
  • 最后登录2012-12-11
  • 粉丝2
  • 关注1
  • 积分9分
  • 威望51点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1418回复:0

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

楼主#
更多 发布于:2012-05-28 13:51
最近在研究MSC类的数据收发,在其协议《Mass Storage Class Bulk-Only Transport》中时通过CBW命令来控制数据的OUT和IN,采用的端点传输类型为bulk。
比如说主机要发送一个OUT数据,首先要发送一个方向为OUT的CBW,接下来才能传输OUT令牌包发送OUT数据,最后是CSW;当主机要获取设备的信息或者响应数据,则先发一个数据方向为IN的CBW,然后再发IN令牌包,获取IN数据;
一次数据收发需要两条CBW来控制的(一个方向为OUT,一个方向为IN),那么现在有个问题:能不能只通过主机发送一个方向为OUT的CBW来控制数据的收发(也就是说主机不用发送数据方向为IN的CBW了),或者说只用一个方向为OUT的CBW来输出数据,对于设备的响应数据则采用中断输入管道Interrupt—IN来传输,也就是主机可以通过一定的时间周期去查询设备的响应。我试了一下,即把大量存储设备的端点描述符中IN端点的bmAttributes改为03(Interrupt),轮询时间bInterval设为10ms,其他不变,如下所示:
/**********************IN端点描述符定义***********************/
    0x07,                          /*bLength 07)*/
    0x05,                          /*bDescriptorType Endpoint=05)*/
    0x82,                          /*EndpointAddress EP2_IN)*/
    
0x03,                          /*bmAttributes Interrupt)*/(原来类型为0x02,bulk类型)
   0x40,                          /*wMaxPacketSize 64 byte)*/
    0x00,
    
0x01,                          /*bInterval*/(原来值为00)
/**********************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抓取的数据如下所示:
通过USB分析仪抓取的数据如下(枚举到配置后显示设备停止挂起)

图片:截图01.png

游客

返回顶部