阅读:1316回复:4
请问海量硬盘设备通过USB插上主机后何时通过何管道来接收主机方发来的SCSI命令?
我的设备插上后通过控制管道已经枚举成功,可和主机通信传递数据。但是我希望实现成一个USB硬盘设备,所以设备必须能够接收和处理主机发来的标准SCSI transfer command set。请问各位高手:主机何时发来这些命令?是在所有的标准设备请求处理完毕后进行处理还是在别的什么阶段?另外这些命令通过什么管道到达设备,是批管道还是控制管道?
哎,我现在设备的所有请求都已经处理完成,设备枚举成功,PC上也显示UMASS类设备驱动程序工作正常,就是不知道该如何即在哪里处理这个SCSI命令。请教各位大虾了。 |
|
|
沙发#
发布于:2002-05-21 18:10
补充说明:我尝试着把CBW的处理放在进入BULK OUT的中断中进行处理,但是我跟踪发现程序在整个枚举过程中根本没有进入到BULK OUT中断中来。我是这样处理这些管道中断到来顺序的:
1. 读D12芯片的中断寄存器的值. 2. 判断是否有 \"BUS RESET\" 中断到来.如有,则设置总线复位标志,并记录当前时刻。退出中断处理。 3. 如何没有\"BUS RESET\" 到来,则进行以下操作: 4. 首先判断是否有\"SUSPEND CHANGE\"中断到来.如有,则读取当前时刻,把这个时刻和BUS RESET的时刻的时间间隔进行分析,如果间隔大于0.6s,我就认为设备已经被拔除,设置设备状态为拔除。 5. 紧接着再判断是否有\"BULK OUT\"中断到来。如果有,则读取D12的缓冲区,如果为满,则转入CBW(SCSI命令集)的处理。 6.紧接着再判断是否有“CONTROL OUT”中断来到,如有,则转入各种标准设备请求和特定类请求的处理。 7.紧接着再判断是否有\"CONTROL IN\"中断来到,如有,直接向主机回复O长度报文。 8.紧接着再判断是否有\"bulk in\"中断来到,如有,执行D12_ReadLastTransactionStatus 命令清空缓冲即可。 9.最后设置USB消息中断内容,退出中断处理。 以上就是我的处理过程,请大家看看,有没有什么问题?或更好的顺序可以使得CBW得到处理? |
|
|
板凳#
发布于:2002-05-23 16:58
斑竹,请过来帮俺看看呀。
在bulk-only传输中,CBW和CSW及数据都必须在批管道中传送吗?还是也可以选择在控制终点中传送?协议看了有段时间了,我又忘了。版主帮帮忙吧,我用送分往哪里送啊? |
|
|
地板#
发布于:2002-05-24 10:37
都是在BULK里面处理的。
|
|
|
地下室#
发布于:2004-12-17 09:21
这个帖子虽然很老了,并且liuwan大虾已经做出来了,但是我他的帖子启发了我很多知识,所以还上跟个,和同辈交流。
“紧接着再判断是否有"CONTROL IN"中断来到,如有,直接向主机回复O长度报文。”这个BULK的处理可能是不对的,因为BULK是在收到IN包和MCU发送完数据后再产生中断的,所以,这就是跟踪不到中断的原因吧! |
|