阅读:1418回复:0
关于大量存储设备的数据收发(非枚举过程)问题最近在研究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 |
|